set_bit(PAGE_HEADLESS, &page->private);
                goto headless;
        }
-       __SetPageMovable(page, pool->inode->i_mapping);
+       if (can_sleep) {
+               lock_page(page);
+               __SetPageMovable(page, pool->inode->i_mapping);
+               unlock_page(page);
+       } else {
+               if (trylock_page(page)) {
+                       __SetPageMovable(page, pool->inode->i_mapping);
+                       unlock_page(page);
+               }
+       }
        z3fold_page_lock(zhdr);
 
 found:
 
        VM_BUG_ON_PAGE(!PageMovable(page), page);
        VM_BUG_ON_PAGE(!PageIsolated(page), page);
+       VM_BUG_ON_PAGE(!PageLocked(newpage), newpage);
 
        zhdr = page_address(page);
        pool = zhdr_to_pool(zhdr);