diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-07-12 23:30:08 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-07-16 03:46:14 -0400 |
commit | 3f92ebde5a92f7ffca8195713e9286fa1f6e41af (patch) | |
tree | 376ab32f857dd95ddb72ff87a42e842e80e88a20 | |
parent | 821d66df4406ab1be7de8cc79e5ae0ffae265ff0 (diff) |
bcachefs: improve bch2_btree_iter_copy()
so as to generate fewer transaction restarts
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | fs/bcachefs/btree_iter.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 097b68e07399..8e7907aafd4d 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1580,8 +1580,13 @@ void bch2_btree_iter_link(struct btree_iter *iter, struct btree_iter *new) void bch2_btree_iter_copy(struct btree_iter *dst, struct btree_iter *src) { + unsigned i; + __bch2_btree_iter_unlock(dst); memcpy(dst, src, offsetof(struct btree_iter, next)); - dst->nodes_locked = dst->nodes_intent_locked = 0; - dst->uptodate = BTREE_ITER_NEED_RELOCK; + + for (i = 0; i < BTREE_MAX_DEPTH; i++) + if (btree_node_locked(dst, i)) + six_lock_increment(&dst->l[i].b->lock, + __btree_lock_want(dst, i)); } |