diff options
-rw-r--r-- | mm/memory-failure.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 29ab7b70d326..0143d32bc666 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1552,7 +1552,12 @@ try_again: return 0; } - if (!PageTransTail(p) && !PageLRU(p)) + /* + * __munlock_pagevec may clear a writeback page's LRU flag without + * page_lock. We need wait writeback completion for this page or it + * may trigger vfs BUG while evict inode. + */ + if (!PageTransTail(p) && !PageLRU(p) && !PageWriteback(p)) goto identify_page_state; /* |