brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 51afe11 Raw
80 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _BCACHEFS_REFLINK_H3#define _BCACHEFS_REFLINK_H4 5enum bch_validate_flags;6 7int bch2_reflink_p_validate(struct bch_fs *, struct bkey_s_c, enum bch_validate_flags);8void bch2_reflink_p_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);9bool bch2_reflink_p_merge(struct bch_fs *, struct bkey_s, struct bkey_s_c);10int 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);13 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,		\19	.min_val_size	= 16,					\20})21 22int bch2_reflink_v_validate(struct bch_fs *, struct bkey_s_c, enum bch_validate_flags);23void bch2_reflink_v_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);24int 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);27 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,		\33	.min_val_size	= 8,					\34})35 36int bch2_indirect_inline_data_validate(struct bch_fs *, struct bkey_s_c,37				      enum bch_validate_flags);38void bch2_indirect_inline_data_to_text(struct printbuf *,39				struct bch_fs *, struct bkey_s_c);40int 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);44 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,	\49	.min_val_size	= 8,					\50})51 52static inline const __le64 *bkey_refcount_c(struct bkey_s_c k)53{54	switch (k.k->type) {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;59	default:60		return NULL;61	}62}63 64static inline __le64 *bkey_refcount(struct bkey_s k)65{66	switch (k.k->type) {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;71	default:72		return NULL;73	}74}75 76s64 bch2_remap_range(struct bch_fs *, subvol_inum, u64,77		     subvol_inum, u64, u64, u64, s64 *);78 79#endif /* _BCACHEFS_REFLINK_H */80