diff options
author | Naoya Horiguchi <naoya.horiguchi@nec.com> | 2022-04-28 23:16:02 -0700 |
---|---|---|
committer | akpm <akpm@linux-foundation.org> | 2022-04-28 23:16:02 -0700 |
commit | f361e2462e8cccdd9231aa3274690705a2ea35a2 (patch) | |
tree | 14a444f401c65181d68017ab1aa965436e6360ad | |
parent | f142e70750a1ea36ba60fb4f24bc37713e921f73 (diff) | |
download | linux-stable-f361e2462e8cccdd9231aa3274690705a2ea35a2.tar.gz linux-stable-f361e2462e8cccdd9231aa3274690705a2ea35a2.tar.bz2 linux-stable-f361e2462e8cccdd9231aa3274690705a2ea35a2.zip |
mm/hwpoison: put page in already hwpoisoned case with MF_COUNT_INCREASED
In already hwpoisoned case, memory_failure() is supposed to return with
releasing the page refcount taken for error handling. But currently the
refcount is not released when called with MF_COUNT_INCREASED, which makes
page refcount inconsistent. This should be rare and non-critical, but it
might be inconvenient in testing (unpoison doesn't work).
Link: https://lkml.kernel.org/r/20220408135323.1559401-3-naoya.horiguchi@linux.dev
Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com>
Suggested-by: Miaohe Lin <linmiaohe@huawei.com>
Reviewed-by: Miaohe Lin <linmiaohe@huawei.com>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Yang Shi <shy828301@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r-- | mm/memory-failure.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 837348a2d669..44510efd0829 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1811,6 +1811,8 @@ try_again: res = -EHWPOISON; if (flags & MF_ACTION_REQUIRED) res = kill_accessing_process(current, pfn, flags); + if (flags & MF_COUNT_INCREASED) + put_page(p); goto unlock_mutex; } |