]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bcachefs.h
Merge pull request #231 from sesse/install-mount
[bcachefs-tools-debian] / libbcachefs / bcachefs.h
index e8bee13e425c67aac5313ffba0a8afe826dd1901..b80c6c9efd8cef95b46b5b45b21f639e18373755 100644 (file)
@@ -315,15 +315,26 @@ do {                                                                      \
 #define bch_err_inum_offset_ratelimited(c, _inum, _offset, fmt, ...) \
        bch2_print_ratelimited(c, KERN_ERR bch2_fmt_inum_offset(c, _inum, _offset, fmt), ##__VA_ARGS__)
 
+static inline bool should_print_err(int err)
+{
+       return err && !bch2_err_matches(err, BCH_ERR_transaction_restart);
+}
+
 #define bch_err_fn(_c, _ret)                                           \
 do {                                                                   \
-       if (_ret && !bch2_err_matches(_ret, BCH_ERR_transaction_restart))\
+       if (should_print_err(_ret))                                     \
                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 (_ret && !bch2_err_matches(_ret, BCH_ERR_transaction_restart))\
+       if (should_print_err(_ret))                                     \
                bch_err(_c, "%s(): error " _msg " %s", __func__,        \
                        ##__VA_ARGS__, bch2_err_str(_ret));             \
 } while (0)
@@ -414,6 +425,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)                             \
@@ -453,6 +465,7 @@ enum bch_time_stats {
 #include "replicas_types.h"
 #include "subvolume_types.h"
 #include "super_types.h"
+#include "thread_with_file_types.h"
 
 /* Number of nodes btree coalesce will try to coalesce at once */
 #define GC_MERGE_NODES         4U
@@ -467,12 +480,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,
@@ -596,9 +603,6 @@ struct bch_dev {
 };
 
 /*
- * fsck_done - kill?
- *
- * replace with something more general from enumated fsck passes/errors:
  * initial_gc_unfixed
  * error
  * topology error
@@ -614,7 +618,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)   \
@@ -636,6 +640,7 @@ struct btree_debug {
 #define BCH_TRANSACTIONS_NR 128
 
 struct btree_transaction_stats {
+       struct bch2_time_stats  duration;
        struct bch2_time_stats  lock_hold_times;
        struct mutex            lock;
        unsigned                nr_max_paths;
@@ -727,8 +732,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;
@@ -784,6 +789,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;
 
 
@@ -1198,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);
@@ -1239,6 +1240,15 @@ 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;
+}
+
 #define BKEY_PADDED_ONSTACK(key, pad)                          \
        struct { struct bkey_i key; __u64 key ## _pad[pad]; }