summaryrefslogtreecommitdiff
path: root/fs/bcachefs/extents.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-11-27 18:30:56 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:12 -0400
commit5b8a9227f8a4acd9652d6d89a608fbf4c39c6f44 (patch)
tree0a08dcdce73ae02a8a30b9a3cc8ef6876ca1c192 /fs/bcachefs/extents.h
parent9d11058a789a86eb580d2b0684604a1a5d795fe3 (diff)
downloadlwn-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.h39
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 */