mm/z3fold: throw warning on failure of trylock_page in z3fold_alloc
authorMiaohe Lin <linmiaohe@huawei.com>
Fri, 29 Apr 2022 06:40:43 +0000 (14:40 +0800)
committerakpm <akpm@linux-foundation.org>
Fri, 27 May 2022 16:33:43 +0000 (09:33 -0700)
If trylock_page fails, the page won't be non-lru movable page.  When this
page is freed via free_z3fold_page, it will trigger bug on PageMovable
check in __ClearPageMovable.  Throw warning on failure of trylock_page to
guard against such rare case just as what zsmalloc does.

Link: https://lkml.kernel.org/r/20220429064051.61552-5-linmiaohe@huawei.com
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Cc: Vitaly Wool <vitaly.wool@konsulko.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/z3fold.c

index 4e6814c5694fa84fd598ad8c81a52ba42dc559ae..b3b4e65c107f3b6058c3b1a4bf0cc38dec806cf4 100644 (file)
@@ -1122,10 +1122,9 @@ retry:
                __SetPageMovable(page, pool->inode->i_mapping);
                unlock_page(page);
        } else {
-               if (trylock_page(page)) {
-                       __SetPageMovable(page, pool->inode->i_mapping);
-                       unlock_page(page);
-               }
+               WARN_ON(!trylock_page(page));
+               __SetPageMovable(page, pool->inode->i_mapping);
+               unlock_page(page);
        }
        z3fold_page_lock(zhdr);