diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-09-24 02:17:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-24 17:41:43 -0400 |
commit | a698e08c82dfb9771e0bac12c7337c706d729b6d (patch) | |
tree | a9048d9322ce493b45d03be8254f96c05f0a456f | |
parent | 79e3dab90d9f826ceca67c7890e048ac9169de49 (diff) |
bcache: Fix a shrinker deadlock
GFP_NOIO means we could be getting called recursively - mca_alloc() ->
mca_data_alloc() - definitely can't use mutex_lock(bucket_lock) then.
Whoops.
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: linux-stable <stable@vger.kernel.org> # >= v3.10
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/md/bcache/btree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index 8fad8402fb2e..f42fc7ed9cd6 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c | |||
@@ -612,7 +612,7 @@ static unsigned long bch_mca_scan(struct shrinker *shrink, | |||
612 | return SHRINK_STOP; | 612 | return SHRINK_STOP; |
613 | 613 | ||
614 | /* Return -1 if we can't do anything right now */ | 614 | /* Return -1 if we can't do anything right now */ |
615 | if (sc->gfp_mask & __GFP_WAIT) | 615 | if (sc->gfp_mask & __GFP_IO) |
616 | mutex_lock(&c->bucket_lock); | 616 | mutex_lock(&c->bucket_lock); |
617 | else if (!mutex_trylock(&c->bucket_lock)) | 617 | else if (!mutex_trylock(&c->bucket_lock)) |
618 | return -1; | 618 | return -1; |