* [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? @ 2025-05-28 12:16 kernel test robot 2025-05-28 12:34 ` Shivank Garg 0 siblings, 1 reply; 4+ messages in thread From: kernel test robot @ 2025-05-28 12:16 UTC (permalink / raw) To: Shivank Garg Cc: oe-kbuild-all, Andrew Morton, Linux Memory Management List, Baolin Wang tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable head: 52ce652e7ab0f015b51fee11b2862507b2c0c25d commit: 3bdddbba5f02f6d97283acb18e2a6e079324fe4b [36/67] mm/khugepaged: fix race with folio split/free using temporary reference config: arm64-randconfig-002-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 7.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202505282015.F0fVmLmH-lkp@intel.com/ Note: the akpm-mm/mm-unstable HEAD 52ce652e7ab0f015b51fee11b2862507b2c0c25d builds fine. It only hurts bisectability. All errors (new ones prefixed by >>): mm/khugepaged.c: In function 'hpage_collapse_scan_file': >> mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? [-Werror=implicit-function-declaration] if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { ^~~~~~~~~~~~~~~~~~~~~~~~ folio_ref_count cc1: some warnings being treated as errors vim +2337 mm/khugepaged.c 2266 2267 static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, 2268 struct file *file, pgoff_t start, 2269 struct collapse_control *cc) 2270 { 2271 struct folio *folio = NULL; 2272 struct address_space *mapping = file->f_mapping; 2273 XA_STATE(xas, &mapping->i_pages, start); 2274 int present, swap; 2275 int node = NUMA_NO_NODE; 2276 int result = SCAN_SUCCEED; 2277 2278 present = 0; 2279 swap = 0; 2280 memset(cc->node_load, 0, sizeof(cc->node_load)); 2281 nodes_clear(cc->alloc_nmask); 2282 rcu_read_lock(); 2283 xas_for_each(&xas, folio, start + HPAGE_PMD_NR - 1) { 2284 if (xas_retry(&xas, folio)) 2285 continue; 2286 2287 if (xa_is_value(folio)) { 2288 swap += 1 << xas_get_order(&xas); 2289 if (cc->is_khugepaged && 2290 swap > khugepaged_max_ptes_swap) { 2291 result = SCAN_EXCEED_SWAP_PTE; 2292 count_vm_event(THP_SCAN_EXCEED_SWAP_PTE); 2293 break; 2294 } 2295 continue; 2296 } 2297 2298 if (!folio_try_get(folio)) { 2299 xas_reset(&xas); 2300 continue; 2301 } 2302 2303 if (unlikely(folio != xas_reload(&xas))) { 2304 folio_put(folio); 2305 xas_reset(&xas); 2306 continue; 2307 } 2308 2309 if (folio_order(folio) == HPAGE_PMD_ORDER && 2310 folio->index == start) { 2311 /* Maybe PMD-mapped */ 2312 result = SCAN_PTE_MAPPED_HUGEPAGE; 2313 /* 2314 * For SCAN_PTE_MAPPED_HUGEPAGE, further processing 2315 * by the caller won't touch the page cache, and so 2316 * it's safe to skip LRU and refcount checks before 2317 * returning. 2318 */ 2319 folio_put(folio); 2320 break; 2321 } 2322 2323 node = folio_nid(folio); 2324 if (hpage_collapse_scan_abort(node, cc)) { 2325 result = SCAN_SCAN_ABORT; 2326 folio_put(folio); 2327 break; 2328 } 2329 cc->node_load[node]++; 2330 2331 if (!folio_test_lru(folio)) { 2332 result = SCAN_PAGE_LRU; 2333 folio_put(folio); 2334 break; 2335 } 2336 > 2337 if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { 2338 result = SCAN_PAGE_COUNT; 2339 folio_put(folio); 2340 break; 2341 } 2342 2343 /* 2344 * We probably should check if the folio is referenced 2345 * here, but nobody would transfer pte_young() to 2346 * folio_test_referenced() for us. And rmap walk here 2347 * is just too costly... 2348 */ 2349 2350 present += folio_nr_pages(folio); 2351 folio_put(folio); 2352 2353 if (need_resched()) { 2354 xas_pause(&xas); 2355 cond_resched_rcu(); 2356 } 2357 } 2358 rcu_read_unlock(); 2359 2360 if (result == SCAN_SUCCEED) { 2361 if (cc->is_khugepaged && 2362 present < HPAGE_PMD_NR - khugepaged_max_ptes_none) { 2363 result = SCAN_EXCEED_NONE_PTE; 2364 count_vm_event(THP_SCAN_EXCEED_NONE_PTE); 2365 } else { 2366 result = collapse_file(mm, addr, file, start, cc); 2367 } 2368 } 2369 2370 trace_mm_khugepaged_scan_file(mm, folio, file, present, swap, result); 2371 return result; 2372 } 2373 #else 2374 static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, 2375 struct file *file, pgoff_t start, 2376 struct collapse_control *cc) 2377 { 2378 BUILD_BUG(); 2379 } 2380 #endif 2381 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? 2025-05-28 12:16 [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? kernel test robot @ 2025-05-28 12:34 ` Shivank Garg 2025-05-28 18:44 ` Andrew Morton 0 siblings, 1 reply; 4+ messages in thread From: Shivank Garg @ 2025-05-28 12:34 UTC (permalink / raw) To: kernel test robot Cc: oe-kbuild-all, Andrew Morton, Linux Memory Management List, Baolin Wang On 5/28/2025 5:46 PM, kernel test robot wrote: > tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable > head: 52ce652e7ab0f015b51fee11b2862507b2c0c25d > commit: 3bdddbba5f02f6d97283acb18e2a6e079324fe4b [36/67] mm/khugepaged: fix race with folio split/free using temporary reference > config: arm64-randconfig-002-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/config) > compiler: aarch64-linux-gcc (GCC) 7.5.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202505282015.F0fVmLmH-lkp@intel.com/ > > Note: the akpm-mm/mm-unstable HEAD 52ce652e7ab0f015b51fee11b2862507b2c0c25d builds fine. > It only hurts bisectability. > > All errors (new ones prefixed by >>): > > mm/khugepaged.c: In function 'hpage_collapse_scan_file': >>> mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? [-Werror=implicit-function-declaration] > if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { > ^~~~~~~~~~~~~~~~~~~~~~~~ > folio_ref_count > cc1: some warnings being treated as errors > > > vim +2337 mm/khugepaged.c folio_expected_ref_count() is introduced with this commit[1] and merged into mm-* tree. [1] https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/commit/?h=mm-unstable&id=86ebd50224c0734d965843260d0dc057a9431c61 > > 2266 > 2267 static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, > 2268 struct file *file, pgoff_t start, > 2269 struct collapse_control *cc) > 2270 { > 2271 struct folio *folio = NULL; > 2272 struct address_space *mapping = file->f_mapping; > 2273 XA_STATE(xas, &mapping->i_pages, start); > 2274 int present, swap; > 2275 int node = NUMA_NO_NODE; > 2276 int result = SCAN_SUCCEED; > 2277 > 2278 present = 0; > 2279 swap = 0; > 2280 memset(cc->node_load, 0, sizeof(cc->node_load)); > 2281 nodes_clear(cc->alloc_nmask); > 2282 rcu_read_lock(); > 2283 xas_for_each(&xas, folio, start + HPAGE_PMD_NR - 1) { > 2284 if (xas_retry(&xas, folio)) > 2285 continue; > 2286 > 2287 if (xa_is_value(folio)) { > 2288 swap += 1 << xas_get_order(&xas); > 2289 if (cc->is_khugepaged && > 2290 swap > khugepaged_max_ptes_swap) { > 2291 result = SCAN_EXCEED_SWAP_PTE; > 2292 count_vm_event(THP_SCAN_EXCEED_SWAP_PTE); > 2293 break; > 2294 } > 2295 continue; > 2296 } > 2297 > 2298 if (!folio_try_get(folio)) { > 2299 xas_reset(&xas); > 2300 continue; > 2301 } > 2302 > 2303 if (unlikely(folio != xas_reload(&xas))) { > 2304 folio_put(folio); > 2305 xas_reset(&xas); > 2306 continue; > 2307 } > 2308 > 2309 if (folio_order(folio) == HPAGE_PMD_ORDER && > 2310 folio->index == start) { > 2311 /* Maybe PMD-mapped */ > 2312 result = SCAN_PTE_MAPPED_HUGEPAGE; > 2313 /* > 2314 * For SCAN_PTE_MAPPED_HUGEPAGE, further processing > 2315 * by the caller won't touch the page cache, and so > 2316 * it's safe to skip LRU and refcount checks before > 2317 * returning. > 2318 */ > 2319 folio_put(folio); > 2320 break; > 2321 } > 2322 > 2323 node = folio_nid(folio); > 2324 if (hpage_collapse_scan_abort(node, cc)) { > 2325 result = SCAN_SCAN_ABORT; > 2326 folio_put(folio); > 2327 break; > 2328 } > 2329 cc->node_load[node]++; > 2330 > 2331 if (!folio_test_lru(folio)) { > 2332 result = SCAN_PAGE_LRU; > 2333 folio_put(folio); > 2334 break; > 2335 } > 2336 >> 2337 if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { > 2338 result = SCAN_PAGE_COUNT; > 2339 folio_put(folio); > 2340 break; > 2341 } > 2342 > 2343 /* > 2344 * We probably should check if the folio is referenced > 2345 * here, but nobody would transfer pte_young() to > 2346 * folio_test_referenced() for us. And rmap walk here > 2347 * is just too costly... > 2348 */ > 2349 > 2350 present += folio_nr_pages(folio); > 2351 folio_put(folio); > 2352 > 2353 if (need_resched()) { > 2354 xas_pause(&xas); > 2355 cond_resched_rcu(); > 2356 } > 2357 } > 2358 rcu_read_unlock(); > 2359 > 2360 if (result == SCAN_SUCCEED) { > 2361 if (cc->is_khugepaged && > 2362 present < HPAGE_PMD_NR - khugepaged_max_ptes_none) { > 2363 result = SCAN_EXCEED_NONE_PTE; > 2364 count_vm_event(THP_SCAN_EXCEED_NONE_PTE); > 2365 } else { > 2366 result = collapse_file(mm, addr, file, start, cc); > 2367 } > 2368 } > 2369 > 2370 trace_mm_khugepaged_scan_file(mm, folio, file, present, swap, result); > 2371 return result; > 2372 } > 2373 #else > 2374 static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, > 2375 struct file *file, pgoff_t start, > 2376 struct collapse_control *cc) > 2377 { > 2378 BUILD_BUG(); > 2379 } > 2380 #endif > 2381 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? 2025-05-28 12:34 ` Shivank Garg @ 2025-05-28 18:44 ` Andrew Morton 2025-05-29 3:46 ` Shivank Garg 0 siblings, 1 reply; 4+ messages in thread From: Andrew Morton @ 2025-05-28 18:44 UTC (permalink / raw) To: Shivank Garg Cc: kernel test robot, oe-kbuild-all, Linux Memory Management List, Baolin Wang On Wed, 28 May 2025 18:04:02 +0530 Shivank Garg <shivankg@amd.com> wrote: > On 5/28/2025 5:46 PM, kernel test robot wrote: > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable > > head: 52ce652e7ab0f015b51fee11b2862507b2c0c25d > > commit: 3bdddbba5f02f6d97283acb18e2a6e079324fe4b [36/67] mm/khugepaged: fix race with folio split/free using temporary reference > > config: arm64-randconfig-002-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/config) > > compiler: aarch64-linux-gcc (GCC) 7.5.0 > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/reproduce) > > > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > > the same patch/commit), kindly add following tags > > | Reported-by: kernel test robot <lkp@intel.com> > > | Closes: https://lore.kernel.org/oe-kbuild-all/202505282015.F0fVmLmH-lkp@intel.com/ > > > > Note: the akpm-mm/mm-unstable HEAD 52ce652e7ab0f015b51fee11b2862507b2c0c25d builds fine. > > It only hurts bisectability. > > > > All errors (new ones prefixed by >>): > > > > mm/khugepaged.c: In function 'hpage_collapse_scan_file': > >>> mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? [-Werror=implicit-function-declaration] > > if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { > > ^~~~~~~~~~~~~~~~~~~~~~~~ > > folio_ref_count > > cc1: some warnings being treated as errors > > > > > > vim +2337 mm/khugepaged.c > > folio_expected_ref_count() is introduced with this commit[1] and merged into mm-* tree. > > [1] https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/commit/?h=mm-unstable&id=86ebd50224c0734d965843260d0dc057a9431c61 > Well darn. We have a patch in mm-hotfixes-unstable which is cc:stable (mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch) which is dependent upon a patch (mm-add-folio_expected_ref_count-for-reference-count-calculation.patch) which is scheduled for 6.16-rc1. I'll move mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch into mm-stable, after mm-add-folio_expected_ref_count-for-reference-count-calculation.patch to remove the bisection hole. This means that when the -stable maintainers try to backport mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch into earlier kernels, the build will fail. When this happens, please work with them to come up with a version of mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch which is suitable for 6.15 and earlier. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? 2025-05-28 18:44 ` Andrew Morton @ 2025-05-29 3:46 ` Shivank Garg 0 siblings, 0 replies; 4+ messages in thread From: Shivank Garg @ 2025-05-29 3:46 UTC (permalink / raw) To: Andrew Morton Cc: kernel test robot, oe-kbuild-all, Linux Memory Management List, Baolin Wang On 5/29/2025 12:14 AM, Andrew Morton wrote: > On Wed, 28 May 2025 18:04:02 +0530 Shivank Garg <shivankg@amd.com> wrote: > >> On 5/28/2025 5:46 PM, kernel test robot wrote: >>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable >>> head: 52ce652e7ab0f015b51fee11b2862507b2c0c25d >>> commit: 3bdddbba5f02f6d97283acb18e2a6e079324fe4b [36/67] mm/khugepaged: fix race with folio split/free using temporary reference >>> config: arm64-randconfig-002-20250528 (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/config) >>> compiler: aarch64-linux-gcc (GCC) 7.5.0 >>> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250528/202505282015.F0fVmLmH-lkp@intel.com/reproduce) >>> >>> If you fix the issue in a separate patch/commit (i.e. not just a new version of >>> the same patch/commit), kindly add following tags >>> | Reported-by: kernel test robot <lkp@intel.com> >>> | Closes: https://lore.kernel.org/oe-kbuild-all/202505282015.F0fVmLmH-lkp@intel.com/ >>> >>> Note: the akpm-mm/mm-unstable HEAD 52ce652e7ab0f015b51fee11b2862507b2c0c25d builds fine. >>> It only hurts bisectability. >>> >>> All errors (new ones prefixed by >>): >>> >>> mm/khugepaged.c: In function 'hpage_collapse_scan_file': >>>>> mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? [-Werror=implicit-function-declaration] >>> if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) { >>> ^~~~~~~~~~~~~~~~~~~~~~~~ >>> folio_ref_count >>> cc1: some warnings being treated as errors >>> >>> >>> vim +2337 mm/khugepaged.c >> >> folio_expected_ref_count() is introduced with this commit[1] and merged into mm-* tree. >> >> [1] https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/commit/?h=mm-unstable&id=86ebd50224c0734d965843260d0dc057a9431c61 >> > > Well darn. We have a patch in mm-hotfixes-unstable which is cc:stable > (mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch) > which is dependent upon a patch > (mm-add-folio_expected_ref_count-for-reference-count-calculation.patch) > which is scheduled for 6.16-rc1. > > I'll move > mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch > into mm-stable, after > mm-add-folio_expected_ref_count-for-reference-count-calculation.patch > to remove the bisection hole. This means that when the -stable > maintainers try to backport > mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch > into earlier kernels, the build will fail. When this happens, please > work with them to come up with a version of > mm-khugepaged-fix-race-with-folio-split-free-using-temporary-reference.patch > which is suitable for 6.15 and earlier. > Hi Andrew, Below patch is independent of folio_expected_ref_count() and functionally equivalent. This can be backported to -stable branches. Please review. Thanks, Shivank From ee23192f3306cdd2553b084ac23430412a9c61d6 Mon Sep 17 00:00:00 2001 From: Shivank Garg <shivankg@amd.com> Date: Mon, 26 May 2025 18:28:18 +0000 Subject: [PATCH] mm/khugepaged: fix race with folio split/free using temporary reference hpage_collapse_scan_file() calls is_refcount_suitable(), which in turn calls folio_mapcount(). folio_mapcount() checks folio_test_large() before proceeding to folio_large_mapcount(), but there is a race window where the folio may get split/freed between these checks, triggering: VM_WARN_ON_FOLIO(!folio_test_large(folio), folio) Take a temporary reference to the folio in hpage_collapse_scan_file(). This stabilizes the folio during refcount check and prevents incorrect large folio detection due to concurrent split/free. Fixes: 05c5323b2a34 ("mm: track mapcount of large folios in single value") Reported-by: syzbot+2b99589e33edbe9475ca@syzkaller.appspotmail.com Closes: https://lore.kernel.org/all/6828470d.a70a0220.38f255.000c.GAE@google.com Suggested-by: David Hildenbrand <david@redhat.com> Signed-off-by: Shivank Garg <shivankg@amd.com> --- mm/khugepaged.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index cc945c6ab3bd..25a406410463 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -548,7 +548,7 @@ static void release_pte_pages(pte_t *pte, pte_t *_pte, } } -static bool is_refcount_suitable(struct folio *folio) +static bool is_refcount_suitable(struct folio *folio, int extra_refs) { int expected_refcount = folio_mapcount(folio); @@ -558,7 +558,7 @@ static bool is_refcount_suitable(struct folio *folio) if (folio_test_private(folio)) expected_refcount++; - return folio_ref_count(folio) == expected_refcount; + return folio_ref_count(folio) == expected_refcount + extra_refs; } static int __collapse_huge_page_isolate(struct vm_area_struct *vma, @@ -652,7 +652,7 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma, * but not from this process. The other process cannot write to * the page, only trigger CoW. */ - if (!is_refcount_suitable(folio)) { + if (!is_refcount_suitable(folio, 0)) { folio_unlock(folio); result = SCAN_PAGE_COUNT; goto out; @@ -1402,7 +1402,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, * has excessive GUP pins (i.e. 512). Anyway the same check * will be done again later the risk seems low. */ - if (!is_refcount_suitable(folio)) { + if (!is_refcount_suitable(folio, 0)) { result = SCAN_PAGE_COUNT; goto out_unmap; } @@ -2295,6 +2295,17 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, continue; } + if (!folio_try_get(folio)) { + xas_reset(&xas); + continue; + } + + if (unlikely(folio != xas_reload(&xas))) { + folio_put(folio); + xas_reset(&xas); + continue; + } + if (folio_order(folio) == HPAGE_PMD_ORDER && folio->index == start) { /* Maybe PMD-mapped */ @@ -2305,23 +2316,27 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, * it's safe to skip LRU and refcount checks before * returning. */ + folio_put(folio); break; } node = folio_nid(folio); if (hpage_collapse_scan_abort(node, cc)) { result = SCAN_SCAN_ABORT; + folio_put(folio); break; } cc->node_load[node]++; if (!folio_test_lru(folio)) { result = SCAN_PAGE_LRU; + folio_put(folio); break; } - if (!is_refcount_suitable(folio)) { + if (!is_refcount_suitable(folio, 1)) { result = SCAN_PAGE_COUNT; + folio_put(folio); break; } @@ -2333,6 +2348,7 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, */ present += folio_nr_pages(folio); + folio_put(folio); if (need_resched()) { xas_pause(&xas); -- 2.34.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-05-29 3:46 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-05-28 12:16 [akpm-mm:mm-unstable 36/67] mm/khugepaged.c:2337:7: error: implicit declaration of function 'folio_expected_ref_count'; did you mean 'folio_ref_count'? kernel test robot 2025-05-28 12:34 ` Shivank Garg 2025-05-28 18:44 ` Andrew Morton 2025-05-29 3:46 ` Shivank Garg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).