1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_SUBVOLUME_FORMAT_H
3#define _BCACHEFS_SUBVOLUME_FORMAT_H
4
5#define SUBVOL_POS_MIN POS(0, 1)
6#define SUBVOL_POS_MAX POS(0, S32_MAX)
7#define BCACHEFS_ROOT_SUBVOL 1
8
9struct bch_subvolume {
10 struct bch_val v;
11 __le32 flags;
12 __le32 snapshot;
13 __le64 inode;
14 /*
15 * Snapshot subvolumes form a tree, separate from the snapshot nodes
16 * tree - if this subvolume is a snapshot, this is the ID of the
17 * subvolume it was created from:
18 *
19 * This is _not_ necessarily the subvolume of the directory containing
20 * this subvolume:
21 */
22 __le32 creation_parent;
23 __le32 fs_path_parent;
24 bch_le128 otime;
25};
26
27LE32_BITMASK(BCH_SUBVOLUME_RO, struct bch_subvolume, flags, 0, 1)
28/*
29 * We need to know whether a subvolume is a snapshot so we can know whether we
30 * can delete it (or whether it should just be rm -rf'd)
31 */
32LE32_BITMASK(BCH_SUBVOLUME_SNAP, struct bch_subvolume, flags, 1, 2)
33LE32_BITMASK(BCH_SUBVOLUME_UNLINKED, struct bch_subvolume, flags, 2, 3)
34
35#endif /* _BCACHEFS_SUBVOLUME_FORMAT_H */
36

source code of linux/fs/bcachefs/subvolume_format.h