• Vlastimil Babka's avatar
    mm, compaction: simplify handling restart position in free pages scanner · f5f61a32
    Vlastimil Babka authored
    Handling the position where compaction free scanner should restart
    (stored in cc->free_pfn) got more complex with commit e14c720e ("mm,
    compaction: remember position within pageblock in free pages scanner").
    Currently the position is updated in each loop iteration of
    isolate_freepages(), although it should be enough to update it only when
    breaking from the loop.  There's also an extra check outside the loop
    updates the position in case we have met the migration scanner.
    
    This can be simplified if we move the test for having isolated enough
    from the for-loop header next to the test for contention, and
    determining the restart position only in these cases.  We can reuse the
    isolate_start_pfn variable for this instead of setting cc->free_pfn
    directly.  Outside the loop, we can simply set cc->free_pfn to current
    value of isolate_start_pfn without any extra check.
    
    Also add a VM_BUG_ON to catch possible mistake in the future, in case we
    later add a new condition that terminates isolate_freepages_block()
    prematurely without also considering the condition in
    isolate_freepages().
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Minchan Kim <minchan@kernel.org>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Acked-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Michal Nazarewicz <mina86@mina86.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f5f61a32
compaction.c 47.7 KB