Skip to content

Commit

Permalink
mm/hwpoison: fix fail isolate hugetlbfs page w/ refcount held
Browse files Browse the repository at this point in the history
Hugetlbfs pages will get a refcount in get_any_page() or
madvise_hwpoison() if soft offlining through madvise.  The refcount which
is held by the soft offline path should be released if we fail to isolate
hugetlbfs pages.

Fix it by reducing the refcount for both isolation success and failure.

Signed-off-by: Wanpeng Li <[email protected]>
Acked-by: Naoya Horiguchi <[email protected]>
Cc: <[email protected]>	[3.9+]
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Wanpeng Li authored and torvalds committed Aug 14, 2015
1 parent 4f32be6 commit 0361380
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions mm/memory-failure.c
Original file line number Diff line number Diff line change
Expand Up @@ -1569,13 +1569,12 @@ static int soft_offline_huge_page(struct page *page, int flags)
unlock_page(hpage);

ret = isolate_huge_page(hpage, &pagelist);
if (ret) {
/*
* get_any_page() and isolate_huge_page() takes a refcount each,
* so need to drop one here.
*/
put_page(hpage);
} else {
/*
* get_any_page() and isolate_huge_page() takes a refcount each,
* so need to drop one here.
*/
put_page(hpage);
if (!ret) {
pr_info("soft offline: %#lx hugepage failed to isolate\n", pfn);
return -EBUSY;
}
Expand Down

0 comments on commit 0361380

Please sign in to comment.