diff options
| author | Kent Overstreet <kmo@daterainc.com> | 2013-12-07 06:57:58 -0500 |
|---|---|---|
| committer | Kent Overstreet <kmo@daterainc.com> | 2014-01-08 16:05:14 -0500 |
| commit | 3b3e9e50dd951725130645660b526c4f367dcdee (patch) | |
| tree | 860b547a43c62e0e1b578c5f3adabbb3a031d5bd | |
| parent | e0a985a4b1b533311ec88c85177c45d036313f75 (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>
| -rw-r--r-- | drivers/md/bcache/btree.c | 6 |
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)); |
