diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-05-24 15:11:10 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-18 21:39:32 -0900 |
commit | 60f5b5a0e67e6ab36955a13f0e429852299fbb99 (patch) | |
tree | f97a6a90f6bbaa115ac662b207bdb242938429da | |
parent | cd4d470fc3808ae3521ea34c440b4129fac87cd1 (diff) |
bcache: bch_btree_iter_init_copy()
-rw-r--r-- | drivers/md/bcache/btree_iter.c | 24 | ||||
-rw-r--r-- | drivers/md/bcache/btree_iter.h | 2 |
2 files changed, 26 insertions, 0 deletions
diff --git a/drivers/md/bcache/btree_iter.c b/drivers/md/bcache/btree_iter.c index 96f696783f60..fb565016e703 100644 --- a/drivers/md/bcache/btree_iter.c +++ b/drivers/md/bcache/btree_iter.c @@ -698,6 +698,21 @@ void __bch_btree_iter_init(struct btree_iter *iter, struct cache_set *c, iter->next = iter; } +int bch_btree_iter_unlink(struct btree_iter *iter) +{ + struct btree_iter *linked; + int ret = bch_btree_iter_unlock(iter); + + for_each_linked_btree_iter(iter, linked) + if (linked->next == iter) { + linked->next = iter->next; + iter->next = iter; + return ret; + } + + BUG(); +} + void bch_btree_iter_link(struct btree_iter *iter, struct btree_iter *linked) { BUG_ON(linked->next != linked); @@ -705,3 +720,12 @@ void bch_btree_iter_link(struct btree_iter *iter, struct btree_iter *linked) linked->next = iter->next; iter->next = linked; } + +void bch_btree_iter_init_copy(struct btree_iter *dst, struct btree_iter *src) +{ + *dst = *src; + dst->next = dst; + dst->nodes_locked = 0; + dst->nodes_intent_locked = 0; + bch_btree_iter_link(src, dst); +} diff --git a/drivers/md/bcache/btree_iter.h b/drivers/md/bcache/btree_iter.h index 312283a44507..2a4b9259804e 100644 --- a/drivers/md/bcache/btree_iter.h +++ b/drivers/md/bcache/btree_iter.h @@ -151,7 +151,9 @@ static inline void bch_btree_iter_init_intent(struct btree_iter *iter, __bch_btree_iter_init(iter, c, btree_id, pos, 0); } +int bch_btree_iter_unlink(struct btree_iter *); void bch_btree_iter_link(struct btree_iter *, struct btree_iter *); +void bch_btree_iter_init_copy(struct btree_iter *, struct btree_iter *); static inline struct bpos btree_type_successor(enum btree_id id, struct bpos pos) |