[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190724191802.255562204@linuxfoundation.org>
Date: Wed, 24 Jul 2019 21:21:10 +0200
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-kernel@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
stable@...r.kernel.org, Henry Burns <henryburns@...gle.com>,
Vitaly Wool <vitalywool@...il.com>,
David Rientjes <rientjes@...gle.com>,
Shakeel Butt <shakeelb@...gle.com>,
Vitaly Vul <vitaly.vul@...y.com>,
Mike Rapoport <rppt@...ux.vnet.ibm.com>,
Xidong Wang <wangxidong_97@....com>,
Jonathan Adams <jwadams@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Linus Torvalds <torvalds@...ux-foundation.org>
Subject: [PATCH 5.2 379/413] mm/z3fold.c: lock z3fold page before __SetPageMovable()
From: Henry Burns <henryburns@...gle.com>
commit 810481a246089117d98e3373a3cb735c3efc1f90 upstream.
Following zsmalloc.c's example we call trylock_page() and unlock_page().
Also make z3fold_page_migrate() assert that newpage is passed in locked,
as per the documentation.
[akpm@...ux-foundation.org: fix trylock_page return value test, per Shakeel]
Link: http://lkml.kernel.org/r/20190702005122.41036-1-henryburns@google.com
Link: http://lkml.kernel.org/r/20190702233538.52793-1-henryburns@google.com
Signed-off-by: Henry Burns <henryburns@...gle.com>
Suggested-by: Vitaly Wool <vitalywool@...il.com>
Acked-by: Vitaly Wool <vitalywool@...il.com>
Acked-by: David Rientjes <rientjes@...gle.com>
Reviewed-by: Shakeel Butt <shakeelb@...gle.com>
Cc: Vitaly Vul <vitaly.vul@...y.com>
Cc: Mike Rapoport <rppt@...ux.vnet.ibm.com>
Cc: Xidong Wang <wangxidong_97@....com>
Cc: Jonathan Adams <jwadams@...gle.com>
Cc: <stable@...r.kernel.org>
Signed-off-by: Andrew Morton <akpm@...ux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@...ux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
---
mm/z3fold.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
--- a/mm/z3fold.c
+++ b/mm/z3fold.c
@@ -924,7 +924,16 @@ retry:
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:
@@ -1331,6 +1340,7 @@ static int z3fold_page_migrate(struct ad
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);
Powered by blists - more mailing lists