diff options
author | Mel Gorman <mgorman@suse.de> | 2011-10-31 20:07:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 20:30:47 -0400 |
commit | 49ea7eb65e7c5060807fb9312b1ad4c3eab82e2c (patch) | |
tree | 88eaa206cdcac1190817820a0eb56bca2585f9ea /mm/vmscan.c | |
parent | 92df3a723f84cdf8133560bbff950a7a99e92bc9 (diff) |
mm: vmscan: immediately reclaim end-of-LRU dirty pages when writeback completes
When direct reclaim encounters a dirty page, it gets recycled around the
LRU for another cycle. This patch marks the page PageReclaim similar to
deactivate_page() so that the page gets reclaimed almost immediately after
the page gets cleaned. This is to avoid reclaiming clean pages that are
younger than a dirty page encountered at the end of the LRU that might
have been something like a use-once page.
Signed-off-by: Mel Gorman <mgorman@suse.de>
Acked-by: Johannes Weiner <jweiner@redhat.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Alex Elder <aelder@sgi.com>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Dave Hansen <dave@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 7b0573f33a27..a297603d35bc 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -866,7 +866,15 @@ static unsigned long shrink_page_list(struct list_head *page_list, | |||
866 | */ | 866 | */ |
867 | if (page_is_file_cache(page) && | 867 | if (page_is_file_cache(page) && |
868 | (!current_is_kswapd() || priority >= DEF_PRIORITY - 2)) { | 868 | (!current_is_kswapd() || priority >= DEF_PRIORITY - 2)) { |
869 | inc_zone_page_state(page, NR_VMSCAN_WRITE_SKIP); | 869 | /* |
870 | * Immediately reclaim when written back. | ||
871 | * Similar in principal to deactivate_page() | ||
872 | * except we already have the page isolated | ||
873 | * and know it's dirty | ||
874 | */ | ||
875 | inc_zone_page_state(page, NR_VMSCAN_IMMEDIATE); | ||
876 | SetPageReclaim(page); | ||
877 | |||
870 | goto keep_locked; | 878 | goto keep_locked; |
871 | } | 879 | } |
872 | 880 | ||