diff options
author | Vitaly Wool <vitalywool@gmail.com> | 2017-03-16 19:40:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-16 19:56:18 -0400 |
commit | 271df90e4e530c17f237b27034d6341cb2c2f536 (patch) | |
tree | 37c4d5e3ee0e029749d65aca37981dbe1ae93279 /mm/z3fold.c | |
parent | 69eea5a4ab9c705496e912b55a9d312325de19e6 (diff) |
z3fold: fix spinlock unlocking in page reclaim
Commmit 5a27aa822029 ("z3fold: add kref refcounting") introduced a bug
in z3fold_reclaim_page() with function exit that may leave pool->lock
spinlock held. Here comes the trivial fix.
Fixes: 5a27aa822029 ("z3fold: add kref refcounting")
Link: http://lkml.kernel.org/r/20170311222239.7b83d8e7ef1914e05497649f@gmail.com
Reported-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Vitaly Wool <vitalywool@gmail.com>
Cc: Dan Streetman <ddstreet@ieee.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/z3fold.c')
-rw-r--r-- | mm/z3fold.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/mm/z3fold.c b/mm/z3fold.c index 8970a2fd3b1a..f9492bccfd79 100644 --- a/mm/z3fold.c +++ b/mm/z3fold.c | |||
@@ -667,6 +667,7 @@ next: | |||
667 | z3fold_page_unlock(zhdr); | 667 | z3fold_page_unlock(zhdr); |
668 | spin_lock(&pool->lock); | 668 | spin_lock(&pool->lock); |
669 | if (kref_put(&zhdr->refcount, release_z3fold_page)) { | 669 | if (kref_put(&zhdr->refcount, release_z3fold_page)) { |
670 | spin_unlock(&pool->lock); | ||
670 | atomic64_dec(&pool->pages_nr); | 671 | atomic64_dec(&pool->pages_nr); |
671 | return 0; | 672 | return 0; |
672 | } | 673 | } |