summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-05-24 15:11:10 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-01-18 21:39:32 -0900
commit60f5b5a0e67e6ab36955a13f0e429852299fbb99 (patch)
treef97a6a90f6bbaa115ac662b207bdb242938429da
parentcd4d470fc3808ae3521ea34c440b4129fac87cd1 (diff)
bcache: bch_btree_iter_init_copy()
-rw-r--r--drivers/md/bcache/btree_iter.c24
-rw-r--r--drivers/md/bcache/btree_iter.h2
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)