]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/move.h
Update bcachefs sources to e99d29e402 bcachefs: zstd support, compression refactoring
[bcachefs-tools-debian] / libbcachefs / move.h
1 #ifndef _BCACHEFS_MOVE_H
2 #define _BCACHEFS_MOVE_H
3
4 #include "btree_iter.h"
5 #include "buckets.h"
6 #include "io_types.h"
7
8 struct bch_read_bio;
9 struct moving_context;
10
11 enum data_cmd {
12         DATA_SKIP,
13         DATA_SCRUB,
14         DATA_ADD_REPLICAS,
15         DATA_REWRITE,
16         DATA_PROMOTE,
17 };
18
19 struct data_opts {
20         unsigned        rewrite_dev;
21         int             btree_insert_flags;
22 };
23
24 struct migrate_write {
25         enum data_cmd           data_cmd;
26         struct data_opts        data_opts;
27
28         unsigned                nr_ptrs_reserved;
29
30         struct moving_context   *ctxt;
31
32         /* what we read: */
33         struct bch_extent_ptr   ptr;
34         u64                     offset;
35
36         struct bch_write_op     op;
37 };
38
39 void bch2_migrate_read_done(struct migrate_write *, struct bch_read_bio *);
40 int bch2_migrate_write_init(struct bch_fs *, struct migrate_write *,
41                             struct bch_devs_mask *,
42                             struct write_point_specifier,
43                             struct bch_io_opts,
44                             enum data_cmd, struct data_opts,
45                             struct bkey_s_c);
46
47 #define SECTORS_IN_FLIGHT_PER_DEVICE    2048
48
49 typedef enum data_cmd (*move_pred_fn)(struct bch_fs *, void *,
50                                 enum bkey_type, struct bkey_s_c_extent,
51                                 struct bch_io_opts *, struct data_opts *);
52
53 struct bch_move_stats {
54         enum bch_data_type      data_type;
55         struct btree_iter       iter;
56
57         atomic64_t              keys_moved;
58         atomic64_t              sectors_moved;
59         atomic64_t              sectors_seen;
60         atomic64_t              sectors_raced;
61 };
62
63 int bch2_move_data(struct bch_fs *, struct bch_ratelimit *,
64                    unsigned, struct bch_devs_mask *,
65                    struct write_point_specifier,
66                    struct bpos, struct bpos,
67                    move_pred_fn, void *,
68                    struct bch_move_stats *);
69
70 int bch2_data_job(struct bch_fs *,
71                   struct bch_move_stats *,
72                   struct bch_ioctl_data);
73
74 #endif /* _BCACHEFS_MOVE_H */