Просмотр исходного кода

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>
Kent Overstreet 12 лет назад
Родитель
Сommit
3b3e9e50dd
1 измененных файлов с 4 добавлено и 2 удалено
  1. 4 2
      drivers/md/bcache/btree.c

+ 4 - 2
drivers/md/bcache/btree.c

@@ -2002,8 +2002,10 @@ static int bch_btree_insert_node(struct btree *b, struct btree_op *op,
 			return -EINTR;
 		} else {
 			/* Invalidated all iterators */
-			return btree_split(b, op, insert_keys, replace_key) ?:
-				-EINTR;
+			int ret = btree_split(b, op, insert_keys, replace_key);
+
+			return bch_keylist_empty(insert_keys) ?
+				0 : ret ?: -EINTR;
 		}
 	} else {
 		BUG_ON(write_block(b) != btree_bset_last(b));