diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2015-08-21 00:32:29 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-18 20:22:27 -0900 |
commit | 0689fc90f4037356b73afa46061528b28bf1b9ad (patch) | |
tree | c272bc86a9905d35d5c93f52d4d52c4515d78f85 | |
parent | 8397f6bda89b7b255141a073eaa4c6f2468230f4 (diff) |
bcache: bch_extent_drop_ptr()
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r-- | drivers/md/bcache/extents.c | 9 | ||||
-rw-r--r-- | drivers/md/bcache/extents.h | 9 |
2 files changed, 12 insertions, 6 deletions
diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c index cd4e1117d667..86ecb8ee3d80 100644 --- a/drivers/md/bcache/extents.c +++ b/drivers/md/bcache/extents.c @@ -129,12 +129,9 @@ void bch_extent_drop_stale(struct cache_set *c, struct bkey *k) rcu_read_lock(); while (i < bch_extent_ptrs(k)) - if (should_drop_ptr(c, k, i)) { - bch_set_extent_ptrs(k, bch_extent_ptrs(k) - 1); - memmove(&k->val[i], - &k->val[i + 1], - (bch_extent_ptrs(k) - i) * sizeof(u64)); - } else + if (should_drop_ptr(c, k, i)) + bch_extent_drop_ptr(k, i); + else i++; rcu_read_unlock(); diff --git a/drivers/md/bcache/extents.h b/drivers/md/bcache/extents.h index 9a7f312a555c..556e16b13082 100644 --- a/drivers/md/bcache/extents.h +++ b/drivers/md/bcache/extents.h @@ -39,6 +39,15 @@ static inline void bch_set_extent_ptrs(struct bkey *k, unsigned i) bch_set_val_u64s(k, i); } +static inline void bch_extent_drop_ptr(struct bkey *k, unsigned ptr) +{ + BUG_ON(ptr >= bch_extent_ptrs(k)); + bch_set_extent_ptrs(k, bch_extent_ptrs(k) - 1); + memmove(&k->val[ptr], + &k->val[ptr + 1], + (bch_extent_ptrs(k) - ptr) * sizeof(u64)); +} + bool bch_cut_front(const struct bkey *, struct bkey *); bool bch_cut_back(const struct bkey *, struct bkey *); |