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: */ |
57 | enum 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 */ |
65 | enum 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 | |