summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_iter.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-07-11 13:56:18 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-07-11 13:57:11 -0400
commit700d013b5280b72a1fb3830d8f70ecce5decb0ab (patch)
tree9b74fdad5894ac8a9af1b0a0ab9a69ed7a3e32ee /libbcachefs/btree_iter.c
parent8e6f35cbf344dbefbfe6420e06a47f64079f72ad (diff)
Update bcachefs sources to 400c2f8d96 bcachefs: Mask out unknown compat features when going read-write
Diffstat (limited to 'libbcachefs/btree_iter.c')
-rw-r--r--libbcachefs/btree_iter.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libbcachefs/btree_iter.c b/libbcachefs/btree_iter.c
index e11270e..0444dbd 100644
--- a/libbcachefs/btree_iter.c
+++ b/libbcachefs/btree_iter.c
@@ -486,6 +486,8 @@ void bch2_trans_unlock(struct btree_trans *trans)
trans_for_each_iter(trans, iter)
__bch2_btree_iter_unlock(iter);
+
+ BUG_ON(lock_class_is_held(&bch2_btree_node_lock_key));
}
/* Btree iterator: */
@@ -2293,6 +2295,22 @@ inline void bch2_trans_unlink_iters(struct btree_trans *trans)
}
}
+/**
+ * bch2_trans_reset() - reset a transaction after a interrupted attempt
+ * @trans: transaction to reset
+ * @flags: transaction reset flags.
+ *
+ * While iterating over nodes or updating nodes a attempt to lock a btree
+ * node may return EINTR when the trylock fails. When this occurs
+ * bch2_trans_reset() or bch2_trans_begin() should be called and the
+ * transaction retried.
+ *
+ * Transaction reset flags include:
+ *
+ * - TRANS_RESET_NOUNLOCK - Do not attempt to unlock and reschedule the
+ * transaction.
+ * - TRANS_RESET_NOTRAVERSE - Do not traverse all linked iters.
+ */
void bch2_trans_reset(struct btree_trans *trans, unsigned flags)
{
struct btree_iter *iter;