aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/bcache
diff options
context:
space:
mode:
authorKent Overstreet <kmo@daterainc.com>2013-12-07 06:57:58 -0500
committerKent Overstreet <kmo@daterainc.com>2014-01-08 16:05:14 -0500
commit3b3e9e50dd951725130645660b526c4f367dcdee (patch)
tree860b547a43c62e0e1b578c5f3adabbb3a031d5bd /drivers/md/bcache
parente0a985a4b1b533311ec88c85177c45d036313f75 (diff)
bcache: Don't return -EINTR when insert finished
We need to return -EINTR after a split because we invalidated iterators (and freed the btree node) - but if we were finished inserting, we don't want to redo the traversal. Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Diffstat (limited to 'drivers/md/bcache')
-rw-r--r--drivers/md/bcache/btree.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
index 463d2800a955..98cc0a810a36 100644
--- a/drivers/md/bcache/btree.c
+++ b/drivers/md/bcache/btree.c
@@ -2002,8 +2002,10 @@ static int bch_btree_insert_node(struct btree *b, struct btree_op *op,
2002 return -EINTR; 2002 return -EINTR;
2003 } else { 2003 } else {
2004 /* Invalidated all iterators */ 2004 /* Invalidated all iterators */
2005 return btree_split(b, op, insert_keys, replace_key) ?: 2005 int ret = btree_split(b, op, insert_keys, replace_key);
2006 -EINTR; 2006
2007 return bch_keylist_empty(insert_keys) ?
2008 0 : ret ?: -EINTR;
2007 } 2009 }
2008 } else { 2010 } else {
2009 BUG_ON(write_block(b) != btree_bset_last(b)); 2011 BUG_ON(write_block(b) != btree_bset_last(b));