xref: /linux/fs/bcachefs/data_update.h (revision da5b2ad1c2f18834cb1ce429e2e5a5cf5cbdf21b)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef _BCACHEFS_DATA_UPDATE_H
4 #define _BCACHEFS_DATA_UPDATE_H
5 
6 #include "bkey_buf.h"
7 #include "io_write_types.h"
8 
9 struct moving_context;
10 
11 struct data_update_opts {
12 	unsigned	rewrite_ptrs;
13 	unsigned	kill_ptrs;
14 	u16		target;
15 	u8		extra_replicas;
16 	unsigned	btree_insert_flags;
17 	unsigned	write_flags;
18 };
19 
20 void bch2_data_update_opts_to_text(struct printbuf *, struct bch_fs *,
21 				   struct bch_io_opts *, struct data_update_opts *);
22 
23 struct data_update {
24 	/* extent being updated: */
25 	enum btree_id		btree_id;
26 	struct bkey_buf		k;
27 	struct data_update_opts	data_opts;
28 	struct moving_context	*ctxt;
29 	struct bch_move_stats	*stats;
30 	struct bch_write_op	op;
31 };
32 
33 void bch2_data_update_to_text(struct printbuf *, struct data_update *);
34 
35 int bch2_data_update_index_update(struct bch_write_op *);
36 
37 void bch2_data_update_read_done(struct data_update *,
38 				struct bch_extent_crc_unpacked);
39 
40 int bch2_extent_drop_ptrs(struct btree_trans *,
41 			  struct btree_iter *,
42 			  struct bkey_s_c,
43 			  struct data_update_opts);
44 
45 void bch2_data_update_exit(struct data_update *);
46 int bch2_data_update_init(struct btree_trans *, struct btree_iter *,
47 			  struct moving_context *,
48 			  struct data_update *,
49 			  struct write_point_specifier,
50 			  struct bch_io_opts, struct data_update_opts,
51 			  enum btree_id, struct bkey_s_c);
52 void bch2_data_update_opts_normalize(struct bkey_s_c, struct data_update_opts *);
53 
54 #endif /* _BCACHEFS_DATA_UPDATE_H */
55