mm: kswapd: treat zone->all_unreclaimable in sleeping_prematurely similar to balance_pgdat()
After DEF_PRIORITY, balance_pgdat() considers all_unreclaimable zones to be balanced but sleeping_prematurely does not. This can force kswapd to stay awake longer than it should. This patch fixes it. Signed-off-by: Mel Gorman <mel@csn.ul.ie> Reviewed-by: Eric B Munson <emunson@mgebm.net> Cc: Minchan Kim <minchan.kim@gmail.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Simon Kirby <sim@hostway.ca> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Shaohua Li <shaohua.li@intel.com> Cc: Dave Hansen <dave@linux.vnet.ibm.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4d40502ea5
commit
355b09c47a
1 changed files with 9 additions and 1 deletions
10
mm/vmscan.c
10
mm/vmscan.c
|
@ -2244,8 +2244,16 @@ static bool sleeping_prematurely(pg_data_t *pgdat, int order, long remaining)
|
|||
if (!populated_zone(zone))
|
||||
continue;
|
||||
|
||||
if (zone->all_unreclaimable)
|
||||
/*
|
||||
* balance_pgdat() skips over all_unreclaimable after
|
||||
* DEF_PRIORITY. Effectively, it considers them balanced so
|
||||
* they must be considered balanced here as well if kswapd
|
||||
* is to sleep
|
||||
*/
|
||||
if (zone->all_unreclaimable) {
|
||||
balanced += zone->present_pages;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone),
|
||||
0, 0))
|
||||
|
|
Loading…
Reference in a new issue