Message ID | 20190710213238.91835-1-henryburns@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm/z3fold.c: remove z3fold_migration trylock | expand |
On Wed, Jul 10, 2019 at 2:32 PM Henry Burns <henryburns@google.com> wrote: > > 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) > > > Signed-off-by: Henry Burns <henryburns@google.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Please add the Fixes tag as well. > --- > mm/z3fold.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/mm/z3fold.c b/mm/z3fold.c > index 985732c8b025..9fe9330ab8ae 100644 > --- a/mm/z3fold.c > +++ b/mm/z3fold.c > @@ -1335,16 +1335,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; > } > new_zhdr = page_address(newpage); > @@ -1376,7 +1371,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); > > page_mapcount_reset(page); > - unlock_page(page); > put_page(page); > return 0; > } > -- > 2.22.0.410.gd8fdbe21b5-goog >
> > 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) > > > > > > Signed-off-by: Henry Burns <henryburns@google.com> > > Reviewed-by: Shakeel Butt <shakeelb@google.com> > > Please add the Fixes tag as well. Fixes: 1f862989b04a ("mm/z3fold.c: support page migration") > > > --- > > mm/z3fold.c | 6 ------ > > 1 file changed, 6 deletions(-) > > > > diff --git a/mm/z3fold.c b/mm/z3fold.c > > index 985732c8b025..9fe9330ab8ae 100644 > > --- a/mm/z3fold.c > > +++ b/mm/z3fold.c > > @@ -1335,16 +1335,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; > > } > > new_zhdr = page_address(newpage); > > @@ -1376,7 +1371,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); > > > > page_mapcount_reset(page); > > - unlock_page(page); > > put_page(page); > > return 0; > > } > > -- > > 2.22.0.410.gd8fdbe21b5-goog > >
diff --git a/mm/z3fold.c b/mm/z3fold.c index 985732c8b025..9fe9330ab8ae 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c @@ -1335,16 +1335,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; } new_zhdr = page_address(newpage); @@ -1376,7 +1371,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); page_mapcount_reset(page); - unlock_page(page); put_page(page); return 0; }
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) Signed-off-by: Henry Burns <henryburns@google.com> --- mm/z3fold.c | 6 ------ 1 file changed, 6 deletions(-)