All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <jweiner@redhat.com>
To: Josef Bacik <josef@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>,
	Christoph Hellwig <hch@infradead.org>,
	Dave Chinner <david@fromorbit.com>,
	Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
	Rik van Riel <riel@redhat.com>,
	Minchan Kim <minchan.kim@gmail.com>,
	Chris Mason <chris.mason@oracle.com>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	xfs@oss.sgi.com, linux-btrfs@vger.kernel.org,
	linux-ext4@vger.kernel.org, linux-mm@kvack.org,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 4/4] Btrfs: pass __GFP_WRITE for buffered write page allocations
Date: Tue, 20 Sep 2011 16:14:03 +0200	[thread overview]
Message-ID: <20110920141403.GA17198@redhat.com> (raw)
In-Reply-To: <4E789EA2.8070709@redhat.com>

On Tue, Sep 20, 2011 at 10:09:38AM -0400, Josef Bacik wrote:
> On 09/20/2011 09:56 AM, Johannes Weiner wrote:
> > On Tue, Sep 20, 2011 at 03:45:15PM +0200, Johannes Weiner wrote:
> >> Tell the page allocator that pages allocated for a buffered write are
> >> expected to become dirty soon.
> >>
> >> Signed-off-by: Johannes Weiner <jweiner@redhat.com>
> >> ---
> >>  fs/btrfs/file.c |    2 +-
> >>  1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
> >> index e7872e4..ea1b892 100644
> >> --- a/fs/btrfs/file.c
> >> +++ b/fs/btrfs/file.c
> >> @@ -1084,7 +1084,7 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
> >>  again:
> >>  	for (i = 0; i < num_pages; i++) {
> >>  		pages[i] = find_or_create_page(inode->i_mapping, index + i,
> >> -					       GFP_NOFS);
> >> +					       GFP_NOFS | __GFP_WRITE);
> > 
> > Btw and unrelated to this particular series, I think this should use
> > grab_cache_page_write_begin() in the first place.
> > 
> > Most grab_cache_page calls were replaced recently (a94733d "Btrfs: use
> > find_or_create_page instead of grab_cache_page") to be able to pass
> > GFP_NOFS, but the pages are now also no longer __GFP_HIGHMEM and
> > __GFP_MOVABLE, which irks both x86_32 and memory hotplug.
> > 
> > It might be better to change grab_cache_page instead to take a flags
> > argument that allows passing AOP_FLAG_NOFS and revert the sites back
> > to this helper?
> 
> So I can do
> 
> pages[i] = grab_cache_page_write_begin(inode->i_mapping, index + i,
> 				       AOP_FLAG_NOFS);
> 
> right?  All we need is nofs, so I can just go through and change
> everybody to that.

It does wait_on_page_writeback() in addition, so it may not be
appropriate for every callsite, I haven't checked.  But everything
that grabs a page for writing should be fine if you do it like this.

> I'd rather not have to go through and change grab_cache_page() to
> take a flags argument and change all the callers, I have a bad habit
> of screwing stuff like that up :).

Yeah, there are quite a few.  If we can get around it, all the better.

	Hannes

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <jweiner@redhat.com>
To: Josef Bacik <josef@redhat.com>
Cc: Rik van Riel <riel@redhat.com>,
	linux-ext4@vger.kernel.org, Jan Kara <jack@suse.cz>,
	linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org,
	xfs@oss.sgi.com, Christoph Hellwig <hch@infradead.org>,
	linux-mm@kvack.org, Andreas Dilger <adilger.kernel@dilger.ca>,
	Mel Gorman <mgorman@suse.de>,
	linux-fsdevel@vger.kernel.org, Theodore Ts'o <tytso@mit.edu>,
	Andrew Morton <akpm@linux-foundation.org>,
	Wu Fengguang <fengguang.wu@intel.com>,
	Chris Mason <chris.mason@oracle.com>,
	Minchan Kim <minchan.kim@gmail.com>
Subject: Re: [patch 4/4] Btrfs: pass __GFP_WRITE for buffered write page allocations
Date: Tue, 20 Sep 2011 16:14:03 +0200	[thread overview]
Message-ID: <20110920141403.GA17198@redhat.com> (raw)
In-Reply-To: <4E789EA2.8070709@redhat.com>

