diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2015-08-21 00:32:29 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2016-10-07 09:22:58 -0800 |
commit | 27395f46e33e11953535edca2180ee84cdd2514b (patch) | |
tree | 330ab972d6ed7b98b44fbecd627191f18a614c40 | |
parent | 91088ad57f26df603dbf24826e32b405de8c78a1 (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 *); |