bcachefs: Erasure coding fixes & refactoring
[linux-block.git] / fs / bcachefs / move.h
CommitLineData
1c6fdbd8
KO
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
10struct bch_read_bio;
11struct moving_context;
12
13enum data_cmd {
14 DATA_SKIP,
15 DATA_SCRUB,
16 DATA_ADD_REPLICAS,
17 DATA_REWRITE,
18 DATA_PROMOTE,
19};
20
21struct data_opts {
22 u16 target;
b88e971e
KO
23 u8 rewrite_dev;
24 u8 nr_replicas;
1c6fdbd8
KO
25 int btree_insert_flags;
26};
27
28struct migrate_write {
76426098 29 enum btree_id btree_id;
1c6fdbd8
KO
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
44void bch2_migrate_read_done(struct migrate_write *, struct bch_read_bio *);
45int 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,
76426098 49 enum btree_id, struct bkey_s_c);
1c6fdbd8
KO
50
51typedef enum data_cmd (*move_pred_fn)(struct bch_fs *, void *,
26609b61 52 struct bkey_s_c,
1c6fdbd8
KO
53 struct bch_io_opts *, struct data_opts *);
54
55int bch2_move_data(struct bch_fs *, struct bch_ratelimit *,
56 struct write_point_specifier,
57 struct bpos, struct bpos,
58 move_pred_fn, void *,
59 struct bch_move_stats *);
60
61int bch2_data_job(struct bch_fs *,
62 struct bch_move_stats *,
63 struct bch_ioctl_data);
64
65#endif /* _BCACHEFS_MOVE_H */