diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 92e6f56a932d..f76abbeb9c90 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1840,6 +1840,12 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr, goto xa_locked; } xas_store(&xas, hpage); + if (xas_error(&xas)) { + mapping->nrpages--; + shmem_uncharge(mapping->host, 1); + result = SCAN_FAIL; + goto xa_locked; + } nr_none++; continue; } @@ -2134,7 +2140,6 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr, mem_cgroup_uncharge(page_folio(hpage)); put_page(hpage); } - trace_mm_khugepaged_collapse_file(mm, hpage, index, is_shmem, addr, file, nr, result); return result; }