On Tue, Sep 20, 2011 at 10:09:38AM -0400, Josef Bacik wrote:
> On 09/20/2011 09:56 AM, Johannes Weiner wrote:
> > On Tue, Sep 20, 2011 at 03:45:15PM +0200, Johannes Weiner wrote:
> >> Tell the page allocator that pages allocated for a buffered write are
> >> expected to become dirty soon.
> >>
> >> Signed-off-by: Johannes Weiner <jweiner@redhat.com>
> >> ---
> >>  fs/btrfs/file.c |    2 +-
> >>  1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
> >> index e7872e4..ea1b892 100644
> >> --- a/fs/btrfs/file.c
> >> +++ b/fs/btrfs/file.c
> >> @@ -1084,7 +1084,7 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
> >>  again:
> >>  	for (i = 0; i < num_pages; i++) {
> >>  		pages[i] = find_or_create_page(inode->i_mapping, index + i,
> >> -					       GFP_NOFS);
> >> +					       GFP_NOFS | __GFP_WRITE);
> > 
> > Btw and unrelated to this particular series, I think this should use
> > grab_cache_page_write_begin() in the first place.
> > 
> > Most grab_cache_page calls were replaced recently (a94733d "Btrfs: use
> > find_or_create_page instead of grab_cache_page") to be able to pass
> > GFP_NOFS, but the pages are now also no longer __GFP_HIGHMEM and
> > __GFP_MOVABLE, which irks both x86_32 and memory hotplug.
> > 
> > It might be better to change grab_cache_page instead to take a flags
> > argument that allows passing AOP_FLAG_NOFS and revert the sites back
> > to this helper?
> 
> So I can do
> 
> pages[i] = grab_cache_page_write_begin(inode->i_mapping, index + i,
> 				       AOP_FLAG_NOFS);
> 
> right?  All we need is nofs, so I can just go through and change
> everybody to that.

It does wait_on_page_writeback() in addition, so it may not be
appropriate for every callsite, I haven't checked.  But everything
that grabs a page for writing should be fine if you do it like this.

> I'd rather not have to go through and change grab_cache_page() to
> take a flags argument and change all the callers, I have a bad habit
> of screwing stuff like that up :).

Yeah, there are quite a few.  If we can get around it, all the better.

	Hannes

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <jweiner@redhat.com>
To: Josef Bacik <josef@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>,
	Christoph Hellwig <hch@infradead.org>,
	Dave Chinner <david@fromorbit.com>,
	Wu Fengguang <fengguang.wu@intel.com>, Jan Kara <jack@suse.cz>,
	Rik van Riel <riel@redhat.com>,
	Minchan Kim <minchan.kim@gmail.com>,
	Chris Mason <chris.mason@oracle.com>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	xfs@oss.sgi.com, linux-btrfs@vger.kernel.org,
	linux-ext4@vger.kernel.org, linux-mm@kvack.org,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 4/4] Btrfs: pass __GFP_WRITE for buffered write page allocations
Date: Tue, 20 Sep 2011 16:14:03 +0200	[thread overview]
Message-ID: <20110920141403.GA17198@redhat.com> (raw)
In-Reply-To: <4E789EA2.8070709@redhat.com>

