Commit be03074c authored by Henry Burns's avatar Henry Burns Committed by Linus Torvalds

mm/z3fold.c: remove z3fold_migration trylock

z3fold_page_migrate() will never succeed because it attempts to acquire
a lock that has already been taken by migrate.c in __unmap_and_move().

  __unmap_and_move() migrate.c
    trylock_page(oldpage)
    move_to_new_page(oldpage_newpage)
      a_ops->migrate_page(oldpage, newpage)
        z3fold_page_migrate(oldpage, newpage)
          trylock_page(oldpage)

Link: http://lkml.kernel.org/r/20190710213238.91835-1-henryburns@google.com
Fixes: 1f862989 ("mm/z3fold.c: support page migration")
Signed-off-by: default avatarHenry Burns <henryburns@google.com>
Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
Cc: Vitaly Wool <vitalywool@gmail.com>
Cc: Vitaly Vul <vitaly.vul@sony.com>
Cc: Jonathan Adams <jwadams@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Snild Dolkow <snild@sony.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1732d2b0
...@@ -1350,16 +1350,11 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa ...@@ -1350,16 +1350,11 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa
zhdr = page_address(page); zhdr = page_address(page);
pool = zhdr_to_pool(zhdr); pool = zhdr_to_pool(zhdr);
if (!trylock_page(page))
return -EAGAIN;
if (!z3fold_page_trylock(zhdr)) { if (!z3fold_page_trylock(zhdr)) {
unlock_page(page);
return -EAGAIN; return -EAGAIN;
} }
if (zhdr->mapped_count != 0) { if (zhdr->mapped_count != 0) {
z3fold_page_unlock(zhdr); z3fold_page_unlock(zhdr);
unlock_page(page);
return -EBUSY; return -EBUSY;
} }
new_zhdr = page_address(newpage); new_zhdr = page_address(newpage);
...@@ -1391,7 +1386,6 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa ...@@ -1391,7 +1386,6 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa
queue_work_on(new_zhdr->cpu, pool->compact_wq, &new_zhdr->work); queue_work_on(new_zhdr->cpu, pool->compact_wq, &new_zhdr->work);
page_mapcount_reset(page); page_mapcount_reset(page);
unlock_page(page);
put_page(page); put_page(page);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment