From 084ab8bc5d42f05351805d428ea22ad9d3e586db Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 4 Dec 2018 09:33:00 -0500 Subject: bcachefs: fix bch2_extent_ptr_decoded_append() --- fs/bcachefs/extents.c | 16 +++++++++++++++- fs/bcachefs/extents.h | 12 ------------ 2 files changed, 15 insertions(+), 13 deletions(-) (limited to 'fs/bcachefs') diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index dc3fbfb6aa7e..6ae5481889e0 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -1495,6 +1495,18 @@ void bch2_extent_crc_append(struct bkey_i_extent *e, __extent_entry_push(e); } +static inline void __extent_entry_insert(struct bkey_i_extent *e, + union bch_extent_entry *dst, + union bch_extent_entry *new) +{ + union bch_extent_entry *end = extent_entry_last(extent_i_to_s(e)); + + memmove_u64s_up((u64 *) dst + extent_entry_u64s(new), + dst, (u64 *) end - (u64 *) dst); + e->k.u64s += extent_entry_u64s(new); + memcpy(dst, new, extent_entry_bytes(new)); +} + void bch2_extent_ptr_decoded_append(struct bkey_i_extent *e, struct extent_ptr_decoded *p) { @@ -1503,8 +1515,10 @@ void bch2_extent_ptr_decoded_append(struct bkey_i_extent *e, unsigned i; extent_for_each_crc(extent_i_to_s(e), crc, pos) - if (!bch2_crc_unpacked_cmp(crc, p->crc)) + if (!bch2_crc_unpacked_cmp(crc, p->crc)) { + pos = extent_entry_next(pos); goto found; + } bch2_extent_crc_append(e, p->crc); pos = extent_entry_last(extent_i_to_s(e)); diff --git a/fs/bcachefs/extents.h b/fs/bcachefs/extents.h index e6e9c3078dd2..0e6f4a0bbcab 100644 --- a/fs/bcachefs/extents.h +++ b/fs/bcachefs/extents.h @@ -509,18 +509,6 @@ void bch2_extent_crc_append(struct bkey_i_extent *, void bch2_extent_ptr_decoded_append(struct bkey_i_extent *, struct extent_ptr_decoded *); -static inline void __extent_entry_insert(struct bkey_i_extent *e, - union bch_extent_entry *dst, - union bch_extent_entry *new) -{ - union bch_extent_entry *end = extent_entry_last(extent_i_to_s(e)); - - memmove_u64s_up((u64 *) dst + extent_entry_u64s(new), - dst, (u64 *) end - (u64 *) dst); - e->k.u64s += extent_entry_u64s(new); - memcpy(dst, new, extent_entry_bytes(new)); -} - static inline void __extent_entry_push(struct bkey_i_extent *e) { union bch_extent_entry *entry = extent_entry_last(extent_i_to_s(e)); -- cgit v1.2.3