xref: /linux/fs/bcachefs/subvolume_types.h (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_SUBVOLUME_TYPES_H
3 #define _BCACHEFS_SUBVOLUME_TYPES_H
4 
5 #include "darray.h"
6 
7 typedef DARRAY(u32) snapshot_id_list;
8 
9 #define IS_ANCESTOR_BITMAP	128
10 
11 struct snapshot_t {
12 	u32			parent;
13 	u32			skip[3];
14 	u32			depth;
15 	u32			children[2];
16 	u32			subvol; /* Nonzero only if a subvolume points to this node: */
17 	u32			tree;
18 	u32			equiv;
19 	unsigned long		is_ancestor[BITS_TO_LONGS(IS_ANCESTOR_BITMAP)];
20 };
21 
22 struct snapshot_table {
23 	struct rcu_head		rcu;
24 	size_t			nr;
25 #ifndef RUST_BINDGEN
26 	DECLARE_FLEX_ARRAY(struct snapshot_t, s);
27 #else
28 	struct snapshot_t	s[0];
29 #endif
30 };
31 
32 typedef struct {
33 	/* we can't have padding in this struct: */
34 	u64		subvol;
35 	u64		inum;
36 } subvol_inum;
37 
38 #endif /* _BCACHEFS_SUBVOLUME_TYPES_H */
39