]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bcachefs.h
Update bcachefs sources to 39a84c99af2d bcachefs: Clamp replicas_required to replicas
[bcachefs-tools-debian] / libbcachefs / bcachefs.h
index 0d779cfe8d27a1140f62f1757513a9fe88613687..3b48c5e133b5b51de31e9f8cab7413d21fd11286 100644 (file)
 #include <linux/seqlock.h>
 #include <linux/shrinker.h>
 #include <linux/srcu.h>
+#include <linux/thread_with_file_types.h>
+#include <linux/time_stats.h>
 #include <linux/types.h>
 #include <linux/workqueue.h>
 #include <linux/zstd.h>
@@ -326,6 +328,12 @@ do {                                                                       \
                bch_err(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
 } while (0)
 
+#define bch_err_fn_ratelimited(_c, _ret)                               \
+do {                                                                   \
+       if (should_print_err(_ret))                                     \
+               bch_err_ratelimited(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
+} while (0)
+
 #define bch_err_msg(_c, _ret, _msg, ...)                               \
 do {                                                                   \
        if (should_print_err(_ret))                                     \
@@ -419,6 +427,7 @@ BCH_DEBUG_PARAMS_DEBUG()
        x(btree_node_merge)                     \
        x(btree_node_sort)                      \
        x(btree_node_read)                      \
+       x(btree_node_read_done)                 \
        x(btree_interior_update_foreground)     \
        x(btree_interior_update_total)          \
        x(btree_gc)                             \
@@ -472,12 +481,6 @@ enum bch_time_stats {
 
 struct btree;
 
-struct log_output {
-       spinlock_t              lock;
-       wait_queue_head_t       wait;
-       struct printbuf         buf;
-};
-
 enum gc_phase {
        GC_PHASE_NOT_RUNNING,
        GC_PHASE_START,
@@ -502,6 +505,7 @@ enum gc_phase {
        GC_PHASE_BTREE_deleted_inodes,
        GC_PHASE_BTREE_logged_ops,
        GC_PHASE_BTREE_rebalance_work,
+       GC_PHASE_BTREE_subvolume_children,
 
        GC_PHASE_PENDING_DELETE,
 };
@@ -591,7 +595,7 @@ struct bch_dev {
 
        /* The rest of this all shows up in sysfs */
        atomic64_t              cur_latency[2];
-       struct bch2_time_stats  io_latency[2];
+       struct time_stats_quantiles     io_latency[2];
 
 #define CONGESTED_MAX          1024
        atomic_t                congested;
@@ -601,9 +605,6 @@ struct bch_dev {
 };
 
 /*
- * fsck_done - kill?
- *
- * replace with something more general from enumated fsck passes/errors:
  * initial_gc_unfixed
  * error
  * topology error
@@ -619,7 +620,7 @@ struct bch_dev {
        x(going_ro)                     \
        x(write_disable_complete)       \
        x(clean_shutdown)               \
-       x(fsck_done)                    \
+       x(fsck_running)                 \
        x(initial_gc_unfixed)           \
        x(need_another_gc)              \
        x(need_delete_dead_snapshots)   \
@@ -641,7 +642,8 @@ struct btree_debug {
 #define BCH_TRANSACTIONS_NR 128
 
 struct btree_transaction_stats {
-       struct bch2_time_stats  lock_hold_times;
+       struct time_stats       duration;
+       struct time_stats       lock_hold_times;
        struct mutex            lock;
        unsigned                nr_max_paths;
        unsigned                journal_entries_size;
@@ -732,8 +734,8 @@ struct bch_fs {
        struct super_block      *vfs_sb;
        dev_t                   dev;
        char                    name[40];
-       struct log_output       *output;
-       struct task_struct      *output_filter;
+       struct stdio_redirect   *stdio;
+       struct task_struct      *stdio_filter;
 
        /* ro/rw, add/remove/resize devices: */
        struct rw_semaphore     state_lock;
@@ -789,6 +791,7 @@ struct bch_fs {
                unsigned        nsec_per_time_unit;
                u64             features;
                u64             compat;
+               unsigned long   errors_silent[BITS_TO_LONGS(BCH_SB_ERR_MAX)];
        }                       sb;
 
 
@@ -918,8 +921,6 @@ struct bch_fs {
        /* ALLOCATOR */
        spinlock_t              freelist_lock;
        struct closure_waitlist freelist_wait;
-       u64                     blocked_allocate;
-       u64                     blocked_allocate_open_bucket;
 
        open_bucket_idx_t       open_buckets_freelist;
        open_bucket_idx_t       open_buckets_nr_free;
@@ -1103,7 +1104,7 @@ struct bch_fs {
        unsigned                copy_gc_enabled:1;
        bool                    promote_whole_extents;
 
-       struct bch2_time_stats  times[BCH_TIME_STAT_NR];
+       struct time_stats       times[BCH_TIME_STAT_NR];
 
        struct btree_transaction_stats btree_transaction_stats[BCH_TRANSACTIONS_NR];
 
@@ -1203,11 +1204,6 @@ static inline unsigned block_sectors(const struct bch_fs *c)
        return c->opts.block_size >> 9;
 }
 
-static inline size_t btree_sectors(const struct bch_fs *c)
-{
-       return c->opts.btree_node_size >> 9;
-}
-
 static inline bool btree_id_cached(const struct bch_fs *c, enum btree_id btree)
 {
        return c->btree_key_cache_btrees & (1U << btree);
@@ -1244,6 +1240,27 @@ static inline bool bch2_dev_exists2(const struct bch_fs *c, unsigned dev)
        return dev < c->sb.nr_devices && c->devs[dev];
 }
 
+static inline struct stdio_redirect *bch2_fs_stdio_redirect(struct bch_fs *c)
+{
+       struct stdio_redirect *stdio = c->stdio;
+
+       if (c->stdio_filter && c->stdio_filter != current)
+               stdio = NULL;
+       return stdio;
+}
+
+static inline unsigned metadata_replicas_required(struct bch_fs *c)
+{
+       return min(c->opts.metadata_replicas,
+                  c->opts.metadata_replicas_required);
+}
+
+static inline unsigned data_replicas_required(struct bch_fs *c)
+{
+       return min(c->opts.data_replicas,
+                  c->opts.data_replicas_required);
+}
+
 #define BKEY_PADDED_ONSTACK(key, pad)                          \
        struct { struct bkey_i key; __u64 key ## _pad[pad]; }