xref: /linux/fs/bcachefs/subvolume.h (revision 409c38d4f156740bf3165fd6ceae4fa6425eebf4)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_SUBVOLUME_H
3 #define _BCACHEFS_SUBVOLUME_H
4 
5 #include "darray.h"
6 #include "subvolume_types.h"
7 
8 enum bkey_invalid_flags;
9 
10 int bch2_check_subvols(struct bch_fs *);
11 
12 int bch2_subvolume_invalid(struct bch_fs *, struct bkey_s_c,
13 			   enum bkey_invalid_flags, struct printbuf *);
14 void bch2_subvolume_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
15 
16 #define bch2_bkey_ops_subvolume ((struct bkey_ops) {		\
17 	.key_invalid	= bch2_subvolume_invalid,		\
18 	.val_to_text	= bch2_subvolume_to_text,		\
19 	.min_val_size	= 16,					\
20 })
21 
22 int bch2_subvolume_get(struct btree_trans *, unsigned,
23 		       bool, int, struct bch_subvolume *);
24 int bch2_subvolume_get_snapshot(struct btree_trans *, u32, u32 *);
25 
26 int bch2_subvol_is_ro_trans(struct btree_trans *, u32);
27 int bch2_subvol_is_ro(struct bch_fs *, u32);
28 
29 int bch2_delete_dead_snapshots(struct bch_fs *);
30 void bch2_delete_dead_snapshots_async(struct bch_fs *);
31 
32 int bch2_subvolume_unlink(struct btree_trans *, u32);
33 int bch2_subvolume_create(struct btree_trans *, u64, u32,
34 			  u32 *, u32 *, bool);
35 
36 int bch2_fs_subvolumes_init(struct bch_fs *);
37 
38 #endif /* _BCACHEFS_SUBVOLUME_H */
39