1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_REFLINK_H
3 #define _BCACHEFS_REFLINK_H
5 enum bch_validate_flags
;
7 int bch2_reflink_p_validate(struct bch_fs
*, struct bkey_s_c
, enum bch_validate_flags
);
8 void bch2_reflink_p_to_text(struct printbuf
*, struct bch_fs
*, struct bkey_s_c
);
9 bool bch2_reflink_p_merge(struct bch_fs
*, struct bkey_s
, struct bkey_s_c
);
10 int bch2_trigger_reflink_p(struct btree_trans
*, enum btree_id
, unsigned,
11 struct bkey_s_c
, struct bkey_s
,
12 enum btree_iter_update_trigger_flags
);
14 #define bch2_bkey_ops_reflink_p ((struct bkey_ops) { \
15 .key_validate = bch2_reflink_p_validate, \
16 .val_to_text = bch2_reflink_p_to_text, \
17 .key_merge = bch2_reflink_p_merge, \
18 .trigger = bch2_trigger_reflink_p, \
22 int bch2_reflink_v_validate(struct bch_fs
*, struct bkey_s_c
, enum bch_validate_flags
);
23 void bch2_reflink_v_to_text(struct printbuf
*, struct bch_fs
*, struct bkey_s_c
);
24 int bch2_trigger_reflink_v(struct btree_trans
*, enum btree_id
, unsigned,
25 struct bkey_s_c
, struct bkey_s
,
26 enum btree_iter_update_trigger_flags
);
28 #define bch2_bkey_ops_reflink_v ((struct bkey_ops) { \
29 .key_validate = bch2_reflink_v_validate, \
30 .val_to_text = bch2_reflink_v_to_text, \
31 .swab = bch2_ptr_swab, \
32 .trigger = bch2_trigger_reflink_v, \
36 int bch2_indirect_inline_data_validate(struct bch_fs
*, struct bkey_s_c
,
37 enum bch_validate_flags
);
38 void bch2_indirect_inline_data_to_text(struct printbuf
*,
39 struct bch_fs
*, struct bkey_s_c
);
40 int bch2_trigger_indirect_inline_data(struct btree_trans
*,
41 enum btree_id
, unsigned,
42 struct bkey_s_c
, struct bkey_s
,
43 enum btree_iter_update_trigger_flags
);
45 #define bch2_bkey_ops_indirect_inline_data ((struct bkey_ops) { \
46 .key_validate = bch2_indirect_inline_data_validate, \
47 .val_to_text = bch2_indirect_inline_data_to_text, \
48 .trigger = bch2_trigger_indirect_inline_data, \
52 static inline const __le64
*bkey_refcount_c(struct bkey_s_c k
)
55 case KEY_TYPE_reflink_v
:
56 return &bkey_s_c_to_reflink_v(k
).v
->refcount
;
57 case KEY_TYPE_indirect_inline_data
:
58 return &bkey_s_c_to_indirect_inline_data(k
).v
->refcount
;
64 static inline __le64
*bkey_refcount(struct bkey_s k
)
67 case KEY_TYPE_reflink_v
:
68 return &bkey_s_to_reflink_v(k
).v
->refcount
;
69 case KEY_TYPE_indirect_inline_data
:
70 return &bkey_s_to_indirect_inline_data(k
).v
->refcount
;
76 s64
bch2_remap_range(struct bch_fs
*, subvol_inum
, u64
,
77 subvol_inum
, u64
, u64
, u64
, s64
*);
79 #endif /* _BCACHEFS_REFLINK_H */