diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-07-18 17:21:21 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:24 -0400 |
commit | b1c9358a25eb0ed94c5bfc18ba5f9b00d51d8863 (patch) | |
tree | dfa934ae73d01391ac47485d04c6c99be93f8503 /fs | |
parent | b17657d0cf321af98fcb9d52748ca4d201284702 (diff) | |
download | linux-stable-b1c9358a25eb0ed94c5bfc18ba5f9b00d51d8863.tar.gz linux-stable-b1c9358a25eb0ed94c5bfc18ba5f9b00d51d8863.tar.bz2 linux-stable-b1c9358a25eb0ed94c5bfc18ba5f9b00d51d8863.zip |
bcachefs: Refactor __bch2_cut_front()
Minor cleanup - prep work for new key types for reflink
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/bcachefs/extents.c | 50 | ||||
-rw-r--r-- | fs/bcachefs/extents.h | 6 |
2 files changed, 30 insertions, 26 deletions
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index 4d3722cb7e33..60fe50368d21 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -707,44 +707,47 @@ void bch2_btree_ptr_to_text(struct printbuf *out, struct bch_fs *c, /* Extents */ -bool __bch2_cut_front(struct bpos where, struct bkey_s k) +void __bch2_cut_front(struct bpos where, struct bkey_s k) { - u64 len = 0; + u64 sub; if (bkey_cmp(where, bkey_start_pos(k.k)) <= 0) - return false; + return; EBUG_ON(bkey_cmp(where, k.k->p) > 0); - len = k.k->p.offset - where.offset; + sub = where.offset - bkey_start_offset(k.k); - BUG_ON(len > k.k->size); + k.k->size -= sub; - /* - * Don't readjust offset if the key size is now 0, because that could - * cause offset to point to the next bucket: - */ - if (!len) + if (!k.k->size) k.k->type = KEY_TYPE_deleted; - else if (bkey_extent_is_data(k.k)) { - struct bkey_s_extent e = bkey_s_to_extent(k); + + switch (k.k->type) { + case KEY_TYPE_deleted: + case KEY_TYPE_discard: + case KEY_TYPE_error: + case KEY_TYPE_cookie: + break; + case KEY_TYPE_extent: { + struct bkey_ptrs ptrs = bch2_bkey_ptrs(k); union bch_extent_entry *entry; bool seen_crc = false; - extent_for_each_entry(e, entry) { + bkey_extent_entry_for_each(ptrs, entry) { switch (extent_entry_type(entry)) { case BCH_EXTENT_ENTRY_ptr: if (!seen_crc) - entry->ptr.offset += e.k->size - len; + entry->ptr.offset += sub; break; case BCH_EXTENT_ENTRY_crc32: - entry->crc32.offset += e.k->size - len; + entry->crc32.offset += sub; break; case BCH_EXTENT_ENTRY_crc64: - entry->crc64.offset += e.k->size - len; + entry->crc64.offset += sub; break; case BCH_EXTENT_ENTRY_crc128: - entry->crc128.offset += e.k->size - len; + entry->crc128.offset += sub; break; case BCH_EXTENT_ENTRY_stripe_ptr: break; @@ -753,11 +756,14 @@ bool __bch2_cut_front(struct bpos where, struct bkey_s k) if (extent_entry_is_crc(entry)) seen_crc = true; } - } - k.k->size = len; - - return true; + break; + } + case KEY_TYPE_reservation: + break; + default: + BUG(); + } } bool bch2_cut_back(struct bpos where, struct bkey *k) @@ -771,8 +777,6 @@ bool bch2_cut_back(struct bpos where, struct bkey *k) len = where.offset - bkey_start_offset(k); - BUG_ON(len > k->size); - k->p = where; k->size = len; diff --git a/fs/bcachefs/extents.h b/fs/bcachefs/extents.h index fe92737354bd..549188c864ae 100644 --- a/fs/bcachefs/extents.h +++ b/fs/bcachefs/extents.h @@ -540,11 +540,11 @@ do { \ } \ } while (0) -bool __bch2_cut_front(struct bpos, struct bkey_s); +void __bch2_cut_front(struct bpos, struct bkey_s); -static inline bool bch2_cut_front(struct bpos where, struct bkey_i *k) +static inline void bch2_cut_front(struct bpos where, struct bkey_i *k) { - return __bch2_cut_front(where, bkey_i_to_s(k)); + __bch2_cut_front(where, bkey_i_to_s(k)); } bool bch2_cut_back(struct bpos, struct bkey *); |