Re: [PATCH v4] mm/memory-failure: fix folio refcount leak and locking in soft/hard offline
kernel test robot <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild-all,org.kernel.vger.stable,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
Hi, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/dayou5941-163-com/mm-memory-failure-fix-folio-refcount-leak-and-locking-in-soft-hard-offline/20260806-111958 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20260806031958.677935-1-dayou5941%40163.com patch subject: [PATCH v4] mm/memory-failure: fix folio refcount leak and locking in soft/hard offline config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20260820/[email protected]/config) compiler: powerpc64-linux-gcc (GCC) 16.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260820/[email protected]/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 <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ All warnings (new ones prefixed by >>): mm/memory-failure.c: In function 'memory_failure': >> mm/memory-failure.c:2492:21: warning: variable 'err' set but not used [-Wunused-but-set-variable=] 2492 | int err; | ^~~ vim +/err +2492 mm/memory-failure.c 2ec41967189cd6 Ankit Agrawal 2025-11-02 2340 cd42f4a3b2b1c4 Tony Luck 2011-12-15 2341 /** cd42f4a3b2b1c4 Tony Luck 2011-12-15 2342 * memory_failure - Handle memory failure of a page. cd42f4a3b2b1c4 Tony Luck 2011-12-15 2343 * @pfn: Page Number of the corrupted page cd42f4a3b2b1c4 Tony Luck 2011-12-15 2344 * @flags: fine tune action taken cd42f4a3b2b1c4 Tony Luck 2011-12-15 2345 * cd42f4a3b2b1c4 Tony Luck 2011-12-15 2346 * This function is called by the low level machine check code cd42f4a3b2b1c4 Tony Luck 2011-12-15 2347 * of an architecture when it detects hardware memory corruption cd42f4a3b2b1c4 Tony Luck 2011-12-15 2348 * of a page. It tries its best to recover, which includes cd42f4a3b2b1c4 Tony Luck 2011-12-15 2349 * dropping pages, killing processes etc. cd42f4a3b2b1c4 Tony Luck 2011-12-15 2350 * cd42f4a3b2b1c4 Tony Luck 2011-12-15 2351 * The function is primarily of use for corruptions that cd42f4a3b2b1c4 Tony Luck 2011-12-15 2352 * happen outside the current execution context (e.g. when cd42f4a3b2b1c4 Tony Luck 2011-12-15 2353 * detected by a background scrubber) cd42f4a3b2b1c4 Tony Luck 2011-12-15 2354 * cd42f4a3b2b1c4 Tony Luck 2011-12-15 2355 * Must run in process context (e.g. a work queue) with interrupts 5885c6a62533cb Miaohe Lin 2023-07-11 2356 * enabled and no spinlocks held. d1fe111fb62a1c luofei 2022-03-22 2357 * d2734f044f8483 Shuai Xue 2025-03-12 2358 * Return: d2734f044f8483 Shuai Xue 2025-03-12 2359 * 0 - success, d2734f044f8483 Shuai Xue 2025-03-12 2360 * -ENXIO - memory not managed by the kernel d2734f044f8483 Shuai Xue 2025-03-12 2361 * -EOPNOTSUPP - hwpoison_filter() filtered the error event, d2734f044f8483 Shuai Xue 2025-03-12 2362 * -EHWPOISON - the page was already poisoned, potentially d2734f044f8483 Shuai Xue 2025-03-12 2363 * kill process, d2734f044f8483 Shuai Xue 2025-03-12 2364 * other negative values - failure. cd42f4a3b2b1c4 Tony Luck 2011-12-15 2365 */ 83b57531c58f41 Eric W. Biederman 2017-07-09 2366 int memory_failure(unsigned long pfn, int flags) 6a46079cf57a7f Andi Kleen 2009-09-16 2367 { 6a46079cf57a7f Andi Kleen 2009-09-16 2368 struct page *p; 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2369) struct folio *folio; 6100e34b2526e1 Dan Williams 2018-07-13 2370 struct dev_pagemap *pgmap; 171936ddaf97e6 Tony Luck 2021-06-24 2371 int res = 0; 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2372 unsigned long page_flags; a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2373 bool retry = true; 6a46079cf57a7f Andi Kleen 2009-09-16 2374 6a46079cf57a7f Andi Kleen 2009-09-16 2375 if (!sysctl_memory_failure_recovery) 83b57531c58f41 Eric W. Biederman 2017-07-09 2376 panic("Memory failure on page %lx", pfn); 6a46079cf57a7f Andi Kleen 2009-09-16 2377 03b122da74b22f Tony Luck 2021-10-26 2378 mutex_lock(&mf_mutex); 03b122da74b22f Tony Luck 2021-10-26 2379 67f22ba7750f94 zhenwei pi 2022-06-15 2380 if (!(flags & MF_SW_SIMULATED)) 67f22ba7750f94 zhenwei pi 2022-06-15 2381 hw_memory_failure = true; 67f22ba7750f94 zhenwei pi 2022-06-15 2382 96c804a6ae8c59 David Hildenbrand 2019-10-18 2383 p = pfn_to_online_page(pfn); 96c804a6ae8c59 David Hildenbrand 2019-10-18 2384 if (!p) { 03b122da74b22f Tony Luck 2021-10-26 2385 res = arch_memory_failure(pfn, flags); 03b122da74b22f Tony Luck 2021-10-26 2386 if (res == 0) 03b122da74b22f Tony Luck 2021-10-26 2387 goto unlock_mutex; 03b122da74b22f Tony Luck 2021-10-26 2388 2ec41967189cd6 Ankit Agrawal 2025-11-02 2389 if (!pfn_valid(pfn) && !arch_is_platform_page(PFN_PHYS(pfn))) { 2ec41967189cd6 Ankit Agrawal 2025-11-02 2390 /* 2ec41967189cd6 Ankit Agrawal 2025-11-02 2391 * The PFN is not backed by struct page. 2ec41967189cd6 Ankit Agrawal 2025-11-02 2392 */ 2ec41967189cd6 Ankit Agrawal 2025-11-02 2393 res = memory_failure_pfn(pfn, flags); 2ec41967189cd6 Ankit Agrawal 2025-11-02 2394 goto unlock_mutex; 2ec41967189cd6 Ankit Agrawal 2025-11-02 2395 } 2ec41967189cd6 Ankit Agrawal 2025-11-02 2396 96c804a6ae8c59 David Hildenbrand 2019-10-18 2397 if (pfn_valid(pfn)) { 614d850efda98e Alistair Popple 2025-09-04 2398 pgmap = get_dev_pagemap(pfn); d51b68469bc780 Miaohe Lin 2023-07-01 2399 put_ref_page(pfn, flags); 03b122da74b22f Tony Luck 2021-10-26 2400 if (pgmap) { 03b122da74b22f Tony Luck 2021-10-26 2401 res = memory_failure_dev_pagemap(pfn, flags, 96c804a6ae8c59 David Hildenbrand 2019-10-18 2402 pgmap); 03b122da74b22f Tony Luck 2021-10-26 2403 goto unlock_mutex; 03b122da74b22f Tony Luck 2021-10-26 2404 } 96c804a6ae8c59 David Hildenbrand 2019-10-18 2405 } 96f96763de26d6 Kefeng Wang 2022-07-26 2406 pr_err("%#lx: memory outside kernel control\n", pfn); 03b122da74b22f Tony Luck 2021-10-26 2407 res = -ENXIO; 03b122da74b22f Tony Luck 2021-10-26 2408 goto unlock_mutex; 6a46079cf57a7f Andi Kleen 2009-09-16 2409 } 6a46079cf57a7f Andi Kleen 2009-09-16 2410 a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2411 try_again: 5ee5ff9dbce0b8 Ye Liu 2026-05-15 2412 res = try_memory_failure_hugetlb(pfn, flags); 5ee5ff9dbce0b8 Ye Liu 2026-05-15 2413 /* 5ee5ff9dbce0b8 Ye Liu 2026-05-15 2414 * -ENOENT means the page we found is not hugetlb, so proceed with normal page handling 5ee5ff9dbce0b8 Ye Liu 2026-05-15 2415 */ 5ee5ff9dbce0b8 Ye Liu 2026-05-15 2416 if (res != -ENOENT) 171936ddaf97e6 Tony Luck 2021-06-24 2417 goto unlock_mutex; 171936ddaf97e6 Tony Luck 2021-06-24 2418 6a46079cf57a7f Andi Kleen 2009-09-16 2419 if (TestSetPageHWPoison(p)) { 47af12bae17f99 Aili Yao 2021-06-24 2420 res = -EHWPOISON; a3f5d80ea401ac Naoya Horiguchi 2021-06-28 2421 if (flags & MF_ACTION_REQUIRED) a3f5d80ea401ac Naoya Horiguchi 2021-06-28 2422 res = kill_accessing_process(current, pfn, flags); f361e2462e8ccc Naoya Horiguchi 2022-04-28 2423 if (flags & MF_COUNT_INCREASED) f361e2462e8ccc Naoya Horiguchi 2022-04-28 2424 put_page(p); b8b9488d50b715 Jane Chu 2024-05-24 2425 action_result(pfn, MF_MSG_ALREADY_POISONED, MF_FAILED); 171936ddaf97e6 Tony Luck 2021-06-24 2426 goto unlock_mutex; 6a46079cf57a7f Andi Kleen 2009-09-16 2427 } 6a46079cf57a7f Andi Kleen 2009-09-16 2428 6a46079cf57a7f Andi Kleen 2009-09-16 2429 /* 6a46079cf57a7f Andi Kleen 2009-09-16 2430 * We need/can do nothing about count=0 pages. 6a46079cf57a7f Andi Kleen 2009-09-16 2431 * 1) it's a free page, and therefore in safe hand: 9cf2819159d5a3 Miaohe Lin 2022-08-30 2432 * check_new_page() will be the gate keeper. 761ad8d7c7b548 Naoya Horiguchi 2017-07-10 2433 * 2) it's part of a non-compound high order page. 6a46079cf57a7f Andi Kleen 2009-09-16 2434 * Implies some kernel user: cannot stop them from 6a46079cf57a7f Andi Kleen 2009-09-16 2435 * R/W the page; let's pray that the page has been 6a46079cf57a7f Andi Kleen 2009-09-16 2436 * used and will be freed some time later. 6a46079cf57a7f Andi Kleen 2009-09-16 2437 * In fact it's dangerous to directly bump up page count from 0, 1c4c3b99c03d3e Jiang Biao 2018-08-21 2438 * that may make page_ref_freeze()/page_ref_unfreeze() mismatch. 6a46079cf57a7f Andi Kleen 2009-09-16 2439 */ 0ed950d1f28142 Naoya Horiguchi 2021-06-28 2440 res = get_hwpoison_page(p, flags); 737a97548c4a31 Breno Leitao 2026-06-30 2441 switch (res) { 737a97548c4a31 Breno Leitao 2026-06-30 2442 case 0: 8d22ba1b74aa94 Wu Fengguang 2009-12-16 2443 if (is_free_buddy_page(p)) { a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2444 if (take_page_off_buddy(p)) { a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2445 page_ref_inc(p); a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2446 res = MF_RECOVERED; a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2447 } else { a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2448 /* We lost the race, try again */ a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2449 if (retry) { a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2450 ClearPageHWPoison(p); a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2451 retry = false; a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2452 goto try_again; a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2453 } a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2454 res = MF_FAILED; a8b2c2ce89d4e0 Oscar Salvador 2020-12-14 2455 } b66d00dfebe79e Kefeng Wang 2022-10-21 2456 res = action_result(pfn, MF_MSG_BUDDY, res); 8d22ba1b74aa94 Wu Fengguang 2009-12-16 2457 } else { b66d00dfebe79e Kefeng Wang 2022-10-21 2458 res = action_result(pfn, MF_MSG_KERNEL_HIGH_ORDER, MF_IGNORED); 8d22ba1b74aa94 Wu Fengguang 2009-12-16 2459 } 171936ddaf97e6 Tony Luck 2021-06-24 2460 goto unlock_mutex; 737a97548c4a31 Breno Leitao 2026-06-30 2461 case 1: 737a97548c4a31 Breno Leitao 2026-06-30 2462 /* Got a refcount on a handlable page. */ 737a97548c4a31 Breno Leitao 2026-06-30 2463 break; 737a97548c4a31 Breno Leitao 2026-06-30 2464 case -ENOTRECOVERABLE: 737a97548c4a31 Breno Leitao 2026-06-30 2465 /* 737a97548c4a31 Breno Leitao 2026-06-30 2466 * Stable unhandlable kernel-owned page (PG_reserved, 737a97548c4a31 Breno Leitao 2026-06-30 2467 * slab, page tables, large-kmalloc). 737a97548c4a31 Breno Leitao 2026-06-30 2468 * No recovery possible. 737a97548c4a31 Breno Leitao 2026-06-30 2469 */ 737a97548c4a31 Breno Leitao 2026-06-30 2470 res = action_result(pfn, MF_MSG_KERNEL, MF_IGNORED); 737a97548c4a31 Breno Leitao 2026-06-30 2471 goto unlock_mutex; 737a97548c4a31 Breno Leitao 2026-06-30 2472 default: 737a97548c4a31 Breno Leitao 2026-06-30 2473 /* Transient lifecycle race with the page allocator. */ b8b9488d50b715 Jane Chu 2024-05-24 2474 res = action_result(pfn, MF_MSG_GET_HWPOISON, MF_IGNORED); 0ed950d1f28142 Naoya Horiguchi 2021-06-28 2475 goto unlock_mutex; 0ed950d1f28142 Naoya Horiguchi 2021-06-28 2476 } 6a46079cf57a7f Andi Kleen 2009-09-16 2477 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2478) folio = page_folio(p); 9b0ab153d76972 Jane Chu 2024-05-24 2479 9b0ab153d76972 Jane Chu 2024-05-24 2480 /* filter pages that are protected from hwpoison test by users */ 9b0ab153d76972 Jane Chu 2024-05-24 2481 folio_lock(folio); 9b0ab153d76972 Jane Chu 2024-05-24 2482 if (hwpoison_filter(p)) { 9b0ab153d76972 Jane Chu 2024-05-24 2483 ClearPageHWPoison(p); 9b0ab153d76972 Jane Chu 2024-05-24 2484 folio_unlock(folio); 9b0ab153d76972 Jane Chu 2024-05-24 2485 folio_put(folio); 9b0ab153d76972 Jane Chu 2024-05-24 2486 res = -EOPNOTSUPP; 9b0ab153d76972 Jane Chu 2024-05-24 2487 goto unlock_mutex; 9b0ab153d76972 Jane Chu 2024-05-24 2488 } 9b0ab153d76972 Jane Chu 2024-05-24 2489 folio_unlock(folio); 9b0ab153d76972 Jane Chu 2024-05-24 2490 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2491) if (folio_test_large(folio)) { 689b8986776c82 Zi Yan 2025-10-31 @2492 int err; 689b8986776c82 Zi Yan 2025-10-31 2493 eac96c3efdb593 Yang Shi 2021-10-28 2494 /* eac96c3efdb593 Yang Shi 2021-10-28 2495 * The flag must be set after the refcount is bumped eac96c3efdb593 Yang Shi 2021-10-28 2496 * otherwise it may race with THP split. eac96c3efdb593 Yang Shi 2021-10-28 2497 * And the flag can't be set in get_hwpoison_page() since eac96c3efdb593 Yang Shi 2021-10-28 2498 * it is called by soft offline too and it is just called 5885c6a62533cb Miaohe Lin 2023-07-11 2499 * for !MF_COUNT_INCREASED. So here seems to be the best eac96c3efdb593 Yang Shi 2021-10-28 2500 * place. eac96c3efdb593 Yang Shi 2021-10-28 2501 * eac96c3efdb593 Yang Shi 2021-10-28 2502 * Don't need care about the above error handling paths for eac96c3efdb593 Yang Shi 2021-10-28 2503 * get_hwpoison_page() since they handle either free page eac96c3efdb593 Yang Shi 2021-10-28 2504 * or unhandlable page. The refcount is bumped iff the eac96c3efdb593 Yang Shi 2021-10-28 2505 * page is a valid handlable page. eac96c3efdb593 Yang Shi 2021-10-28 2506 */ 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2507) folio_set_has_hwpoisoned(folio); 546d4271307492 Li Youhong 2026-08-06 2508 546d4271307492 Li Youhong 2026-08-06 2509 lock_page(p); 546d4271307492 Li Youhong 2026-08-06 2510 err = split_huge_page_to_order(p, min_order_for_split(folio)); 546d4271307492 Li Youhong 2026-08-06 2511 unlock_page(p); 689b8986776c82 Zi Yan 2025-10-31 2512 /* 689b8986776c82 Zi Yan 2025-10-31 2513 * If splitting a folio to order-0 fails, kill the process. 689b8986776c82 Zi Yan 2025-10-31 2514 * Split the folio regardless to minimize unusable pages. 689b8986776c82 Zi Yan 2025-10-31 2515 * Because the memory failure code cannot handle large 689b8986776c82 Zi Yan 2025-10-31 2516 * folios, this split is always treated as if it failed. 689b8986776c82 Zi Yan 2025-10-31 2517 */ 689b8986776c82 Zi Yan 2025-10-31 2518 folio = page_folio(p); 546d4271307492 Li Youhong 2026-08-06 2519 if (folio_test_large(folio)) { 1a3798dececa8c Jane Chu 2024-05-24 2520 res = -EHWPOISON; 1a3798dececa8c Jane Chu 2024-05-24 2521 kill_procs_now(p, pfn, flags, folio); 1a3798dececa8c Jane Chu 2024-05-24 2522 put_page(p); 1a3798dececa8c Jane Chu 2024-05-24 2523 action_result(pfn, MF_MSG_UNSPLIT_THP, MF_FAILED); 171936ddaf97e6 Tony Luck 2021-06-24 2524 goto unlock_mutex; 5d1fd5dc877bc1 Naoya Horiguchi 2020-10-15 2525 } 415c64c1453aa2 Naoya Horiguchi 2015-06-24 2526 } 415c64c1453aa2 Naoya Horiguchi 2015-06-24 2527 e43c3afb367112 Wu Fengguang 2009-09-29 2528 /* e43c3afb367112 Wu Fengguang 2009-09-29 2529 * We ignore non-LRU pages for good reasons. e43c3afb367112 Wu Fengguang 2009-09-29 2530 * - PG_locked is only well defined for LRU pages and a few others 48c935ad88f5be Kiryl Shutsemau 2016-01-15 2531 * - to avoid races with __SetPageLocked() e43c3afb367112 Wu Fengguang 2009-09-29 2532 * - to avoid races with __SetPageSlab*() (and more non-atomic ops) e43c3afb367112 Wu Fengguang 2009-09-29 2533 * The check (unnecessarily) ignores LRU pages being isolated and e43c3afb367112 Wu Fengguang 2009-09-29 2534 * walked by the page reclaim code, however that's not a big loss. e43c3afb367112 Wu Fengguang 2009-09-29 2535 */ 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2536) shake_folio(folio); e43c3afb367112 Wu Fengguang 2009-09-29 2537 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2538) folio_lock(folio); 847ce401df392b Wu Fengguang 2009-12-16 2539 f37d4298aa7f8b Andi Kleen 2014-08-06 2540 /* 75ee64b3c9a969 Miaohe Lin 2022-03-22 2541 * We're only intended to deal with the non-Compound page here. 8a78882dac1c8c Miaohe Lin 2024-07-08 2542 * The page cannot become compound pages again as folio has been 8a78882dac1c8c Miaohe Lin 2024-07-08 2543 * splited and extra refcnt is held. f37d4298aa7f8b Andi Kleen 2014-08-06 2544 */ 8a78882dac1c8c Miaohe Lin 2024-07-08 2545 WARN_ON(folio_test_large(folio)); f37d4298aa7f8b Andi Kleen 2014-08-06 2546 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2547 /* 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2548 * We use page flags to determine what action should be taken, but 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2549 * the flags can be modified by the error containment action. One 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2550 * example is an mlocked page, where PG_mlocked is cleared by 4d8f7418e8ba36 David Hildenbrand 2023-12-20 2551 * folio_remove_rmap_*() in try_to_unmap_one(). So to determine page 4d8f7418e8ba36 David Hildenbrand 2023-12-20 2552 * status correctly, we save a copy of the page flags at this time. 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2553 */ 53fbef56e07df8 Matthew Wilcox (Oracle 2025-08-05 2554) page_flags = folio->flags.f; 524fca1e7356f8 Naoya Horiguchi 2013-02-22 2555 e8675d291ac007 yangerkun 2021-06-15 2556 /* 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2557) * __munlock_folio() may clear a writeback folio's LRU flag without 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2558) * the folio lock. We need to wait for writeback completion for this 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2559) * folio or it may trigger a vfs BUG while evicting inode. e8675d291ac007 yangerkun 2021-06-15 2560 */ 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2561) if (!folio_test_lru(folio) && !folio_test_writeback(folio)) 0bc1f8b0682caa Chen Yucong 2014-07-02 2562 goto identify_page_state; 0bc1f8b0682caa Chen Yucong 2014-07-02 2563 6edd6cc66201e0 Naoya Horiguchi 2014-06-04 2564 /* 6edd6cc66201e0 Naoya Horiguchi 2014-06-04 2565 * It's very difficult to mess with pages currently under IO 6edd6cc66201e0 Naoya Horiguchi 2014-06-04 2566 * and in many cases impossible, so we just avoid it here. 6edd6cc66201e0 Naoya Horiguchi 2014-06-04 2567 */ 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2568) folio_wait_writeback(folio); 6a46079cf57a7f Andi Kleen 2009-09-16 2569 6a46079cf57a7f Andi Kleen 2009-09-16 2570 /* 6a46079cf57a7f Andi Kleen 2009-09-16 2571 * Now take care of user space mappings. 6ffcd825e7d041 Matthew Wilcox (Oracle 2022-06-28 2572) * Abort on fail: __filemap_remove_folio() assumes unmapped page. 6a46079cf57a7f Andi Kleen 2009-09-16 2573 */ 03468a0f52893b Matthew Wilcox (Oracle 2024-04-12 2574) if (!hwpoison_user_mappings(folio, p, pfn, flags)) { b8b9488d50b715 Jane Chu 2024-05-24 2575 res = action_result(pfn, MF_MSG_UNMAP_FAILED, MF_FAILED); 171936ddaf97e6 Tony Luck 2021-06-24 2576 goto unlock_page; 1668bfd5be9d8a Wu Fengguang 2009-12-16 2577 } 6a46079cf57a7f Andi Kleen 2009-09-16 2578 6a46079cf57a7f Andi Kleen 2009-09-16 2579 /* 6a46079cf57a7f Andi Kleen 2009-09-16 2580 * Torn down by someone else? 6a46079cf57a7f Andi Kleen 2009-09-16 2581 */ 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2582) if (folio_test_lru(folio) && !folio_test_swapcache(folio) && 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2583) folio->mapping == NULL) { b66d00dfebe79e Kefeng Wang 2022-10-21 2584 res = action_result(pfn, MF_MSG_TRUNCATED_LRU, MF_IGNORED); 171936ddaf97e6 Tony Luck 2021-06-24 2585 goto unlock_page; 6a46079cf57a7f Andi Kleen 2009-09-16 2586 } 6a46079cf57a7f Andi Kleen 2009-09-16 2587 0bc1f8b0682caa Chen Yucong 2014-07-02 2588 identify_page_state: 0348d2ebec9b00 Naoya Horiguchi 2017-07-10 2589 res = identify_page_state(pfn, p, page_flags); ea6d0630100b28 Naoya Horiguchi 2021-06-24 2590 mutex_unlock(&mf_mutex); ea6d0630100b28 Naoya Horiguchi 2021-06-24 2591 return res; 171936ddaf97e6 Tony Luck 2021-06-24 2592 unlock_page: 5dba5c356ab3bb Matthew Wilcox (Oracle 2024-04-12 2593) folio_unlock(folio); 171936ddaf97e6 Tony Luck 2021-06-24 2594 unlock_mutex: 171936ddaf97e6 Tony Luck 2021-06-24 2595 mutex_unlock(&mf_mutex); 6a46079cf57a7f Andi Kleen 2009-09-16 2596 return res; 6a46079cf57a7f Andi Kleen 2009-09-16 2597 } cd42f4a3b2b1c4 Tony Luck 2011-12-15 2598 EXPORT_SYMBOL_GPL(memory_failure); 847ce401df392b Wu Fengguang 2009-12-16 2599 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki