]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/move.h
New upstream release
[bcachefs-tools-debian] / libbcachefs / move.h
index 2a789a1158ca22e4e7efb1cd4298b4115da3216d..c0fec69bbb6a1d6becca6bf6bdffc8eb32febc7e 100644 (file)
@@ -4,53 +4,37 @@
 
 #include "btree_iter.h"
 #include "buckets.h"
-#include "io_types.h"
+#include "data_update.h"
 #include "move_types.h"
 
 struct bch_read_bio;
-struct moving_context;
 
-enum data_cmd {
-       DATA_SKIP,
-       DATA_SCRUB,
-       DATA_ADD_REPLICAS,
-       DATA_REWRITE,
-       DATA_PROMOTE,
-};
-
-struct data_opts {
-       u16             target;
-       u8              rewrite_dev;
-       u8              nr_replicas;
-       int             btree_insert_flags;
-};
+struct moving_context {
+       struct bch_fs           *c;
+       struct bch_ratelimit    *rate;
+       struct bch_move_stats   *stats;
+       struct write_point_specifier wp;
+       bool                    wait_on_copygc;
+       bool                    write_error;
 
-struct migrate_write {
-       enum btree_id           btree_id;
-       enum data_cmd           data_cmd;
-       struct data_opts        data_opts;
+       /* For waiting on outstanding reads and writes: */
+       struct closure          cl;
+       struct list_head        reads;
 
-       unsigned                nr_ptrs_reserved;
+       /* in flight sectors: */
+       atomic_t                read_sectors;
+       atomic_t                write_sectors;
 
-       struct moving_context   *ctxt;
-
-       /* what we read: */
-       struct bch_extent_ptr   ptr;
-       u64                     offset;
-
-       struct bch_write_op     op;
+       wait_queue_head_t       wait;
 };
 
-void bch2_migrate_read_done(struct migrate_write *, struct bch_read_bio *);
-int bch2_migrate_write_init(struct bch_fs *, struct migrate_write *,
-                           struct write_point_specifier,
-                           struct bch_io_opts,
-                           enum data_cmd, struct data_opts,
-                           enum btree_id, struct bkey_s_c);
+typedef bool (*move_pred_fn)(struct bch_fs *, void *, struct bkey_s_c,
+                            struct bch_io_opts *, struct data_update_opts *);
 
-typedef enum data_cmd (*move_pred_fn)(struct bch_fs *, void *,
-                               struct bkey_s_c,
-                               struct bch_io_opts *, struct data_opts *);
+void bch2_moving_ctxt_exit(struct moving_context *);
+void bch2_moving_ctxt_init(struct moving_context *, struct bch_fs *,
+                          struct bch_ratelimit *, struct bch_move_stats *,
+                          struct write_point_specifier, bool);
 
 int bch2_scan_old_btree_nodes(struct bch_fs *, struct bch_move_stats *);
 
@@ -58,10 +42,20 @@ int bch2_move_data(struct bch_fs *,
                   enum btree_id, struct bpos,
                   enum btree_id, struct bpos,
                   struct bch_ratelimit *,
+                  struct bch_move_stats *,
                   struct write_point_specifier,
-                  move_pred_fn, void *,
-                  struct bch_move_stats *);
-
+                  bool,
+                  move_pred_fn, void *);
+
+int __bch2_evacuate_bucket(struct moving_context *,
+                          struct bpos, int,
+                          struct data_update_opts);
+int bch2_evacuate_bucket(struct bch_fs *, struct bpos, int,
+                        struct data_update_opts,
+                        struct bch_ratelimit *,
+                        struct bch_move_stats *,
+                        struct write_point_specifier,
+                        bool);
 int bch2_data_job(struct bch_fs *,
                  struct bch_move_stats *,
                  struct bch_ioctl_data);