diff options
Diffstat (limited to 'mm/z3fold.c')
-rw-r--r-- | mm/z3fold.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/mm/z3fold.c b/mm/z3fold.c index 985732c8b025..dfcd69d08c1e 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c | |||
@@ -924,7 +924,16 @@ retry: | |||
924 | set_bit(PAGE_HEADLESS, &page->private); | 924 | set_bit(PAGE_HEADLESS, &page->private); |
925 | goto headless; | 925 | goto headless; |
926 | } | 926 | } |
927 | __SetPageMovable(page, pool->inode->i_mapping); | 927 | if (can_sleep) { |
928 | lock_page(page); | ||
929 | __SetPageMovable(page, pool->inode->i_mapping); | ||
930 | unlock_page(page); | ||
931 | } else { | ||
932 | if (trylock_page(page)) { | ||
933 | __SetPageMovable(page, pool->inode->i_mapping); | ||
934 | unlock_page(page); | ||
935 | } | ||
936 | } | ||
928 | z3fold_page_lock(zhdr); | 937 | z3fold_page_lock(zhdr); |
929 | 938 | ||
930 | found: | 939 | found: |
@@ -1331,6 +1340,7 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa | |||
1331 | 1340 | ||
1332 | VM_BUG_ON_PAGE(!PageMovable(page), page); | 1341 | VM_BUG_ON_PAGE(!PageMovable(page), page); |
1333 | VM_BUG_ON_PAGE(!PageIsolated(page), page); | 1342 | VM_BUG_ON_PAGE(!PageIsolated(page), page); |
1343 | VM_BUG_ON_PAGE(!PageLocked(newpage), newpage); | ||
1334 | 1344 | ||
1335 | zhdr = page_address(page); | 1345 | zhdr = page_address(page); |
1336 | pool = zhdr_to_pool(zhdr); | 1346 | pool = zhdr_to_pool(zhdr); |