If NUMA is disabled, hpage is used as page pre-alloc, so there are two
cases for hpage:
- it is !NULL, means the page is not consumed otherwise,
- the page has been consumed
If NUMA is enabled, hpage is just used as alloc-fail indicator which is
not a real page, NULL means not fail triggered.
So, we can release the page only if !IS_ERR_OR_NULL
Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
static void khugepaged_loop(void)
{
- struct page *hpage;
+ struct page *hpage = NULL;
-#ifdef CONFIG_NUMA
- hpage = NULL;
-#endif
while (likely(khugepaged_enabled())) {
#ifndef CONFIG_NUMA
hpage = khugepaged_alloc_hugepage();
#endif
khugepaged_do_scan(&hpage);
-#ifndef CONFIG_NUMA
- if (hpage)
+
+ if (!IS_ERR_OR_NULL(hpage))
put_page(hpage);
-#endif
khugepaged_wait_work();
}