From: Mel Gorman Date: Wed, 19 Jun 2013 00:06:00 +0000 (+1000) Subject: mm-vmscan-block-kswapd-if-it-is-encountering-pages-under-writeback-fix-2 X-Git-Tag: next-20130619~2^2~532 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0a2684a40e9f8c6e0c7a18f7607f890a363f44f6;p=karo-tx-linux.git mm-vmscan-block-kswapd-if-it-is-encountering-pages-under-writeback-fix-2 The patch "mm: vmscan: Block kswapd if it is encountering pages under writeback" stalls in congestion_wait it encounters a page under writeback that is marked for immediate reclaim. Initially this was a wait_on_page_writeback() but after the switch to congestion_wait(), there is no guarantee the page has completed writeback and it can be placed on a list for freeing. This is a fix for mm-vmscan-block-kswapd-if-it-is-encountering-pages-under-writeback.patch Signed-off-by: Mel Gorman Signed-off-by: Andrew Morton --- diff --git a/mm/vmscan.c b/mm/vmscan.c index 45aee36d9b93..1109de0c35bf 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -766,8 +766,10 @@ static unsigned long shrink_page_list(struct list_head *page_list, if (current_is_kswapd() && PageReclaim(page) && zone_is_reclaim_writeback(zone)) { + unlock_page(page); congestion_wait(BLK_RW_ASYNC, HZ/10); zone_clear_flag(zone, ZONE_WRITEBACK); + goto keep; /* Case 2 above */ } else if (global_reclaim(sc) ||