mm/memory-failure: move hwpoison_filter() higher up
authorJane Chu <jane.chu@oracle.com>
Fri, 24 May 2024 21:53:05 +0000 (15:53 -0600)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 4 Jul 2024 02:29:58 +0000 (19:29 -0700)
Move hwpoison_filter() higher up as there is no need to spend a lot cycles
only to find out later that the page is supposed to be skipped from
hwpoison handling.

Link: https://lkml.kernel.org/r/20240524215306.2705454-5-jane.chu@oracle.com
Signed-off-by: Jane Chu <jane.chu@oracle.com>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
Acked-by: Miaohe Lin <linmiaohe@huawei.com>
Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
Cc: Oscar Salvador <oalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memory-failure.c

index 7f29f1adba21bd8e9afbddb9e1d6f9c08d21c450..7e568838fb329c8484f675649d9da3c55440b611 100644 (file)
@@ -2300,6 +2300,18 @@ try_again:
        }
 
        folio = page_folio(p);
+
+       /* filter pages that are protected from hwpoison test by users */
+       folio_lock(folio);
+       if (hwpoison_filter(p)) {
+               ClearPageHWPoison(p);
+               folio_unlock(folio);
+               folio_put(folio);
+               res = -EOPNOTSUPP;
+               goto unlock_mutex;
+       }
+       folio_unlock(folio);
+
        if (folio_test_large(folio)) {
                /*
                 * The flag must be set after the refcount is bumped
@@ -2363,14 +2375,6 @@ try_again:
         */
        page_flags = folio->flags;
 
-       if (hwpoison_filter(p)) {
-               ClearPageHWPoison(p);
-               folio_unlock(folio);
-               folio_put(folio);
-               res = -EOPNOTSUPP;
-               goto unlock_mutex;
-       }
-
        /*
         * __munlock_folio() may clear a writeback folio's LRU flag without
         * the folio lock. We need to wait for writeback completion for this