/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _BCACHEFS_SNAPSHOT_TYPES_H #define _BCACHEFS_SNAPSHOT_TYPES_H #include "bbpos_types.h" #include "darray.h" #include "subvolume_types.h" typedef DARRAY(u32) snapshot_id_list; #define IS_ANCESTOR_BITMAP 128 struct snapshot_t { enum snapshot_id_state { SNAPSHOT_ID_empty, SNAPSHOT_ID_live, SNAPSHOT_ID_deleted, } state; u32 parent; u32 skip[3]; u32 depth; u32 children[2]; u32 subvol; /* Nonzero only if a subvolume points to this node: */ u32 tree; unsigned long is_ancestor[BITS_TO_LONGS(IS_ANCESTOR_BITMAP)]; }; struct snapshot_table { struct rcu_head rcu; size_t nr; #ifndef RUST_BINDGEN DECLARE_FLEX_ARRAY(struct snapshot_t, s); #else struct snapshot_t s[0]; #endif }; struct snapshot_interior_delete { u32 id; u32 live_child; }; typedef DARRAY(struct snapshot_interior_delete) interior_delete_list; struct snapshot_delete { struct mutex lock; struct work_struct work; struct mutex progress_lock; snapshot_id_list deleting_from_trees; snapshot_id_list delete_leaves; interior_delete_list delete_interior; bool running; struct bbpos pos; }; #endif /* _BCACHEFS_SNAPSHOT_TYPES_H */