diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-11-04 12:53:59 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-11-04 12:53:59 -0500 |
commit | 6016d33b801a5fe13e86e5be3abf68ed166c0796 (patch) | |
tree | 47a42030c705d19e6b74ea785e82f123a10015b0 /libbcachefs/btree_locking.h | |
parent | 61bc316a4da4831d8812eb5051732cca27652d8d (diff) |
Update bcachefs sources to 9e76e8d98c bcachefs: Fix uninitialized field in hash_check_init()
Diffstat (limited to 'libbcachefs/btree_locking.h')
-rw-r--r-- | libbcachefs/btree_locking.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libbcachefs/btree_locking.h b/libbcachefs/btree_locking.h index 592c3b4e..aaad2d28 100644 --- a/libbcachefs/btree_locking.h +++ b/libbcachefs/btree_locking.h @@ -203,6 +203,24 @@ static inline bool bch2_btree_node_relock(struct btree_iter *iter, __bch2_btree_node_relock(iter, level); } +/* + * Updates the saved lock sequence number, so that bch2_btree_node_relock() will + * succeed: + */ +static inline void +bch2_btree_node_unlock_write_inlined(struct btree *b, struct btree_iter *iter) +{ + struct btree_iter *linked; + + EBUG_ON(iter->l[b->level].b != b); + EBUG_ON(iter->l[b->level].lock_seq + 1 != b->lock.state.seq); + + trans_for_each_iter_with_node(iter->trans, b, linked) + linked->l[b->level].lock_seq += 2; + + six_unlock_write(&b->lock); +} + void bch2_btree_node_unlock_write(struct btree *, struct btree_iter *); void __bch2_btree_node_lock_write(struct btree *, struct btree_iter *); |