1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _BCACHEFS_RECOVERY_PASSES_TYPES_H
3#define _BCACHEFS_RECOVERY_PASSES_TYPES_H
4
5#define PASS_SILENT BIT(0)
6#define PASS_FSCK BIT(1)
7#define PASS_UNCLEAN BIT(2)
8#define PASS_ALWAYS BIT(3)
9#define PASS_ONLINE BIT(4)
10
11/*
12 * Passes may be reordered, but the second field is a persistent identifier and
13 * must never change:
14 */
15#define BCH_RECOVERY_PASSES() \
16 x(scan_for_btree_nodes, 37, 0) \
17 x(check_topology, 4, 0) \
18 x(alloc_read, 0, PASS_ALWAYS) \
19 x(stripes_read, 1, PASS_ALWAYS) \
20 x(initialize_subvolumes, 2, 0) \
21 x(snapshots_read, 3, PASS_ALWAYS) \
22 x(check_allocations, 5, PASS_FSCK) \
23 x(trans_mark_dev_sbs, 6, PASS_ALWAYS|PASS_SILENT) \
24 x(fs_journal_alloc, 7, PASS_ALWAYS|PASS_SILENT) \
25 x(set_may_go_rw, 8, PASS_ALWAYS|PASS_SILENT) \
26 x(journal_replay, 9, PASS_ALWAYS) \
27 x(check_alloc_info, 10, PASS_ONLINE|PASS_FSCK) \
28 x(check_lrus, 11, PASS_ONLINE|PASS_FSCK) \
29 x(check_btree_backpointers, 12, PASS_ONLINE|PASS_FSCK) \
30 x(check_backpointers_to_extents, 13, PASS_ONLINE|PASS_FSCK) \
31 x(check_extents_to_backpointers, 14, PASS_ONLINE|PASS_FSCK) \
32 x(check_alloc_to_lru_refs, 15, PASS_ONLINE|PASS_FSCK) \
33 x(fs_freespace_init, 16, PASS_ALWAYS|PASS_SILENT) \
34 x(bucket_gens_init, 17, 0) \
35 x(reconstruct_snapshots, 38, 0) \
36 x(check_snapshot_trees, 18, PASS_ONLINE|PASS_FSCK) \
37 x(check_snapshots, 19, PASS_ONLINE|PASS_FSCK) \
38 x(check_subvols, 20, PASS_ONLINE|PASS_FSCK) \
39 x(check_subvol_children, 35, PASS_ONLINE|PASS_FSCK) \
40 x(delete_dead_snapshots, 21, PASS_ONLINE|PASS_FSCK) \
41 x(fs_upgrade_for_subvolumes, 22, 0) \
42 x(check_inodes, 24, PASS_FSCK) \
43 x(check_extents, 25, PASS_FSCK) \
44 x(check_indirect_extents, 26, PASS_FSCK) \
45 x(check_dirents, 27, PASS_FSCK) \
46 x(check_xattrs, 28, PASS_FSCK) \
47 x(check_root, 29, PASS_ONLINE|PASS_FSCK) \
48 x(check_subvolume_structure, 36, PASS_ONLINE|PASS_FSCK) \
49 x(check_directory_structure, 30, PASS_ONLINE|PASS_FSCK) \
50 x(check_nlinks, 31, PASS_FSCK) \
51 x(resume_logged_ops, 23, PASS_ALWAYS) \
52 x(delete_dead_inodes, 32, PASS_FSCK|PASS_UNCLEAN) \
53 x(fix_reflink_p, 33, 0) \
54 x(set_fs_needs_rebalance, 34, 0) \
55
56/* We normally enumerate recovery passes in the order we run them: */
57enum bch_recovery_pass {
58#define x(n, id, when) BCH_RECOVERY_PASS_##n,
59 BCH_RECOVERY_PASSES()
60#undef x
61 BCH_RECOVERY_PASS_NR
62};
63
64/* But we also need stable identifiers that can be used in the superblock */
65enum bch_recovery_pass_stable {
66#define x(n, id, when) BCH_RECOVERY_PASS_STABLE_##n = id,
67 BCH_RECOVERY_PASSES()
68#undef x
69};
70
71#endif /* _BCACHEFS_RECOVERY_PASSES_TYPES_H */
72

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