mm/compaction: split freepages without holding the zone lock
We don't need to split freepages with holding the zone lock. It will cause more contention on zone lock so not desirable. [rientjes@google.com: if __isolate_free_page() fails, avoid adding to freelist so we don't call map_pages() with it] Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1606211447001.43430@chino.kir.corp.google.com Link: http://lkml.kernel.org/r/1464230275-25791-1-git-send-email-iamjoonsoo.kim@lge.com Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Minchan Kim <minchan@kernel.org> Cc: Alexander Potapenko <glider@google.com> Cc: Hugh Dickins <hughd@google.com> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
3b1d9ca65a
commit
66c64223ad
@@ -2526,33 +2526,6 @@ int __isolate_free_page(struct page *page, unsigned int order)
|
||||
return 1UL << order;
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to split_page except the page is already free. As this is only
|
||||
* being used for migration, the migratetype of the block also changes.
|
||||
* As this is called with interrupts disabled, the caller is responsible
|
||||
* for calling arch_alloc_page() and kernel_map_page() after interrupts
|
||||
* are enabled.
|
||||
*
|
||||
* Note: this is probably too low level an operation for use in drivers.
|
||||
* Please consult with lkml before using this in your driver.
|
||||
*/
|
||||
int split_free_page(struct page *page)
|
||||
{
|
||||
unsigned int order;
|
||||
int nr_pages;
|
||||
|
||||
order = page_order(page);
|
||||
|
||||
nr_pages = __isolate_free_page(page, order);
|
||||
if (!nr_pages)
|
||||
return 0;
|
||||
|
||||
/* Split into individual pages */
|
||||
set_page_refcounted(page);
|
||||
split_page(page, order);
|
||||
return nr_pages;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update NUMA hit/miss statistics
|
||||
*
|
||||
|
Reference in New Issue
Block a user