Skip to content

Commit 8008293

Browse files
gormanmtorvalds
authored andcommitted
mm: vmscan: reduce throttling due to a failure to make progress -fix
Hugh Dickins reported the following My tmpfs swapping load (tweaked to use huge pages more heavily than in real life) is far from being a realistic load: but it was notably slowed down by your throttling mods in 5.16-rc, and this patch makes it well again - thanks. But: it very quickly hit NULL pointer until I changed that last line to if (first_pgdat) consider_reclaim_throttle(first_pgdat, sc); The likely issue is that huge pages are a major component of the test workload. When this is the case, first_pgdat may never get set if compaction is ready to continue due to this check if (IS_ENABLED(CONFIG_COMPACTION) && sc->order > PAGE_ALLOC_COSTLY_ORDER && compaction_ready(zone, sc)) { sc->compaction_ready = true; continue; } If this was true for every zone in the zonelist, first_pgdat would never get set resulting in a NULL pointer exception. Link: https://lkml.kernel.org/r/[email protected] Fixes: 1b4e3f2 ("mm: vmscan: Reduce throttling due to a failure to make progress") Signed-off-by: Mel Gorman <[email protected]> Reported-by: Hugh Dickins <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: Rik van Riel <[email protected]> Cc: Mike Galbraith <[email protected]> Cc: Darrick J. Wong <[email protected]> Cc: Shakeel Butt <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 1b4e3f2 commit 8008293

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

mm/vmscan.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3530,7 +3530,8 @@ static void shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
35303530
shrink_node(zone->zone_pgdat, sc);
35313531
}
35323532

3533-
consider_reclaim_throttle(first_pgdat, sc);
3533+
if (first_pgdat)
3534+
consider_reclaim_throttle(first_pgdat, sc);
35343535

35353536
/*
35363537
* Restore to original mask to avoid the impact on the caller if we

0 commit comments

Comments
 (0)