Skip to contentSkip to conversation

bcache: Make sure to pass GFP_WAIT to mempool_alloc()

PATCH In review Gabriel de Perthuis 2 participants 2 messages Jan 15, 2015 bcache (block layer cache)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bcache: Make sure to pass GFP_WAIT to mempool_alloc()

this was very wrong - mempool_alloc() only guarantees success with GFP_WAIT. bcache uses GFP_NOWAIT in various other places where we have a fallback, circuits must've gotten crossed when writing this code or something.

---

The bug was introduced in v3.11, fixed in v3.17.

Jens mentioned bcache has many stable@ candidates previously: https://lkml.org/lkml/2014/9/5/360

I'm cherry-picking this fix because I was getting crashes.

---
 drivers/md/bcache/btree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/bcache/btree.c +1 -1
index 9dd9f1c..e538d45 100644
@@ -200,11 +200,11 @@ void bch_btree_node_read_done(struct btree *b)
 {
 	const char *err = "bad btree header";
 	struct bset *i = btree_bset_first(b);
 	struct btree_iter *iter;
-	iter = mempool_alloc(b->c->fill_iter, GFP_NOWAIT);
+	iter = mempool_alloc(b->c->fill_iter, GFP_NOIO);
 	iter->size = b->c->sb.bucket_size / b->c->sb.block_size;
 	iter->used = 0;
  #ifdef CONFIG_BCACHE_DEBUG
 	iter->b = &b->keys;
Signature · 1 line
2.2.0.71.g3365589
#1 lore raw
Quoted 9 lines · Gabriel de Perthuis

this was very wrong - mempool_alloc() only guarantees success with GFP_WAIT. bcache uses GFP_NOWAIT in various other places where we have a fallback, circuits must've gotten crossed when writing this code or something.

---

The bug was introduced in v3.11, fixed in v3.17.

Quoted 8 lines

Jens mentioned bcache has many stable@ candidates previously:
https://lkml.org/lkml/2014/9/5/360

I'm cherry-picking this fix because I was getting crashes.

---
 drivers/md/bcache/btree.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

What exactly is the commit id for this in Linus's tree?

thanks,

greg k-h