diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-11-27 18:30:56 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:12 -0400 |
commit | 5b8a9227f8a4acd9652d6d89a608fbf4c39c6f44 (patch) | |
tree | 0a08dcdce73ae02a8a30b9a3cc8ef6876ca1c192 /fs/bcachefs/extents.h | |
parent | 9d11058a789a86eb580d2b0684604a1a5d795fe3 (diff) | |
download | lwn-5b8a9227f8a4acd9652d6d89a608fbf4c39c6f44.tar.gz lwn-5b8a9227f8a4acd9652d6d89a608fbf4c39c6f44.zip |
bcachefs: Split out bkey_sort.c
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/extents.h')
-rw-r--r-- | fs/bcachefs/extents.h | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/fs/bcachefs/extents.h b/fs/bcachefs/extents.h index 15865b27847d..389604f25630 100644 --- a/fs/bcachefs/extents.h +++ b/fs/bcachefs/extents.h @@ -7,13 +7,8 @@ #include "extents_types.h" struct bch_fs; -struct journal_res; -struct btree_node_iter; -struct btree_node_iter_large; struct btree_insert; struct btree_insert_entry; -struct bch_devs_mask; -union bch_extent_crc; const char *bch2_btree_ptr_invalid(const struct bch_fs *, struct bkey_s_c); void bch2_btree_ptr_debugcheck(struct bch_fs *, struct btree *, @@ -46,14 +41,6 @@ enum merge_result bch2_extent_merge(struct bch_fs *, struct btree *, .is_extents = true, \ } -struct btree_nr_keys bch2_key_sort_fix_overlapping(struct bset *, - struct btree *, - struct btree_node_iter_large *); -struct btree_nr_keys bch2_extent_sort_fix_overlapping(struct bch_fs *c, - struct bset *, - struct btree *, - struct btree_node_iter_large *); - void bch2_mark_io_failure(struct bch_io_failures *, struct extent_ptr_decoded *); int bch2_btree_pick_ptr(struct bch_fs *, const struct btree *, @@ -506,10 +493,34 @@ do { \ } \ } while (0) -bool bch2_cut_front(struct bpos, struct bkey_i *); +bool __bch2_cut_front(struct bpos, struct bkey_s); + +static inline bool bch2_cut_front(struct bpos where, struct bkey_i *k) +{ + return __bch2_cut_front(where, bkey_i_to_s(k)); +} + bool bch2_cut_back(struct bpos, struct bkey *); void bch2_key_resize(struct bkey *, unsigned); +/* + * In extent_sort_fix_overlapping(), insert_fixup_extent(), + * extent_merge_inline() - we're modifying keys in place that are packed. To do + * that we have to unpack the key, modify the unpacked key - then this + * copies/repacks the unpacked to the original as necessary. + */ +static inline void extent_save(struct btree *b, struct bkey_packed *dst, + struct bkey *src) +{ + struct bkey_format *f = &b->format; + struct bkey_i *dst_unpacked; + + if ((dst_unpacked = packed_to_bkey(dst))) + dst_unpacked->k = *src; + else + BUG_ON(!bch2_bkey_pack_key(dst, src, f)); +} + int bch2_check_range_allocated(struct bch_fs *, struct bpos, u64); #endif /* _BCACHEFS_EXTENTS_H */ |