From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Chandan Babu R <chandan.babu@oracle.com>,
Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-xfs@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 09/15] xfs: don't allow highmem pages in xfile mappings
Date: Wed, 3 Jan 2024 16:03:24 -0800 [thread overview]
Message-ID: <20240104000324.GC361584@frogsfrogsfrogs> (raw)
In-Reply-To: <20240103084126.513354-10-hch@lst.de>
On Wed, Jan 03, 2024 at 08:41:20AM +0000, Christoph Hellwig wrote:
> XFS is generally used on 64-bit, non-highmem platforms and xfile
> mappings are accessed all the time. Reduce our pain by not allowing
> any highmem mappings in the xfile page cache and remove all the kmap
> calls for it.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/scrub/xfarray.c | 3 +--
> fs/xfs/scrub/xfile.c | 21 +++++++++------------
> 2 files changed, 10 insertions(+), 14 deletions(-)
>
> diff --git a/fs/xfs/scrub/xfarray.c b/fs/xfs/scrub/xfarray.c
> index f0f532c10a5acc..3a44700037924b 100644
> --- a/fs/xfs/scrub/xfarray.c
> +++ b/fs/xfs/scrub/xfarray.c
> @@ -580,7 +580,7 @@ xfarray_sort_get_page(
> * xfile pages must never be mapped into userspace, so we skip the
> * dcache flush when mapping the page.
> */
> - si->page_kaddr = kmap_local_page(si->xfpage.page);
> + si->page_kaddr = page_address(si->xfpage.page);
> return 0;
> }
>
> @@ -592,7 +592,6 @@ xfarray_sort_put_page(
> if (!si->page_kaddr)
> return 0;
>
> - kunmap_local(si->page_kaddr);
> si->page_kaddr = NULL;
>
> return xfile_put_page(si->array->xfile, &si->xfpage);
> diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c
> index e872f4f0263f59..afbd205289e9b0 100644
> --- a/fs/xfs/scrub/xfile.c
> +++ b/fs/xfs/scrub/xfile.c
> @@ -77,6 +77,12 @@ xfile_create(
> inode = file_inode(xf->file);
> lockdep_set_class(&inode->i_rwsem, &xfile_i_mutex_key);
>
> + /*
> + * We don't want to bother with kmapping data during repair, so don't
> + * allow highmem pages to back this mapping.
> + */
> + mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER);
Gonna be fun to see what happens on 32-bit. ;)
But I do like getting rid of all the kmap overhead.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> +
> trace_xfile_create(xf);
>
> *xfilep = xf;
> @@ -126,7 +132,6 @@ xfile_obj_load(
>
> pflags = memalloc_nofs_save();
> while (count > 0) {
> - void *p, *kaddr;
> unsigned int len;
>
> len = min_t(ssize_t, count, PAGE_SIZE - offset_in_page(pos));
> @@ -153,10 +158,7 @@ xfile_obj_load(
> * xfile pages must never be mapped into userspace, so
> * we skip the dcache flush.
> */
> - kaddr = kmap_local_page(page);
> - p = kaddr + offset_in_page(pos);
> - memcpy(buf, p, len);
> - kunmap_local(kaddr);
> + memcpy(buf, page_address(page) + offset_in_page(pos), len);
> put_page(page);
>
> advance:
> @@ -221,14 +223,13 @@ xfile_obj_store(
> * the dcache flush. If the page is not uptodate, zero it
> * before writing data.
> */
> - kaddr = kmap_local_page(page);
> + kaddr = page_address(page);
> if (!PageUptodate(page)) {
> memset(kaddr, 0, PAGE_SIZE);
> SetPageUptodate(page);
> }
> p = kaddr + offset_in_page(pos);
> memcpy(p, buf, len);
> - kunmap_local(kaddr);
>
> ret = aops->write_end(NULL, mapping, pos, len, len, page,
> fsdata);
> @@ -314,11 +315,7 @@ xfile_get_page(
> * to the caller and make sure the backing store will hold on to them.
> */
> if (!PageUptodate(page)) {
> - void *kaddr;
> -
> - kaddr = kmap_local_page(page);
> - memset(kaddr, 0, PAGE_SIZE);
> - kunmap_local(kaddr);
> + memset(page_address(page), 0, PAGE_SIZE);
> SetPageUptodate(page);
> }
>
> --
> 2.39.2
>
>
next prev parent reply other threads:[~2024-01-04 0:03 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-03 8:41 put the xfs xfile abstraction on a diet Christoph Hellwig
2024-01-03 8:41 ` [PATCH 01/15] shmem: move the shmem_mapping assert into shmem_get_folio_gfp Christoph Hellwig
2024-01-03 23:32 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 02/15] shmem: export shmem_get_folio Christoph Hellwig
2024-01-03 23:36 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 03/15] shmem: document how to "persist" data when using shmem_*file_setup Christoph Hellwig
2024-01-04 0:21 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 04/15] xfs: remove xfile_stat Christoph Hellwig
2024-01-03 23:45 ` Darrick J. Wong
2024-01-04 6:14 ` Christoph Hellwig
2024-01-04 6:55 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 05/15] xfs: remove the xfile_pread/pwrite APIs Christoph Hellwig
2024-01-03 23:48 ` Darrick J. Wong
2024-01-04 6:15 ` Christoph Hellwig
2024-01-04 6:58 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 06/15] xfs: don't try to handle non-update pages in xfile_obj_load Christoph Hellwig
2024-01-03 23:55 ` Darrick J. Wong
2024-01-04 6:21 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 07/15] xfs: shmem_file_setup can't return NULL Christoph Hellwig
2024-01-03 23:56 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 08/15] xfs: don't modify file and inode flags for shmem files Christoph Hellwig
2024-01-04 0:01 ` Darrick J. Wong
2024-01-04 6:23 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 09/15] xfs: don't allow highmem pages in xfile mappings Christoph Hellwig
2024-01-04 0:03 ` Darrick J. Wong [this message]
2024-01-04 6:24 ` Christoph Hellwig
2024-01-04 7:01 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 10/15] xfs: remove xfarray_sortinfo.page_kaddr Christoph Hellwig
2024-01-04 0:04 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 11/15] xfs: use shmem_get_folio in xfile_get_page Christoph Hellwig
2024-01-04 0:12 ` Darrick J. Wong
2024-01-04 6:25 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 12/15] xfs: remove struct xfile_page Christoph Hellwig
2024-01-04 0:14 ` Darrick J. Wong
2024-01-10 22:42 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 13/15] xfs: don't unconditionally allocate a new page in xfile_get_page Christoph Hellwig
2024-01-04 0:18 ` Darrick J. Wong
2024-01-03 8:41 ` [PATCH 14/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_store Christoph Hellwig
2024-01-04 0:20 ` Darrick J. Wong
2024-01-04 6:26 ` Christoph Hellwig
2024-01-03 8:41 ` [PATCH 15/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_load Christoph Hellwig
2024-01-04 0:21 ` Darrick J. Wong
2024-01-04 1:35 ` put the xfs xfile abstraction on a diet Darrick J. Wong
2024-01-04 6:26 ` Christoph Hellwig
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=20240104000324.GC361584@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=chandan.babu@oracle.com \
--cc=hch@lst.de \
--cc=hughd@google.com \
--cc=linux-mm@kvack.org \
--cc=linux-xfs@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).