Hi Naoya,
Shall we change the return value in soft_offline_free_page()?
If we still return void in offline free pages no matter it success
or fail later. echo xxx > soft_offline_pages, return 0, success,
but the number of "cat /proc/meminfo | grep HardwareCorrupted"
or fail later. echo xxx > soft_offline_pages, return 0, success,
but the number of "cat /proc/meminfo | grep HardwareCorrupted"
is not increased, this makes confusion for users.
Thanks,
Xishi Qiu
...
static void soft_offline_free_page(struct page *page)
{+ int rc = 0;
struct page *head = compound_head(page);
- if (!TestSetPageHWPoison(head)) {
+ if (PageHuge(head))
+ rc = dissolve_free_huge_page(page);
+ if (!rc && !TestSetPageHWPoison(page))
num_poisoned_pages_inc();
- if (PageHuge(head))
- dissolve_free_huge_page(page);
- }
}
/**
diff --git v4.18-rc4-mmotm-2018-07-10-16-50/mm/migrate.c v4.18-rc4-mmotm-2018-07-10-16-50_patched/mm/migrate.c
index 198af42..3ae213b 100644
--- v4.18-rc4-mmotm-2018-07-10-16-50/mm/migrate.c
+++ v4.18-rc4-mmotm-2018-07-10-16-50_patched/mm/migrate.c
@@ -1318,8 +1318,6 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
out:
if (rc != -EAGAIN)
putback_active_hugepage(hpage);
- if (reason == MR_MEMORY_FAILURE && !test_set_page_hwpoison(hpage))
- num_poisoned_pages_inc();
/*
* If migration was not successful and there's a freeing callback, use
--
2.7.0