Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _BCACHEFS_REFLINK_H
 3#define _BCACHEFS_REFLINK_H
 4
 5enum bkey_invalid_flags;
 6
 7int bch2_reflink_p_invalid(struct bch_fs *, struct bkey_s_c,
 8			   enum bkey_invalid_flags, struct printbuf *);
 9void bch2_reflink_p_to_text(struct printbuf *, struct bch_fs *,
10			    struct bkey_s_c);
11bool bch2_reflink_p_merge(struct bch_fs *, struct bkey_s, struct bkey_s_c);
12int bch2_trigger_reflink_p(struct btree_trans *, enum btree_id, unsigned,
13			   struct bkey_s_c, struct bkey_s, unsigned);
14
15#define bch2_bkey_ops_reflink_p ((struct bkey_ops) {		\
16	.key_invalid	= bch2_reflink_p_invalid,		\
17	.val_to_text	= bch2_reflink_p_to_text,		\
18	.key_merge	= bch2_reflink_p_merge,			\
19	.trigger	= bch2_trigger_reflink_p,		\
20	.min_val_size	= 16,					\
21})
22
23int bch2_reflink_v_invalid(struct bch_fs *, struct bkey_s_c,
24			   enum bkey_invalid_flags, struct printbuf *);
25void bch2_reflink_v_to_text(struct printbuf *, struct bch_fs *,
26			    struct bkey_s_c);
27int bch2_trigger_reflink_v(struct btree_trans *, enum btree_id, unsigned,
28			      struct bkey_s_c, struct bkey_s, unsigned);
29
30#define bch2_bkey_ops_reflink_v ((struct bkey_ops) {		\
31	.key_invalid	= bch2_reflink_v_invalid,		\
32	.val_to_text	= bch2_reflink_v_to_text,		\
33	.swab		= bch2_ptr_swab,			\
34	.trigger	= bch2_trigger_reflink_v,		\
35	.min_val_size	= 8,					\
36})
37
38int bch2_indirect_inline_data_invalid(struct bch_fs *, struct bkey_s_c,
39				      enum bkey_invalid_flags, struct printbuf *);
40void bch2_indirect_inline_data_to_text(struct printbuf *,
41				struct bch_fs *, struct bkey_s_c);
42int bch2_trigger_indirect_inline_data(struct btree_trans *,
43					 enum btree_id, unsigned,
44			      struct bkey_s_c, struct bkey_s,
45			      unsigned);
46
47#define bch2_bkey_ops_indirect_inline_data ((struct bkey_ops) {	\
48	.key_invalid	= bch2_indirect_inline_data_invalid,	\
49	.val_to_text	= bch2_indirect_inline_data_to_text,	\
50	.trigger	= bch2_trigger_indirect_inline_data,	\
51	.min_val_size	= 8,					\
52})
53
54static inline const __le64 *bkey_refcount_c(struct bkey_s_c k)
55{
56	switch (k.k->type) {
57	case KEY_TYPE_reflink_v:
58		return &bkey_s_c_to_reflink_v(k).v->refcount;
59	case KEY_TYPE_indirect_inline_data:
60		return &bkey_s_c_to_indirect_inline_data(k).v->refcount;
61	default:
62		return NULL;
63	}
64}
65
66static inline __le64 *bkey_refcount(struct bkey_s k)
67{
68	switch (k.k->type) {
69	case KEY_TYPE_reflink_v:
70		return &bkey_s_to_reflink_v(k).v->refcount;
71	case KEY_TYPE_indirect_inline_data:
72		return &bkey_s_to_indirect_inline_data(k).v->refcount;
73	default:
74		return NULL;
75	}
76}
77
78s64 bch2_remap_range(struct bch_fs *, subvol_inum, u64,
79		     subvol_inum, u64, u64, u64, s64 *);
80
81#endif /* _BCACHEFS_REFLINK_H */