In the memory failure procedure, hwpoison_filter has higher priority, if memory_filter() filters the error event, there is no need to do the further work. Cc: Wu Fengguang <fengguang.wu@xxxxxxxxx> Signed-off-by: zhenwei pi <pizhenwei@xxxxxxxxxxxxx> --- mm/memory-failure.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index ece05858568f..a6a27c8b800f 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1800,6 +1800,11 @@ int memory_failure(unsigned long pfn, int flags) goto unlock_mutex; } + if (hwpoison_filter(p)) { + res = -EOPNOTSUPP; + goto unlock_mutex; + } + try_again: res = try_memory_failure_hugetlb(pfn, flags, &hugetlb); if (hugetlb) @@ -1937,15 +1942,6 @@ int memory_failure(unsigned long pfn, int flags) */ page_flags = p->flags; - if (hwpoison_filter(p)) { - if (TestClearPageHWPoison(p)) - num_poisoned_pages_dec(); - unlock_page(p); - put_page(p); - res = -EOPNOTSUPP; - goto unlock_mutex; - } - /* * __munlock_pagevec may clear a writeback page's LRU flag without * page_lock. We need wait writeback completion for this page or it -- 2.20.1