All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: Ira Weiny <ira.weiny@intel.com>
Cc: David Sterba <dsterba@suse.com>, Chris Mason <clm@fb.com>,
	Josef Bacik <josef@toxicpanda.com>,
	Nick Terrell <terrelln@fb.com>,
	linux-btrfs@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Kees Cook <keescook@chromium.org>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	"James E. J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Helge Deller <deller@gmx.de>,
	John David Anglin <dave.anglin@bell.net>,
	linux-parisc@vger.kernel.org, Filipe Manana <fdmanana@kernel.org>
Subject: Re: [PATCH v5 2/2] btrfs: Replace kmap() with kmap_local_page() in zstd.c
Date: Wed, 06 Jul 2022 12:48:46 +0200	[thread overview]
Message-ID: <1826872.tdWV9SEqCh@opensuse> (raw)
In-Reply-To: <2250236.ElGaqSPkdT@opensuse>

On mercoledì 6 luglio 2022 12:38:29 CEST Fabio M. De Francesco wrote:
> On martedì 5 luglio 2022 21:04:04 CEST Ira Weiny wrote:
> > On Mon, Jul 04, 2022 at 05:23:22PM +0200, Fabio M. De Francesco wrote:
> > > The use of kmap() is being deprecated in favor of kmap_local_page(). 
> With
> > > kmap_local_page(), the mapping is per thread, CPU local and not 
> globally
> > > visible.
> > > 
> > > Therefore, use kmap_local_page() / kunmap_local() in zstd.c because 
in 
> this
> > > file the mappings are per thread and are not visible in other 
contexts. 
> In
> > > the meanwhile use plain page_address() on pages allocated with the 
> GFP_NOFS
> > > flag instead of calling kmap*() on them (since they are always 
> allocated
> > > from ZONE_NORMAL).
> > > 
> > > Tested with xfstests on QEMU + KVM 32 bits VM with 4GB of RAM and
> > > booting a kernel with HIGHMEM64G enabled.
> > > 
> > > Cc: Filipe Manana <fdmanana@kernel.org>
> > > Suggested-by: Ira Weiny <ira.weiny@intel.com>
> > > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
> > > ---
> > >  fs/btrfs/zstd.c | 34 ++++++++++++++--------------------
> > >  1 file changed, 14 insertions(+), 20 deletions(-)
> > > 
> > > diff --git a/fs/btrfs/zstd.c b/fs/btrfs/zstd.c
> > > index 0fe31a6f6e68..78e0272e770e 100644
> > > --- a/fs/btrfs/zstd.c
> > > +++ b/fs/btrfs/zstd.c
> > > @@ -403,7 +403,7 @@ int zstd_compress_pages(struct list_head *ws, 
> struct address_space *mapping,
> > >  
> > >  	/* map in the first page of input data */
> > >  	in_page = find_get_page(mapping, start >> PAGE_SHIFT);
> > > -	workspace->in_buf.src = kmap(in_page);
> > > +	workspace->in_buf.src = kmap_local_page(in_page);
> > >  	workspace->in_buf.pos = 0;
> > >  	workspace->in_buf.size = min_t(size_t, len, PAGE_SIZE);
> > >  
> > > @@ -415,7 +415,7 @@ int zstd_compress_pages(struct list_head *ws, 
> struct address_space *mapping,
> > >  		goto out;
> > >  	}
> > >  	pages[nr_pages++] = out_page;
> > > -	workspace->out_buf.dst = kmap(out_page);
> > > +	workspace->out_buf.dst = page_address(out_page);
> > >  	workspace->out_buf.pos = 0;
> > >  	workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE);
> > >  
> > > @@ -450,9 +450,7 @@ int zstd_compress_pages(struct list_head *ws, 
> struct address_space *mapping,
> > >  		if (workspace->out_buf.pos == workspace->out_buf.size) 
> {
> > >  			tot_out += PAGE_SIZE;
> > >  			max_out -= PAGE_SIZE;
> > > -			kunmap(out_page);
> > >  			if (nr_pages == nr_dest_pages) {
> > > -				out_page = NULL;
> > >  				ret = -E2BIG;
> > >  				goto out;
> > >  			}
> > > @@ -462,7 +460,7 @@ int zstd_compress_pages(struct list_head *ws, 
> struct address_space *mapping,
> > >  				goto out;
> > >  			}
> > >  			pages[nr_pages++] = out_page;
> > > -			workspace->out_buf.dst = kmap(out_page);
> > > +			workspace->out_buf.dst = 
> page_address(out_page);
> > >  			workspace->out_buf.pos = 0;
> > >  			workspace->out_buf.size = min_t(size_t, 
> max_out,
> > >  							
> PAGE_SIZE);
> > > @@ -477,15 +475,15 @@ int zstd_compress_pages(struct list_head *ws, 
> struct address_space *mapping,
> > >  		/* Check if we need more input */
> > >  		if (workspace->in_buf.pos == workspace->in_buf.size) {
> > >  			tot_in += PAGE_SIZE;
> > > -			kunmap(in_page);
> > > +			kunmap_local(workspace->in_buf.src);
> > >  			put_page(in_page);
> > > -
> > >  			start += PAGE_SIZE;
> > >  			len -= PAGE_SIZE;
> > >  			in_page = find_get_page(mapping, start >> 
> PAGE_SHIFT);
> > > -			workspace->in_buf.src = kmap(in_page);
> > > +			workspace->in_buf.src = 
> kmap_local_page(in_page);
> > >  			workspace->in_buf.pos = 0;
> > >  			workspace->in_buf.size = min_t(size_t, len, 
> PAGE_SIZE);
> > > +			workspace->out_buf.dst = 
> page_address(out_page);
> > 
> > Why is this needed?
> 
> Sorry. This initialization is not needed at all.
> Probably made a mistake with copy-pasting snippets of code.
> 
> I'm going to send ASAP the fifth version of this series.

"fifth" -> "sixth".

> 
> > The rest looks good,
> 
> Thanks,
> 
> Fabio
> 
> > Ira
> > 
> > [snip]
> > 
> 
> 
> 
> 





      reply	other threads:[~2022-07-06 10:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-04 15:23 [PATCH v5 0/2] btrfs: Replace kmap() with kmap_local_page() in zstd.c Fabio M. De Francesco
2022-07-04 15:23 ` [PATCH v5 1/2] highmem: Make __kunmap_{local,atomic}() take "const void *" Fabio M. De Francesco
2022-07-04 15:23 ` [PATCH v5 2/2] btrfs: Replace kmap() with kmap_local_page() in zstd.c Fabio M. De Francesco
2022-07-05 19:04   ` Ira Weiny
2022-07-06 10:38     ` Fabio M. De Francesco
2022-07-06 10:48       ` Fabio M. De Francesco [this message]

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=1826872.tdWV9SEqCh@opensuse \
    --to=fmdefrancesco@gmail.com \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=akpm@linux-foundation.org \
    --cc=bigeasy@linutronix.de \
    --cc=clm@fb.com \
    --cc=dave.anglin@bell.net \
    --cc=deller@gmx.de \
    --cc=dsterba@suse.com \
    --cc=fdmanana@kernel.org \
    --cc=ira.weiny@intel.com \
    --cc=josef@toxicpanda.com \
    --cc=keescook@chromium.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=terrelln@fb.com \
    --cc=willy@infradead.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.