]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/move.h
Update bcachefs sources to 242d37cbd0 bcachefs: Kill btree_iter_pos_changed()
[bcachefs-tools-debian] / libbcachefs / move.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_MOVE_H
3 #define _BCACHEFS_MOVE_H
4
5 #include "btree_iter.h"
6 #include "buckets.h"
7 #include "io_types.h"
8 #include "move_types.h"
9
10 struct bch_read_bio;
11 struct moving_context;
12
13 enum data_cmd {
14         DATA_SKIP,
15         DATA_SCRUB,
16         DATA_ADD_REPLICAS,
17         DATA_REWRITE,
18         DATA_PROMOTE,
19 };
20
21 struct data_opts {
22         u16             target;
23         u8              rewrite_dev;
24         u8              nr_replicas;
25         int             btree_insert_flags;
26 };
27
28 struct migrate_write {
29         enum btree_id           btree_id;
30         enum data_cmd           data_cmd;
31         struct data_opts        data_opts;
32
33         unsigned                nr_ptrs_reserved;
34
35         struct moving_context   *ctxt;
36
37         /* what we read: */
38         struct bch_extent_ptr   ptr;
39         u64                     offset;
40
41         struct bch_write_op     op;
42 };
43
44 void bch2_migrate_read_done(struct migrate_write *, struct bch_read_bio *);
45 int bch2_migrate_write_init(struct bch_fs *, struct migrate_write *,
46                             struct write_point_specifier,
47                             struct bch_io_opts,
48                             enum data_cmd, struct data_opts,
49                             enum btree_id, struct bkey_s_c);
50
51 typedef enum data_cmd (*move_pred_fn)(struct bch_fs *, void *,
52                                 struct bkey_s_c,
53                                 struct bch_io_opts *, struct data_opts *);
54
55 int bch2_move_data(struct bch_fs *,
56                    enum btree_id, struct bpos,
57                    enum btree_id, struct bpos,
58                    struct bch_ratelimit *,
59                    struct write_point_specifier,
60                    move_pred_fn, void *,
61                    struct bch_move_stats *);
62
63 int bch2_data_job(struct bch_fs *,
64                   struct bch_move_stats *,
65                   struct bch_ioctl_data);
66
67 #endif /* _BCACHEFS_MOVE_H */