diff options
author | Andrew Morton <akpm@linux-foundation.org> | 2022-11-30 14:58:42 -0800 |
---|---|---|
committer | Andrew Morton <akpm@linux-foundation.org> | 2022-11-30 14:58:42 -0800 |
commit | a38358c934f66bdff12db762998b88038d7bc44b (patch) | |
tree | 72747f34cde18a9e2188b6bccb865c14d423b986 /mm/memory-failure.c | |
parent | ea0ffd0c08d0fef1f6e93eb07badbeeabf6b43d6 (diff) | |
parent | 1d351f1894342c378b96bb9ed89f8debb1e24e9f (diff) |
Merge branch 'mm-hotfixes-stable' into mm-stable
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r-- | mm/memory-failure.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 9b82402ec242..779a426d2cab 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1093,6 +1093,7 @@ static int me_huge_page(struct page_state *ps, struct page *p) int res; struct page *hpage = compound_head(p); struct address_space *mapping; + bool extra_pins = false; if (!PageHuge(hpage)) return MF_DELAYED; @@ -1100,6 +1101,8 @@ static int me_huge_page(struct page_state *ps, struct page *p) mapping = page_mapping(hpage); if (mapping) { res = truncate_error_page(hpage, page_to_pfn(p), mapping); + /* The page is kept in page cache. */ + extra_pins = true; unlock_page(hpage); } else { unlock_page(hpage); @@ -1117,7 +1120,7 @@ static int me_huge_page(struct page_state *ps, struct page *p) } } - if (has_extra_refcount(ps, p, false)) + if (has_extra_refcount(ps, p, extra_pins)) res = MF_FAILED; return res; |