summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-12-04 09:33:00 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-12-27 11:38:35 -0500
commit084ab8bc5d42f05351805d428ea22ad9d3e586db (patch)
treea24884bc6226743ee15a706c737e24095086c9a0
parent24dad39bd6d7628ab5aadeb4415f2a96411a12c0 (diff)
bcachefs: fix bch2_extent_ptr_decoded_append()
-rw-r--r--fs/bcachefs/extents.c16
-rw-r--r--fs/bcachefs/extents.h12
2 files changed, 15 insertions, 13 deletions
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));