From: Johannes Weiner <jweiner@redhat.com>
To: linux-mm@kvack.org
Cc: Dave Chinner <david@fromorbit.com>,
Christoph Hellwig <hch@infradead.org>,
Mel Gorman <mgorman@suse.de>,
Andrew Morton <akpm@linux-foundation.org>,
Wu Fengguang <fengguang.wu@intel.com>,
Rik van Riel <riel@redhat.com>,
Minchan Kim <minchan.kim@gmail.com>, Jan Kara <jack@suse.cz>,
Andi Kleen <ak@linux.intel.com>,
linux-kernel@vger.kernel.org
Subject: [patch 5/5] mm: filemap: horrid hack to pass __GFP_WRITE for most page cache writers
Date: Mon, 25 Jul 2011 22:19:19 +0200 [thread overview]
Message-ID: <1311625159-13771-6-git-send-email-jweiner@redhat.com> (raw)
In-Reply-To: <1311625159-13771-1-git-send-email-jweiner@redhat.com>
From: Johannes Weiner <hannes@cmpxchg.org>
This makes every page allocation that results from grabbing a single
page in the page cache pass __GFP_WRITE.
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
---
include/linux/pagemap.h | 6 ++++--
mm/filemap.c | 8 ++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 716875e..3355c9b 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -244,12 +244,14 @@ struct page *grab_cache_page_write_begin(struct address_space *mapping,
pgoff_t index, unsigned flags);
/*
- * Returns locked page at given index in given cache, creating it if needed.
+ * Returns locked page at given index in given cache, creating it if
+ * needed. XXX: Assumes that page will be dirtied soon!
*/
static inline struct page *grab_cache_page(struct address_space *mapping,
pgoff_t index)
{
- return find_or_create_page(mapping, index, mapping_gfp_mask(mapping));
+ return find_or_create_page(mapping, index,
+ mapping_gfp_mask(mapping) | __GFP_WRITE);
}
extern struct page * grab_cache_page_nowait(struct address_space *mapping,
diff --git a/mm/filemap.c b/mm/filemap.c
index a8251a8..e315d46 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1030,6 +1030,7 @@ struct page *
grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)
{
struct page *page = find_get_page(mapping, index);
+ gfp_t gfp_mask;
if (page) {
if (trylock_page(page))
@@ -1037,7 +1038,8 @@ grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)
page_cache_release(page);
return NULL;
}
- page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~__GFP_FS);
+ gfp_mask = (mapping_gfp_mask(mapping) | __GFP_WRITE) & ~__GFP_FS;
+ page = __page_cache_alloc(gfp_mask);
if (page && add_to_page_cache_lru(page, mapping, index, GFP_NOFS)) {
page_cache_release(page);
page = NULL;
@@ -2330,6 +2332,7 @@ struct page *grab_cache_page_write_begin(struct address_space *mapping,
pgoff_t index, unsigned flags)
{
int status;
+ gfp_t gfp_mask;
struct page *page;
gfp_t gfp_notmask = 0;
if (flags & AOP_FLAG_NOFS)
@@ -2339,7 +2342,8 @@ repeat:
if (page)
goto found;
- page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask);
+ gfp_mask = (mapping_gfp_mask(mapping) | __GFP_WRITE) & ~gfp_notmask;
+ page = __page_cache_alloc(gfp_mask);
if (!page)
return NULL;
status = add_to_page_cache_lru(page, mapping, index,
--
1.7.6
--
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>
next prev parent reply other threads:[~2011-07-25 20:20 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-25 20:19 [patch 0/5] mm: per-zone dirty limiting Johannes Weiner
2011-07-25 20:19 ` [patch 1/5] mm: page_alloc: increase __GFP_BITS_SHIFT to include __GFP_OTHER_NODE Johannes Weiner
2011-07-25 20:52 ` Andi Kleen
2011-07-25 22:56 ` Minchan Kim
2011-07-26 13:51 ` Mel Gorman
2011-07-27 12:50 ` Michal Hocko
2011-08-05 14:16 ` Rik van Riel
2011-07-25 20:19 ` [patch 2/5] mm: writeback: make determine_dirtyable_memory static again Johannes Weiner
2011-07-26 13:53 ` Mel Gorman
2011-07-27 12:59 ` Michal Hocko
2011-08-05 14:38 ` Rik van Riel
2011-07-25 20:19 ` [patch 3/5] mm: writeback: remove seriously stale comment on dirty limits Johannes Weiner
2011-07-27 13:38 ` Michal Hocko
2011-08-05 14:45 ` Rik van Riel
2011-07-25 20:19 ` [patch 4/5] mm: writeback: throttle __GFP_WRITE on per-zone " Johannes Weiner
2011-07-25 20:37 ` Andi Kleen
2011-07-25 23:40 ` Minchan Kim
2011-08-03 19:06 ` Johannes Weiner
2011-07-26 14:42 ` Mel Gorman
2011-08-03 20:21 ` Johannes Weiner
2011-07-27 14:24 ` Michal Hocko
2011-08-03 20:25 ` Johannes Weiner
2011-08-04 7:27 ` Michal Hocko
2011-07-25 20:19 ` Johannes Weiner [this message]
2011-07-26 0:16 ` [patch 0/5] mm: per-zone dirty limiting Minchan Kim
2011-07-26 15:47 ` Mel Gorman
2011-07-26 18:05 ` Johannes Weiner
2011-07-26 21:54 ` Mel Gorman
2011-07-29 11:05 ` Mel Gorman
2011-08-02 12:17 ` Johannes Weiner
2011-08-03 13:18 ` Mel Gorman
2011-09-20 12:19 ` Johannes Weiner
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=1311625159-13771-6-git-send-email-jweiner@redhat.com \
--to=jweiner@redhat.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=david@fromorbit.com \
--cc=fengguang.wu@intel.com \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.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 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).