]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bkey_methods.h
Add a subcommand for resizing the journal
[bcachefs-tools-debian] / libbcachefs / bkey_methods.h
index 2d526f560caf2bd8f9c15a038c804bbd86958c4e..0bca725ae3b8c5d3d719cc878c07bb1812cc6802 100644 (file)
@@ -1,35 +1,15 @@
-#ifndef _BCACHE_BKEY_METHODS_H
-#define _BCACHE_BKEY_METHODS_H
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BCACHEFS_BKEY_METHODS_H
+#define _BCACHEFS_BKEY_METHODS_H
 
 #include "bkey.h"
 
-#define DEF_BTREE_ID(kwd, val, name) BKEY_TYPE_##kwd = val,
-
-enum bkey_type {
-       DEFINE_BCH_BTREE_IDS()
-       BKEY_TYPE_BTREE,
-};
-
-/* Type of a key in btree @id at level @level: */
-static inline enum bkey_type bkey_type(unsigned level, enum btree_id id)
-{
-       return level ? BKEY_TYPE_BTREE : (enum bkey_type) id;
-}
-
-static inline bool btree_type_has_ptrs(enum bkey_type type)
-{
-       switch (type) {
-       case BKEY_TYPE_BTREE:
-       case BKEY_TYPE_EXTENTS:
-               return true;
-       default:
-               return false;
-       }
-}
-
 struct bch_fs;
 struct btree;
 struct bkey;
+enum btree_node_type;
+
+extern const char * const bch2_bkey_types[];
 
 enum merge_result {
        BCH_MERGE_NOMERGE,
@@ -42,41 +22,61 @@ enum merge_result {
        BCH_MERGE_MERGE,
 };
 
-typedef bool (*key_filter_fn)(struct bch_fs *, struct btree *,
-                             struct bkey_s);
-typedef enum merge_result (*key_merge_fn)(struct bch_fs *,
-                                         struct btree *,
-                                         struct bkey_i *, struct bkey_i *);
-
 struct bkey_ops {
        /* Returns reason for being invalid if invalid, else NULL: */
        const char *    (*key_invalid)(const struct bch_fs *,
                                       struct bkey_s_c);
-       void            (*key_debugcheck)(struct bch_fs *, struct btree *,
-                                         struct bkey_s_c);
-       void            (*val_to_text)(struct bch_fs *, char *,
-                                      size_t, struct bkey_s_c);
-       void            (*swab)(const struct bkey_format *, struct bkey_packed *);
-       key_filter_fn   key_normalize;
-       key_merge_fn    key_merge;
-       bool            is_extents;
+       void            (*key_debugcheck)(struct bch_fs *, struct bkey_s_c);
+       void            (*val_to_text)(struct printbuf *, struct bch_fs *,
+                                      struct bkey_s_c);
+       void            (*swab)(struct bkey_s);
+       bool            (*key_normalize)(struct bch_fs *, struct bkey_s);
+       enum merge_result (*key_merge)(struct bch_fs *,
+                                      struct bkey_s, struct bkey_s);
+       void            (*compat)(enum btree_id id, unsigned version,
+                                 unsigned big_endian, int write,
+                                 struct bkey_s);
 };
 
-const char *bch2_bkey_invalid(struct bch_fs *, enum bkey_type, struct bkey_s_c);
-const char *bch2_btree_bkey_invalid(struct bch_fs *, struct btree *,
-                                   struct bkey_s_c);
+const char *bch2_bkey_val_invalid(struct bch_fs *, struct bkey_s_c);
+const char *__bch2_bkey_invalid(struct bch_fs *, struct bkey_s_c,
+                               enum btree_node_type);
+const char *bch2_bkey_invalid(struct bch_fs *, struct bkey_s_c,
+                             enum btree_node_type);
+const char *bch2_bkey_in_btree_node(struct btree *, struct bkey_s_c);
 
 void bch2_bkey_debugcheck(struct bch_fs *, struct btree *, struct bkey_s_c);
-char *bch2_val_to_text(struct bch_fs *, enum bkey_type,
-                      char *, size_t, struct bkey_s_c);
-char *bch2_bkey_val_to_text(struct bch_fs *, enum bkey_type,
-                           char *, size_t, struct bkey_s_c);
 
-void bch2_bkey_swab(enum bkey_type, const struct bkey_format *,
-                   struct bkey_packed *);
+void bch2_bpos_to_text(struct printbuf *, struct bpos);
+void bch2_bkey_to_text(struct printbuf *, const struct bkey *);
+void bch2_val_to_text(struct printbuf *, struct bch_fs *,
+                     struct bkey_s_c);
+void bch2_bkey_val_to_text(struct printbuf *, struct bch_fs *,
+                          struct bkey_s_c);
+
+void bch2_bkey_swab_val(struct bkey_s);
+
+bool bch2_bkey_normalize(struct bch_fs *, struct bkey_s);
+
+enum merge_result bch2_bkey_merge(struct bch_fs *,
+                                 struct bkey_s, struct bkey_s);
 
-extern const struct bkey_ops *bch2_bkey_ops[];
+void bch2_bkey_renumber(enum btree_node_type, struct bkey_packed *, int);
 
-#undef DEF_BTREE_ID
+void __bch2_bkey_compat(unsigned, enum btree_id, unsigned, unsigned,
+                       int, struct bkey_format *, struct bkey_packed *);
+
+static inline void bch2_bkey_compat(unsigned level, enum btree_id btree_id,
+                              unsigned version, unsigned big_endian,
+                              int write,
+                              struct bkey_format *f,
+                              struct bkey_packed *k)
+{
+       if (version < bcachefs_metadata_version_current ||
+           big_endian != CPU_BIG_ENDIAN)
+               __bch2_bkey_compat(level, btree_id, version,
+                                  big_endian, write, f, k);
+
+}
 
-#endif /* _BCACHE_BKEY_METHODS_H */
+#endif /* _BCACHEFS_BKEY_METHODS_H */