]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/memory-failure: remove hugetlb output parameter from try_memory_failure_hugetlb()
authorYe Liu <liuye@kylinos.cn>
Fri, 15 May 2026 02:01:43 +0000 (10:01 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 2 Jun 2026 22:22:24 +0000 (15:22 -0700)
Use -ENOENT return value to distinguish "not a hugetlb page" from "hugetlb
handled", instead of carrying an extra output parameter.

Link: https://lore.kernel.org/20260515020144.164941-1-ye.liu@linux.dev
Signed-off-by: Ye Liu <liuye@kylinos.cn>
Suggested-by: Oscar Salvador <osalvador@suse.de>
Acked-by: Miaohe Lin <linmiaohe@huawei.com>
Acked-by: Oscar Salvador (SUSE) <osalvador@kernel.org>
Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memory-failure.c

index eff405a21c68b730b5fb3c30a4cc5d9cc1dda27d..1b8d0bade04a716f2ad4ed844cc2495bd8e2085f 100644 (file)
@@ -2027,13 +2027,14 @@ out_unlock:
  * So some of prechecks for hwpoison (pinning, and testing/setting
  * PageHWPoison) should be done in single hugetlb_lock range.
  * Returns:
- *     0               - not hugetlb, or recovered
+ *     0               - recovered
+ *     -ENOENT         - no hugetlb page
  *     -EBUSY          - not recovered
  *     -EOPNOTSUPP     - hwpoison_filter'ed
  *     -EHWPOISON      - folio or exact page already poisoned
  *     -EFAULT         - kill_accessing_process finds current->mm null
  */
-static int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb)
+static int try_memory_failure_hugetlb(unsigned long pfn, int flags)
 {
        int res, rv;
        struct page *p = pfn_to_page(pfn);
@@ -2041,13 +2042,11 @@ static int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb
        unsigned long page_flags;
        bool migratable_cleared = false;
 
-       *hugetlb = 1;
 retry:
        res = get_huge_page_for_hwpoison(pfn, flags, &migratable_cleared);
        switch (res) {
        case MF_HUGETLB_NON_HUGEPAGE:   /* fallback to normal page handling */
-               *hugetlb = 0;
-               return 0;
+               return -ENOENT;
        case MF_HUGETLB_RETRY:
                if (!(flags & MF_NO_RETRY)) {
                        flags |= MF_NO_RETRY;
@@ -2108,9 +2107,9 @@ retry:
 }
 
 #else
-static inline int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb)
+static inline int try_memory_failure_hugetlb(unsigned long pfn, int flags)
 {
-       return 0;
+       return -ENOENT;
 }
 
 static inline unsigned long folio_free_raw_hwp(struct folio *folio, bool flag)
@@ -2348,7 +2347,6 @@ int memory_failure(unsigned long pfn, int flags)
        int res = 0;
        unsigned long page_flags;
        bool retry = true;
-       int hugetlb = 0;
 
        if (!sysctl_memory_failure_recovery)
                panic("Memory failure on page %lx", pfn);
@@ -2387,8 +2385,11 @@ int memory_failure(unsigned long pfn, int flags)
        }
 
 try_again:
-       res = try_memory_failure_hugetlb(pfn, flags, &hugetlb);
-       if (hugetlb)
+       res = try_memory_failure_hugetlb(pfn, flags);
+       /*
+        * -ENOENT means the page we found is not hugetlb, so proceed with normal page handling
+        */
+       if (res != -ENOENT)
                goto unlock_mutex;
 
        if (TestSetPageHWPoison(p)) {