mm: when migrate_pages returns 0, all pages must have been released
In some cases migrate_pages could return zero while still leaving a few pages in the pagelist (and some caller wouldn't notice it has to call putback_lru_pages after commitcf608ac19c
("mm: compaction: fix COMPACTPAGEFAILED counting")). Add one missing putback_lru_pages not added by commitcf608ac19c
("mm: compaction: fix COMPACTPAGEFAILED counting"). Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Minchan Kim <minchan.kim@gmail.com> Reviewed-by: Minchan Kim <minchan.kim@gmail.com> Cc: Christoph Lameter <cl@linux.com> Acked-by: Mel Gorman <mel@csn.ul.ie> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
552b372ba9
commit
57fc4a5ee3
|
@ -1419,6 +1419,7 @@ int soft_offline_page(struct page *page, int flags)
|
|||
ret = migrate_pages(&pagelist, new_page, MPOL_MF_MOVE_ALL,
|
||||
0, true);
|
||||
if (ret) {
|
||||
putback_lru_pages(&pagelist);
|
||||
pr_info("soft offline: %#lx: migration failed %d, type %lx\n",
|
||||
pfn, ret, page->flags);
|
||||
if (ret > 0)
|
||||
|
|
|
@ -772,6 +772,7 @@ uncharge:
|
|||
unlock:
|
||||
unlock_page(page);
|
||||
|
||||
move_newpage:
|
||||
if (rc != -EAGAIN) {
|
||||
/*
|
||||
* A page that has been migrated has all references
|
||||
|
@ -785,8 +786,6 @@ unlock:
|
|||
putback_lru_page(page);
|
||||
}
|
||||
|
||||
move_newpage:
|
||||
|
||||
/*
|
||||
* Move the new page to the LRU. If migration was not successful
|
||||
* then this will free the page.
|
||||
|
|
Loading…
Reference in New Issue