]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_types.h
Update bcachefs sources to 6d44812757dd bcachefs: BCH_IOCTL_FSCK_ONLINE
[bcachefs-tools-debian] / libbcachefs / btree_types.h
index 4b9cc61a4a6098f122c4d04a7657699ec20959dd..78d9f585db4545312739490725ef71ee19af3b46 100644 (file)
@@ -5,7 +5,7 @@
 #include <linux/list.h>
 #include <linux/rhashtable.h>
 
-//#include "bkey_methods.h"
+#include "btree_key_cache_types.h"
 #include "buckets_types.h"
 #include "darray.h"
 #include "errcode.h"
@@ -162,18 +162,8 @@ struct btree_cache {
        /* Number of elements in live + freeable lists */
        unsigned                used;
        unsigned                reserve;
-       unsigned                freed;
-       unsigned                not_freed_lock_intent;
-       unsigned                not_freed_lock_write;
-       unsigned                not_freed_dirty;
-       unsigned                not_freed_read_in_flight;
-       unsigned                not_freed_write_in_flight;
-       unsigned                not_freed_noevict;
-       unsigned                not_freed_write_blocked;
-       unsigned                not_freed_will_make_reachable;
-       unsigned                not_freed_access_bit;
        atomic_t                dirty;
-       struct shrinker         shrink;
+       struct shrinker         *shrink;
 
        /*
         * If we need to allocate memory for a new btree node and that
@@ -195,33 +185,32 @@ struct btree_node_iter {
  * Iterate over all possible positions, synthesizing deleted keys for holes:
  */
 static const __maybe_unused u16 BTREE_ITER_SLOTS               = 1 << 0;
-static const __maybe_unused u16 BTREE_ITER_ALL_LEVELS          = 1 << 1;
 /*
  * Indicates that intent locks should be taken on leaf nodes, because we expect
  * to be doing updates:
  */
-static const __maybe_unused u16 BTREE_ITER_INTENT              = 1 << 2;
+static const __maybe_unused u16 BTREE_ITER_INTENT              = 1 << 1;
 /*
  * Causes the btree iterator code to prefetch additional btree nodes from disk:
  */
-static const __maybe_unused u16 BTREE_ITER_PREFETCH            = 1 << 3;
+static const __maybe_unused u16 BTREE_ITER_PREFETCH            = 1 << 2;
 /*
  * Used in bch2_btree_iter_traverse(), to indicate whether we're searching for
  * @pos or the first key strictly greater than @pos
  */
-static const __maybe_unused u16 BTREE_ITER_IS_EXTENTS          = 1 << 4;
-static const __maybe_unused u16 BTREE_ITER_NOT_EXTENTS         = 1 << 5;
-static const __maybe_unused u16 BTREE_ITER_CACHED              = 1 << 6;
-static const __maybe_unused u16 BTREE_ITER_WITH_KEY_CACHE      = 1 << 7;
-static const __maybe_unused u16 BTREE_ITER_WITH_UPDATES                = 1 << 8;
-static const __maybe_unused u16 BTREE_ITER_WITH_JOURNAL                = 1 << 9;
-static const __maybe_unused u16 __BTREE_ITER_ALL_SNAPSHOTS     = 1 << 10;
-static const __maybe_unused u16 BTREE_ITER_ALL_SNAPSHOTS       = 1 << 11;
-static const __maybe_unused u16 BTREE_ITER_FILTER_SNAPSHOTS    = 1 << 12;
-static const __maybe_unused u16 BTREE_ITER_NOPRESERVE          = 1 << 13;
-static const __maybe_unused u16 BTREE_ITER_CACHED_NOFILL       = 1 << 14;
-static const __maybe_unused u16 BTREE_ITER_KEY_CACHE_FILL      = 1 << 15;
-#define __BTREE_ITER_FLAGS_END                                        16
+static const __maybe_unused u16 BTREE_ITER_IS_EXTENTS          = 1 << 3;
+static const __maybe_unused u16 BTREE_ITER_NOT_EXTENTS         = 1 << 4;
+static const __maybe_unused u16 BTREE_ITER_CACHED              = 1 << 5;
+static const __maybe_unused u16 BTREE_ITER_WITH_KEY_CACHE      = 1 << 6;
+static const __maybe_unused u16 BTREE_ITER_WITH_UPDATES                = 1 << 7;
+static const __maybe_unused u16 BTREE_ITER_WITH_JOURNAL                = 1 << 8;
+static const __maybe_unused u16 __BTREE_ITER_ALL_SNAPSHOTS     = 1 << 9;
+static const __maybe_unused u16 BTREE_ITER_ALL_SNAPSHOTS       = 1 << 10;
+static const __maybe_unused u16 BTREE_ITER_FILTER_SNAPSHOTS    = 1 << 11;
+static const __maybe_unused u16 BTREE_ITER_NOPRESERVE          = 1 << 12;
+static const __maybe_unused u16 BTREE_ITER_CACHED_NOFILL       = 1 << 13;
+static const __maybe_unused u16 BTREE_ITER_KEY_CACHE_FILL      = 1 << 14;
+#define __BTREE_ITER_FLAGS_END                                        15
 
 enum btree_path_uptodate {
        BTREE_ITER_UPTODATE             = 0,
@@ -298,8 +287,7 @@ struct btree_iter {
        struct btree_path       *key_cache_path;
 
        enum btree_id           btree_id:8;
-       unsigned                min_depth:3;
-       unsigned                advanced:1;
+       u8                      min_depth;
 
        /* btree_iter_copy starts here: */
        u16                     flags;
@@ -316,37 +304,11 @@ struct btree_iter {
 
        /* BTREE_ITER_WITH_JOURNAL: */
        size_t                  journal_idx;
-       struct bpos             journal_pos;
 #ifdef TRACK_PATH_ALLOCATED
        unsigned long           ip_allocated;
 #endif
 };
 
-struct btree_key_cache_freelist {
-       struct bkey_cached      *objs[16];
-       unsigned                nr;
-};
-
-struct btree_key_cache {
-       struct mutex            lock;
-       struct rhashtable       table;
-       bool                    table_init_done;
-       struct list_head        freed_pcpu;
-       struct list_head        freed_nonpcpu;
-       struct shrinker         shrink;
-       unsigned                shrink_iter;
-       struct btree_key_cache_freelist __percpu *pcpu_freed;
-
-       atomic_long_t           nr_freed;
-       atomic_long_t           nr_keys;
-       atomic_long_t           nr_dirty;
-};
-
-struct bkey_cached_key {
-       u32                     btree_id;
-       struct bpos             pos;
-} __packed __aligned(4);
-
 #define BKEY_CACHED_ACCESSED           0
 #define BKEY_CACHED_DIRTY              1
 
@@ -362,7 +324,6 @@ struct bkey_cached {
        struct rhash_head       hash;
        struct list_head        list;
 
-       struct journal_preres   res;
        struct journal_entry_pin journal;
        u64                     seq;
 
@@ -392,7 +353,6 @@ struct btree_insert_entry {
        u8                      old_btree_u64s;
        struct bkey_i           *k;
        struct btree_path       *path;
-       u64                     seq;
        /* key being overwritten: */
        struct bkey             old_k;
        const struct bch_val    *old_v;
@@ -439,8 +399,8 @@ struct btree_trans {
        bool                    memory_allocation_failure:1;
        bool                    journal_transaction_names:1;
        bool                    journal_replay_not_finished:1;
-       bool                    is_initial_gc:1;
        bool                    notrace_relock_fail:1;
+       bool                    write_locked:1;
        enum bch_errcode        restarted:16;
        u32                     restart_count;
        unsigned long           last_begin_ip;
@@ -454,7 +414,7 @@ struct btree_trans {
        unsigned                extra_journal_res;
        unsigned                nr_max_paths;
 
-       u64                     paths_allocated;
+       unsigned long           paths_allocated[BITS_TO_LONGS(BTREE_ITER_MAX)];
 
        unsigned                mem_top;
        unsigned                mem_max;
@@ -472,11 +432,9 @@ struct btree_trans {
        struct journal_entry_pin *journal_pin;
 
        struct journal_res      journal_res;
-       struct journal_preres   journal_preres;
        u64                     *journal_seq;
        struct disk_reservation *disk_res;
        unsigned                journal_u64s;
-       unsigned                journal_preres_u64s;
        struct replicas_delta_list *fs_usage_deltas;
 };
 
@@ -717,6 +675,17 @@ static inline bool btree_type_has_snapshots(enum btree_id id)
        return (1U << id) & mask;
 }
 
+static inline bool btree_type_has_snapshot_field(enum btree_id id)
+{
+       const unsigned mask = 0
+#define x(name, nr, flags, ...)        |((!!((flags) & (BTREE_ID_SNAPSHOT_FIELD|BTREE_ID_SNAPSHOTS))) << nr)
+       BCH_BTREE_IDS()
+#undef x
+       ;
+
+       return (1U << id) & mask;
+}
+
 static inline bool btree_type_has_ptrs(enum btree_id id)
 {
        const unsigned mask = 0