On Tue, Sep 20, 2011 at 10:09:38AM -0400, Josef Bacik wrote:
> On 09/20/2011 09:56 AM, Johannes Weiner wrote:
> > On Tue, Sep 20, 2011 at 03:45:15PM +0200, Johannes Weiner wrote:
> >> Tell the page allocator that pages allocated for a buffered write are
> >> expected to become dirty soon.
> >>
> >> Signed-off-by: Johannes Weiner <jweiner@redhat.com>
> >> ---
> >>  fs/btrfs/file.c |    2 +-
> >>  1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
> >> index e7872e4..ea1b892 100644
> >> --- a/fs/btrfs/file.c
> >> +++ b/fs/btrfs/file.c
> >> @@ -1084,7 +1084,7 @@ static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
> >>  again:
> >>  	for (i = 0; i < num_pages; i++) {
> >>  		pages[i] = find_or_create_page(inode->i_mapping, index + i,
> >> -					       GFP_NOFS);
> >> +					       GFP_NOFS | __GFP_WRITE);
> > 
> > Btw and unrelated to this particular series, I think this should use
> > grab_cache_page_write_begin() in the first place.
> > 
> > Most grab_cache_page calls were replaced recently (a94733d "Btrfs: use
> > find_or_create_page instead of grab_cache_page") to be able to pass
> > GFP_NOFS, but the pages are now also no longer __GFP_HIGHMEM and
> > __GFP_MOVABLE, which irks both x86_32 and memory hotplug.
> > 
> > It might be better to change grab_cache_page instead to take a flags
> > argument that allows passing AOP_FLAG_NOFS and revert the sites back
> > to this helper?
> 
> So I can do
> 
> pages[i] = grab_cache_page_write_begin(inode->i_mapping, index + i,
> 				       AOP_FLAG_NOFS);
> 
> right?  All we need is nofs, so I can just go through and change
> everybody to that.

It does wait_on_page_writeback() in addition, so it may not be
appropriate for every callsite, I haven't checked.  But everything
that grabs a page for writing should be fine if you do it like this.

> I'd rather not have to go through and change grab_cache_page() to
> take a flags argument and change all the callers, I have a bad habit
> of screwing stuff like that up :).

