]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mm/z3fold.c: remove z3fold_migration trylock
authorHenry Burns <henryburns@google.com>
Tue, 16 Jul 2019 23:26:18 +0000 (16:26 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Sep 2019 07:11:06 +0000 (09:11 +0200)
commit be03074c9af25d06cf8e9ebddfcd284c0bf7f947 upstream.

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: 1f862989b04a ("mm/z3fold.c: support page migration")
Signed-off-by: Henry Burns <henryburns@google.com>
Reviewed-by: Shakeel 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/z3fold.c

index 46686d0e3df84e49aecc1c5233cb7b05308264d7..39d0a8a40e6670bc8f87ea1f6c3dd463d9b8417c 100644 (file)
@@ -1439,16 +1439,11 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa
        zhdr = page_address(page);
        pool = zhdr_to_pool(zhdr);
 
-       if (!trylock_page(page))
-               return -EAGAIN;
-
        if (!z3fold_page_trylock(zhdr)) {
-               unlock_page(page);
                return -EAGAIN;
        }
        if (zhdr->mapped_count != 0) {
                z3fold_page_unlock(zhdr);
-               unlock_page(page);
                return -EBUSY;
        }
        if (work_pending(&zhdr->work)) {
@@ -1494,7 +1489,6 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa
        spin_unlock(&pool->lock);
 
        page_mapcount_reset(page);
-       unlock_page(page);
        put_page(page);
        return 0;
 }