diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-01-03 11:54:30 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-01-03 11:54:30 -0300 |
commit | 65f8d08cf838df3c3d728cdef908090237931496 (patch) | |
tree | f4902ce189fc0304527eaf2ad29da2e88c2e9a6d /mm/memory-failure.c | |
parent | af2b24f228a0373ac65eb7a502e0bc31e2c0269d (diff) | |
parent | c9e6606c7fe92b50a02ce51dda82586ebdf99b48 (diff) |
Merge remote-tracking branch 'torvalds/master' into perf/core
To pick up fixes.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r-- | mm/memory-failure.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 07c875fdeaf0..3a274468f193 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1470,17 +1470,12 @@ static int memory_failure_hugetlb(unsigned long pfn, int flags) if (!(flags & MF_COUNT_INCREASED)) { res = get_hwpoison_page(p, flags); if (!res) { - /* - * Check "filter hit" and "race with other subpage." - */ lock_page(head); - if (PageHWPoison(head)) { - if ((hwpoison_filter(p) && TestClearPageHWPoison(p)) - || (p != head && TestSetPageHWPoison(head))) { + if (hwpoison_filter(p)) { + if (TestClearPageHWPoison(head)) num_poisoned_pages_dec(); - unlock_page(head); - return 0; - } + unlock_page(head); + return 0; } unlock_page(head); res = MF_FAILED; @@ -2239,6 +2234,7 @@ retry: } else if (ret == 0) { if (soft_offline_free_page(page) && try_again) { try_again = false; + flags &= ~MF_COUNT_INCREASED; goto retry; } } |