From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: linux-f2fs-devel@lists.sourceforge.net,
Eric Biggers <ebiggers@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [f2fs-dev] [PATCH v2] f2fs: use memcpy_{to, from}_page() where possible
Date: Sat, 20 Aug 2022 04:08:19 +0200 [thread overview]
Message-ID: <4750218.GXAFRqVoOG@opensuse> (raw)
In-Reply-To: <20220819223300.9128-1-ebiggers@kernel.org>
On sabato 20 agosto 2022 00:33:00 CEST Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> This is simpler, and as a side effect it replaces several uses of
> kmap_atomic() with its recommended replacement kmap_local_page().
>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>
> v2: remove unneeded calls to flush_dcache_page(),
> and convert the kmap_atomic() in f2fs_write_inline_data().
>
> fs/f2fs/inline.c | 15 ++++-----------
> fs/f2fs/super.c | 11 ++---------
> fs/f2fs/verity.c | 10 ++--------
> 3 files changed, 8 insertions(+), 28 deletions(-)
It looks good to me...
Reviewed-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Thanks,
Fabio
> diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
> index bf46a7dfbea2fc..73da9331803696 100644
> --- a/fs/f2fs/inline.c
> +++ b/fs/f2fs/inline.c
> @@ -64,7 +64,6 @@ bool f2fs_may_inline_dentry(struct inode *inode)
> void f2fs_do_read_inline_data(struct page *page, struct page *ipage)
> {
> struct inode *inode = page->mapping->host;
> - void *src_addr, *dst_addr;
>
> if (PageUptodate(page))
> return;
> @@ -74,11 +73,8 @@ void f2fs_do_read_inline_data(struct page *page, struct
> page *ipage) zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE);
>
> /* Copy the whole inline data block */
> - src_addr = inline_data_addr(inode, ipage);
> - dst_addr = kmap_atomic(page);
> - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
> - flush_dcache_page(page);
> - kunmap_atomic(dst_addr);
> + memcpy_to_page(page, 0, inline_data_addr(inode, ipage),
> + MAX_INLINE_DATA(inode));
> if (!PageUptodate(page))
> SetPageUptodate(page);
> }
> @@ -246,7 +242,6 @@ int f2fs_convert_inline_inode(struct inode *inode)
>
> int f2fs_write_inline_data(struct inode *inode, struct page *page)
> {
> - void *src_addr, *dst_addr;
> struct dnode_of_data dn;
> int err;
>
> @@ -263,10 +258,8 @@ int f2fs_write_inline_data(struct inode *inode, struct
> page *page) f2fs_bug_on(F2FS_I_SB(inode), page->index);
>
> f2fs_wait_on_page_writeback(dn.inode_page, NODE, true, true);
> - src_addr = kmap_atomic(page);
> - dst_addr = inline_data_addr(inode, dn.inode_page);
> - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
> - kunmap_atomic(src_addr);
> + memcpy_from_page(inline_data_addr(inode, dn.inode_page),
> + page, 0, MAX_INLINE_DATA(inode));
> set_page_dirty(dn.inode_page);
>
> f2fs_clear_page_cache_dirty_tag(page);
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index 2451623c05a7a8..3e5743b2538240 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -2465,7 +2465,6 @@ static ssize_t f2fs_quota_read(struct super_block *sb,
> int type, char *data, size_t toread;
> loff_t i_size = i_size_read(inode);
> struct page *page;
> - char *kaddr;
>
> if (off > i_size)
> return 0;
> @@ -2498,9 +2497,7 @@ static ssize_t f2fs_quota_read(struct super_block *sb,
> int type, char *data, return -EIO;
> }
>
> - kaddr = kmap_atomic(page);
> - memcpy(data, kaddr + offset, tocopy);
> - kunmap_atomic(kaddr);
> + memcpy_from_page(data, page, offset, tocopy);
> f2fs_put_page(page, 1);
>
> offset = 0;
> @@ -2522,7 +2519,6 @@ static ssize_t f2fs_quota_write(struct super_block
*sb,
> int type, size_t towrite = len;
> struct page *page;
> void *fsdata = NULL;
> - char *kaddr;
> int err = 0;
> int tocopy;
>
> @@ -2541,10 +2537,7 @@ static ssize_t f2fs_quota_write(struct super_block
*sb,
> int type, break;
> }
>
> - kaddr = kmap_atomic(page);
> - memcpy(kaddr + offset, data, tocopy);
> - kunmap_atomic(kaddr);
> - flush_dcache_page(page);
> + memcpy_to_page(page, offset, data, tocopy);
>
> a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
> page, fsdata);
> diff --git a/fs/f2fs/verity.c b/fs/f2fs/verity.c
> index 7b8f2b41c29b12..97ec60f39d6960 100644
> --- a/fs/f2fs/verity.c
> +++ b/fs/f2fs/verity.c
> @@ -47,16 +47,13 @@ static int pagecache_read(struct inode *inode, void
*buf,
> size_t count, size_t n = min_t(size_t, count,
> PAGE_SIZE - offset_in_page(pos));
> struct page *page;
> - void *addr;
>
> page = read_mapping_page(inode->i_mapping, pos >>
PAGE_SHIFT,
> NULL);
> if (IS_ERR(page))
> return PTR_ERR(page);
>
> - addr = kmap_atomic(page);
> - memcpy(buf, addr + offset_in_page(pos), n);
> - kunmap_atomic(addr);
> + memcpy_from_page(buf, page, offset_in_page(pos), n);
>
> put_page(page);
>
> @@ -85,16 +82,13 @@ static int pagecache_write(struct inode *inode, const
void
> *buf, size_t count, PAGE_SIZE - offset_in_page(pos));
> struct page *page;
> void *fsdata;
> - void *addr;
> int res;
>
> res = aops->write_begin(NULL, mapping, pos, n, &page,
&fsdata);
> if (res)
> return res;
>
> - addr = kmap_atomic(page);
> - memcpy(addr + offset_in_page(pos), buf, n);
> - kunmap_atomic(addr);
> + memcpy_to_page(page, offset_in_page(pos), buf, n);
>
> res = aops->write_end(NULL, mapping, pos, n, n, page,
fsdata);
> if (res < 0)
>
> base-commit: 568035b01cfb107af8d2e4bd2fb9aea22cf5b868
> --
> 2.37.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: linux-f2fs-devel@lists.sourceforge.net,
Eric Biggers <ebiggers@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH v2] f2fs: use memcpy_{to,from}_page() where possible
Date: Sat, 20 Aug 2022 04:08:19 +0200 [thread overview]
Message-ID: <4750218.GXAFRqVoOG@opensuse> (raw)
In-Reply-To: <20220819223300.9128-1-ebiggers@kernel.org>
On sabato 20 agosto 2022 00:33:00 CEST Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> This is simpler, and as a side effect it replaces several uses of
> kmap_atomic() with its recommended replacement kmap_local_page().
>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>
> v2: remove unneeded calls to flush_dcache_page(),
> and convert the kmap_atomic() in f2fs_write_inline_data().
>
> fs/f2fs/inline.c | 15 ++++-----------
> fs/f2fs/super.c | 11 ++---------
> fs/f2fs/verity.c | 10 ++--------
> 3 files changed, 8 insertions(+), 28 deletions(-)
It looks good to me...
Reviewed-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Thanks,
Fabio
> diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
> index bf46a7dfbea2fc..73da9331803696 100644
> --- a/fs/f2fs/inline.c
> +++ b/fs/f2fs/inline.c
> @@ -64,7 +64,6 @@ bool f2fs_may_inline_dentry(struct inode *inode)
> void f2fs_do_read_inline_data(struct page *page, struct page *ipage)
> {
> struct inode *inode = page->mapping->host;
> - void *src_addr, *dst_addr;
>
> if (PageUptodate(page))
> return;
> @@ -74,11 +73,8 @@ void f2fs_do_read_inline_data(struct page *page, struct
> page *ipage) zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE);
>
> /* Copy the whole inline data block */
> - src_addr = inline_data_addr(inode, ipage);
> - dst_addr = kmap_atomic(page);
> - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
> - flush_dcache_page(page);
> - kunmap_atomic(dst_addr);
> + memcpy_to_page(page, 0, inline_data_addr(inode, ipage),
> + MAX_INLINE_DATA(inode));
> if (!PageUptodate(page))
> SetPageUptodate(page);
> }
> @@ -246,7 +242,6 @@ int f2fs_convert_inline_inode(struct inode *inode)
>
> int f2fs_write_inline_data(struct inode *inode, struct page *page)
> {
> - void *src_addr, *dst_addr;
> struct dnode_of_data dn;
> int err;
>
> @@ -263,10 +258,8 @@ int f2fs_write_inline_data(struct inode *inode, struct
> page *page) f2fs_bug_on(F2FS_I_SB(inode), page->index);
>
> f2fs_wait_on_page_writeback(dn.inode_page, NODE, true, true);
> - src_addr = kmap_atomic(page);
> - dst_addr = inline_data_addr(inode, dn.inode_page);
> - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
> - kunmap_atomic(src_addr);
> + memcpy_from_page(inline_data_addr(inode, dn.inode_page),
> + page, 0, MAX_INLINE_DATA(inode));
> set_page_dirty(dn.inode_page);
>
> f2fs_clear_page_cache_dirty_tag(page);
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index 2451623c05a7a8..3e5743b2538240 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -2465,7 +2465,6 @@ static ssize_t f2fs_quota_read(struct super_block *sb,
> int type, char *data, size_t toread;
> loff_t i_size = i_size_read(inode);
> struct page *page;
> - char *kaddr;
>
> if (off > i_size)
> return 0;
> @@ -2498,9 +2497,7 @@ static ssize_t f2fs_quota_read(struct super_block *sb,
> int type, char *data, return -EIO;
> }
>
> - kaddr = kmap_atomic(page);
> - memcpy(data, kaddr + offset, tocopy);
> - kunmap_atomic(kaddr);
> + memcpy_from_page(data, page, offset, tocopy);
> f2fs_put_page(page, 1);
>
> offset = 0;
> @@ -2522,7 +2519,6 @@ static ssize_t f2fs_quota_write(struct super_block
*sb,
> int type, size_t towrite = len;
> struct page *page;
> void *fsdata = NULL;
> - char *kaddr;
> int err = 0;
> int tocopy;
>
> @@ -2541,10 +2537,7 @@ static ssize_t f2fs_quota_write(struct super_block
*sb,
> int type, break;
> }
>
> - kaddr = kmap_atomic(page);
> - memcpy(kaddr + offset, data, tocopy);
> - kunmap_atomic(kaddr);
> - flush_dcache_page(page);
> + memcpy_to_page(page, offset, data, tocopy);
>
> a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
> page, fsdata);
> diff --git a/fs/f2fs/verity.c b/fs/f2fs/verity.c
> index 7b8f2b41c29b12..97ec60f39d6960 100644
> --- a/fs/f2fs/verity.c
> +++ b/fs/f2fs/verity.c
> @@ -47,16 +47,13 @@ static int pagecache_read(struct inode *inode, void
*buf,
> size_t count, size_t n = min_t(size_t, count,
> PAGE_SIZE - offset_in_page(pos));
> struct page *page;
> - void *addr;
>
> page = read_mapping_page(inode->i_mapping, pos >>
PAGE_SHIFT,
> NULL);
> if (IS_ERR(page))
> return PTR_ERR(page);
>
> - addr = kmap_atomic(page);
> - memcpy(buf, addr + offset_in_page(pos), n);
> - kunmap_atomic(addr);
> + memcpy_from_page(buf, page, offset_in_page(pos), n);
>
> put_page(page);
>
> @@ -85,16 +82,13 @@ static int pagecache_write(struct inode *inode, const
void
> *buf, size_t count, PAGE_SIZE - offset_in_page(pos));
> struct page *page;
> void *fsdata;
> - void *addr;
> int res;
>
> res = aops->write_begin(NULL, mapping, pos, n, &page,
&fsdata);
> if (res)
> return res;
>
> - addr = kmap_atomic(page);
> - memcpy(addr + offset_in_page(pos), buf, n);
> - kunmap_atomic(addr);
> + memcpy_to_page(page, offset_in_page(pos), buf, n);
>
> res = aops->write_end(NULL, mapping, pos, n, n, page,
fsdata);
> if (res < 0)
>
> base-commit: 568035b01cfb107af8d2e4bd2fb9aea22cf5b868
> --
> 2.37.1
next prev parent reply other threads:[~2022-08-20 2:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-19 22:33 [f2fs-dev] [PATCH v2] f2fs: use memcpy_{to, from}_page() where possible Eric Biggers
2022-08-19 22:33 ` [PATCH v2] f2fs: use memcpy_{to,from}_page() " Eric Biggers
2022-08-20 2:08 ` Fabio M. De Francesco [this message]
2022-08-20 2:08 ` Fabio M. De Francesco
2022-08-20 2:39 ` [f2fs-dev] [PATCH v2] f2fs: use memcpy_{to, from}_page() " Chao Yu
2022-08-20 2:39 ` Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4750218.GXAFRqVoOG@opensuse \
--to=fmdefrancesco@gmail.com \
--cc=ebiggers@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.