Yeah, there are quite a few.  If we can get around it, all the better.

	Hannes

  reply	other threads:[~2011-09-20 14:14 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-20 13:45 [patch 0/4] 50% faster writing to your USB drive!* Johannes Weiner
2011-09-20 13:45 ` Johannes Weiner
2011-09-20 13:45 ` Johannes Weiner
2011-09-20 13:45 ` [patch 1/4] mm: exclude reserved pages from dirtyable memory Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 15:21   ` Rik van Riel
2011-09-20 15:21     ` Rik van Riel
2011-09-20 15:21     ` Rik van Riel
2011-09-21 14:04   ` Mel Gorman
2011-09-21 14:04     ` Mel Gorman
2011-09-21 14:04     ` Mel Gorman
2011-09-21 15:03     ` Mel Gorman
2011-09-21 15:03       ` Mel Gorman
2011-09-21 15:03       ` Mel Gorman
2011-09-22  9:03       ` Johannes Weiner
2011-09-22  9:03         ` Johannes Weiner
2011-09-22  9:03         ` Johannes Weiner
2011-09-22 10:54         ` Mel Gorman
2011-09-22 10:54           ` Mel Gorman
2011-09-22 10:54           ` Mel Gorman
2011-09-23 14:38           ` [patch 1/4 v2] " Johannes Weiner
2011-09-23 14:38             ` Johannes Weiner
2011-09-23 14:38             ` Johannes Weiner
2011-09-28  4:55             ` Minchan Kim
2011-09-28  4:55               ` Minchan Kim
2011-09-28  4:55               ` Minchan Kim
2011-09-28  7:50               ` Johannes Weiner
2011-09-28  7:50                 ` Johannes Weiner
2011-09-28  7:50                 ` Johannes Weiner
2011-09-28 18:35                 ` Minchan Kim
2011-09-28 18:35                   ` Minchan Kim
2011-09-28 18:35                   ` Minchan Kim
2011-09-20 13:45 ` [patch 2/4] mm: writeback: distribute write pages across allowable zones Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 18:36   ` Rik van Riel
2011-09-20 18:36     ` Rik van Riel
2011-09-20 18:36     ` Rik van Riel
2011-09-21 11:04   ` Shaohua Li
2011-09-21 11:04     ` Shaohua Li
2011-09-21 11:04     ` Shaohua Li
2011-09-21 13:35     ` Johannes Weiner
2011-09-21 13:35       ` Johannes Weiner
2011-09-21 13:35       ` Johannes Weiner
2011-09-21 14:30   ` Mel Gorman
2011-09-21 14:30     ` Mel Gorman
2011-09-21 14:30     ` Mel Gorman
2011-09-21 23:02   ` Andrew Morton
2011-09-21 23:02     ` Andrew Morton
2011-09-21 23:02     ` Andrew Morton
2011-09-22  8:52     ` Johannes Weiner
2011-09-22  8:52       ` Johannes Weiner
2011-09-22  8:52       ` Johannes Weiner
2011-09-23 14:41       ` [patch 1/2/4] mm: writeback: cleanups in preparation for per-zone dirty limits Johannes Weiner
2011-09-23 14:41         ` Johannes Weiner
2011-09-23 14:41         ` Johannes Weiner
2011-09-28  5:57         ` Minchan Kim
2011-09-28  5:57           ` Minchan Kim
2011-09-28  5:57           ` Minchan Kim
2011-09-28  9:27         ` Mel Gorman
2011-09-28  9:27           ` Mel Gorman
2011-09-28  9:27           ` Mel Gorman
2011-09-23 14:42       ` [patch 2/2/4] mm: try to distribute dirty pages fairly across zones Johannes Weiner
2011-09-23 14:42         ` Johannes Weiner
2011-09-23 14:42         ` Johannes Weiner
2011-09-28  5:56         ` Minchan Kim
2011-09-28  5:56           ` Minchan Kim
2011-09-28  5:56           ` Minchan Kim
2011-09-28  7:11           ` Johannes Weiner
2011-09-28  7:11             ` Johannes Weiner
2011-09-28  7:11             ` Johannes Weiner
2011-09-28 18:09             ` Minchan Kim
2011-09-28 18:09               ` Minchan Kim
2011-09-28 18:09               ` Minchan Kim
2011-09-28  9:36         ` Mel Gorman
2011-09-28  9:36           ` Mel Gorman
2011-09-28  9:36           ` Mel Gorman
2011-09-20 13:45 ` [patch 3/4] mm: filemap: pass __GFP_WRITE from grab_cache_page_write_begin() Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 14:25   ` Christoph Hellwig
2011-09-20 14:25     ` Christoph Hellwig
2011-09-20 14:25     ` Christoph Hellwig
2011-09-20 18:38     ` Rik van Riel
2011-09-20 18:38       ` Rik van Riel
2011-09-20 18:38       ` Rik van Riel
2011-09-20 18:40       ` Christoph Hellwig
2011-09-20 18:40         ` Christoph Hellwig
2011-09-20 18:40         ` Christoph Hellwig
2011-09-21 14:09         ` Johannes Weiner
2011-09-21 14:09           ` Johannes Weiner
2011-09-21 14:09           ` Johannes Weiner
2011-09-20 18:40   ` Rik van Riel
2011-09-20 18:40     ` Rik van Riel
2011-09-20 18:40     ` Rik van Riel
2011-09-21 14:34   ` Mel Gorman
2011-09-21 14:34     ` Mel Gorman
2011-09-21 14:34     ` Mel Gorman
2011-09-28  6:02   ` Minchan Kim
2011-09-28  6:02     ` Minchan Kim
2011-09-28  6:02     ` Minchan Kim
2011-09-20 13:45 ` [patch 4/4] Btrfs: pass __GFP_WRITE for buffered write page allocations Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 13:45   ` Johannes Weiner
2011-09-20 13:56   ` Johannes Weiner
2011-09-20 13:56     ` Johannes Weiner
2011-09-20 13:56     ` Johannes Weiner
2011-09-20 14:09     ` Josef Bacik
2011-09-20 14:09       ` Josef Bacik
2011-09-20 14:09       ` Josef Bacik
2011-09-20 14:14       ` Johannes Weiner [this message]
2011-09-20 14:14         ` Johannes Weiner
2011-09-20 14:14         ` Johannes Weiner
2011-09-20 18:41   ` Rik van Riel
2011-09-20 18:41     ` Rik van Riel
2011-09-20 18:41     ` Rik van Riel

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=20110920141403.GA17198@redhat.com \
    --to=jweiner@redhat.com \
    --cc=adilger.kernel@dilger.ca \
    --cc=akpm@linux-foundation.org \
    --cc=chris.mason@oracle.com \
    --cc=david@fromorbit.com \
    --cc=fengguang.wu@intel.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=josef@redhat.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=minchan.kim@gmail.com \
    --cc=riel@redhat.com \
    --cc=tytso@mit.edu \
    --cc=xfs@oss.sgi.com \
    /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.