diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-08-30 14:12:24 -0700 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2013-09-18 13:32:10 -0700 |
commit | 28b7244fe1b6a82d8e68d03a26eba9b5cf80ae0b (patch) | |
tree | 4ea35b4362c0d9c229d8ca54a07030e6cc4237c7 | |
parent | 78e9704ac97464458fd6227c4ce9576293c811df (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
-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 833c590806ba..7d3deab11fce 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -633,7 +633,7 @@ static int bch_mca_shrink(struct shrinker *shrink, struct shrink_control *sc) return mca_can_free(c) * c->btree_pages; /* Return -1 if we can't do anything right now */ - if (sc->gfp_mask & __GFP_WAIT) + if (sc->gfp_mask & __GFP_IO) mutex_lock(&c->bucket_lock); else if (!mutex_trylock(&c->bucket_lock)) return -1; |