| From a698e08c82dfb9771e0bac12c7337c706d729b6d Mon Sep 17 00:00:00 2001 |
| From: Kent Overstreet <kmo@daterainc.com> |
| Date: Mon, 23 Sep 2013 23:17:34 -0700 |
| Subject: bcache: Fix a shrinker deadlock |
| |
| From: Kent Overstreet <kmo@daterainc.com> |
| |
| commit a698e08c82dfb9771e0bac12c7337c706d729b6d upstream. |
| |
| 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> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/bcache/btree.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/md/bcache/btree.c |
| +++ b/drivers/md/bcache/btree.c |
| @@ -633,7 +633,7 @@ static int bch_mca_shrink(struct shrinke |
| 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; |