summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-03-18 16:18:39 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2019-03-18 16:21:52 -0400
commitb8f6c60d8bb50abb4b47dfca8fccde1074f5578c (patch)
tree67d4513f9b06834c3b50c3da4abe7375c8aa1b63
parenta5ccfdfd45ca544b8cdaf91aa5052efb70af4ac9 (diff)
bcachefs: BTREE_INSERT_ATOMIC must be used for extents now
-rw-r--r--fs/bcachefs/btree_update_leaf.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index fb16da18e769..3617dc45ad1c 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -405,9 +405,10 @@ bch2_deferred_update_alloc(struct bch_fs *c,
/* Normal update interface: */
-static inline void btree_insert_entry_checks(struct bch_fs *c,
+static inline void btree_insert_entry_checks(struct btree_trans *trans,
struct btree_insert_entry *i)
{
+ struct bch_fs *c = trans->c;
enum btree_id btree_id = !i->deferred
? i->iter->btree_id
: i->d->btree_id;
@@ -418,6 +419,9 @@ static inline void btree_insert_entry_checks(struct bch_fs *c,
EBUG_ON((i->iter->flags & BTREE_ITER_IS_EXTENTS) &&
!bch2_extent_is_atomic(i->k, i->iter));
+ EBUG_ON((i->iter->flags & BTREE_ITER_IS_EXTENTS) &&
+ !(trans->flags & BTREE_INSERT_ATOMIC));
+
bch2_btree_iter_verify_locks(i->iter);
}
@@ -839,7 +843,7 @@ int bch2_trans_commit(struct btree_trans *trans,
bubble_sort(trans->updates, trans->nr_updates, btree_trans_cmp);
trans_for_each_update(trans, i)
- btree_insert_entry_checks(c, i);
+ btree_insert_entry_checks(trans, i);
if (unlikely(!(trans->flags & BTREE_INSERT_NOCHECK_RW) &&
!percpu_ref_tryget(&c->writes)))
@@ -953,7 +957,10 @@ int bch2_btree_delete_range(struct bch_fs *c, enum btree_id id,
bch2_trans_update(&trans, BTREE_INSERT_ENTRY(iter, &delete));
ret = bch2_trans_commit(&trans, NULL, journal_seq,
+ BTREE_INSERT_ATOMIC|
BTREE_INSERT_NOFAIL);
+ if (ret == -EINTR)
+ ret = 0;
if (ret)
break;