149 lines
6.4 KiB
Diff
149 lines
6.4 KiB
Diff
From a33c661174e055fb13192e13fd70a6a2eb047e49 Mon Sep 17 00:00:00 2001
|
|
From: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Date: Thu, 14 Nov 2024 20:47:32 -0500
|
|
Subject: [PATCH 219/233] bcachefs: Only run check_backpointers_to_extents in
|
|
debug mode
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The backpointers passes, check_backpointers_to_extents() and
|
|
check_extents_to_backpointers() are the most expensive fsck passes.
|
|
|
|
Now that we're running the same check and repair code when using a
|
|
backpointer at runtime (via bch2_backpointer_get_key()) that fsck does,
|
|
there's no reason fsck needs to - except to verify that the filesystem
|
|
really has no errors in debug mode.
|
|
|
|
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
|
|
---
|
|
fs/bcachefs/recovery_passes_types.h | 92 +++++++++++++++--------------
|
|
fs/bcachefs/sb-errors_format.h | 4 +-
|
|
2 files changed, 51 insertions(+), 45 deletions(-)
|
|
|
|
diff --git a/fs/bcachefs/recovery_passes_types.h b/fs/bcachefs/recovery_passes_types.h
|
|
index 2b3ef3980fc3..71baad41d8c5 100644
|
|
--- a/fs/bcachefs/recovery_passes_types.h
|
|
+++ b/fs/bcachefs/recovery_passes_types.h
|
|
@@ -8,53 +8,59 @@
|
|
#define PASS_ALWAYS BIT(3)
|
|
#define PASS_ONLINE BIT(4)
|
|
|
|
+#ifdef CONFIG_BCACHEFS_DEBUG
|
|
+#define PASS_FSCK_DEBUG BIT(1)
|
|
+#else
|
|
+#define PASS_FSCK_DEBUG 0
|
|
+#endif
|
|
+
|
|
/*
|
|
* Passes may be reordered, but the second field is a persistent identifier and
|
|
* must never change:
|
|
*/
|
|
-#define BCH_RECOVERY_PASSES() \
|
|
- x(recovery_pass_empty, 41, PASS_SILENT) \
|
|
- x(scan_for_btree_nodes, 37, 0) \
|
|
- x(check_topology, 4, 0) \
|
|
- x(accounting_read, 39, PASS_ALWAYS) \
|
|
- x(alloc_read, 0, PASS_ALWAYS) \
|
|
- x(stripes_read, 1, PASS_ALWAYS) \
|
|
- x(initialize_subvolumes, 2, 0) \
|
|
- x(snapshots_read, 3, PASS_ALWAYS) \
|
|
- x(check_allocations, 5, PASS_FSCK) \
|
|
- x(trans_mark_dev_sbs, 6, PASS_ALWAYS|PASS_SILENT) \
|
|
- x(fs_journal_alloc, 7, PASS_ALWAYS|PASS_SILENT) \
|
|
- x(set_may_go_rw, 8, PASS_ALWAYS|PASS_SILENT) \
|
|
- x(journal_replay, 9, PASS_ALWAYS) \
|
|
- x(check_alloc_info, 10, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_lrus, 11, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_btree_backpointers, 12, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_backpointers_to_extents, 13, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_extents_to_backpointers, 14, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_alloc_to_lru_refs, 15, PASS_ONLINE|PASS_FSCK) \
|
|
- x(fs_freespace_init, 16, PASS_ALWAYS|PASS_SILENT) \
|
|
- x(bucket_gens_init, 17, 0) \
|
|
- x(reconstruct_snapshots, 38, 0) \
|
|
- x(check_snapshot_trees, 18, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_snapshots, 19, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_subvols, 20, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_subvol_children, 35, PASS_ONLINE|PASS_FSCK) \
|
|
- x(delete_dead_snapshots, 21, PASS_ONLINE|PASS_FSCK) \
|
|
- x(fs_upgrade_for_subvolumes, 22, 0) \
|
|
- x(check_inodes, 24, PASS_FSCK) \
|
|
- x(check_extents, 25, PASS_FSCK) \
|
|
- x(check_indirect_extents, 26, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_dirents, 27, PASS_FSCK) \
|
|
- x(check_xattrs, 28, PASS_FSCK) \
|
|
- x(check_root, 29, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_unreachable_inodes, 40, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_subvolume_structure, 36, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_directory_structure, 30, PASS_ONLINE|PASS_FSCK) \
|
|
- x(check_nlinks, 31, PASS_FSCK) \
|
|
- x(resume_logged_ops, 23, PASS_ALWAYS) \
|
|
- x(delete_dead_inodes, 32, PASS_ALWAYS) \
|
|
- x(fix_reflink_p, 33, 0) \
|
|
- x(set_fs_needs_rebalance, 34, 0) \
|
|
+#define BCH_RECOVERY_PASSES() \
|
|
+ x(recovery_pass_empty, 41, PASS_SILENT) \
|
|
+ x(scan_for_btree_nodes, 37, 0) \
|
|
+ x(check_topology, 4, 0) \
|
|
+ x(accounting_read, 39, PASS_ALWAYS) \
|
|
+ x(alloc_read, 0, PASS_ALWAYS) \
|
|
+ x(stripes_read, 1, PASS_ALWAYS) \
|
|
+ x(initialize_subvolumes, 2, 0) \
|
|
+ x(snapshots_read, 3, PASS_ALWAYS) \
|
|
+ x(check_allocations, 5, PASS_FSCK) \
|
|
+ x(trans_mark_dev_sbs, 6, PASS_ALWAYS|PASS_SILENT) \
|
|
+ x(fs_journal_alloc, 7, PASS_ALWAYS|PASS_SILENT) \
|
|
+ x(set_may_go_rw, 8, PASS_ALWAYS|PASS_SILENT) \
|
|
+ x(journal_replay, 9, PASS_ALWAYS) \
|
|
+ x(check_alloc_info, 10, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_lrus, 11, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_btree_backpointers, 12, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_backpointers_to_extents, 13, PASS_ONLINE|PASS_FSCK_DEBUG) \
|
|
+ x(check_extents_to_backpointers, 14, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_alloc_to_lru_refs, 15, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(fs_freespace_init, 16, PASS_ALWAYS|PASS_SILENT) \
|
|
+ x(bucket_gens_init, 17, 0) \
|
|
+ x(reconstruct_snapshots, 38, 0) \
|
|
+ x(check_snapshot_trees, 18, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_snapshots, 19, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_subvols, 20, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_subvol_children, 35, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(delete_dead_snapshots, 21, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(fs_upgrade_for_subvolumes, 22, 0) \
|
|
+ x(check_inodes, 24, PASS_FSCK) \
|
|
+ x(check_extents, 25, PASS_FSCK) \
|
|
+ x(check_indirect_extents, 26, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_dirents, 27, PASS_FSCK) \
|
|
+ x(check_xattrs, 28, PASS_FSCK) \
|
|
+ x(check_root, 29, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_unreachable_inodes, 40, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_subvolume_structure, 36, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_directory_structure, 30, PASS_ONLINE|PASS_FSCK) \
|
|
+ x(check_nlinks, 31, PASS_FSCK) \
|
|
+ x(resume_logged_ops, 23, PASS_ALWAYS) \
|
|
+ x(delete_dead_inodes, 32, PASS_ALWAYS) \
|
|
+ x(fix_reflink_p, 33, 0) \
|
|
+ x(set_fs_needs_rebalance, 34, 0)
|
|
|
|
/* We normally enumerate recovery passes in the order we run them: */
|
|
enum bch_recovery_pass {
|
|
diff --git a/fs/bcachefs/sb-errors_format.h b/fs/bcachefs/sb-errors_format.h
|
|
index 0bc4cec2926c..806486635075 100644
|
|
--- a/fs/bcachefs/sb-errors_format.h
|
|
+++ b/fs/bcachefs/sb-errors_format.h
|
|
@@ -140,8 +140,8 @@ enum bch_fsck_flags {
|
|
x(backpointer_bucket_offset_wrong, 125, 0) \
|
|
x(backpointer_level_bad, 294, 0) \
|
|
x(backpointer_dev_bad, 297, 0) \
|
|
- x(backpointer_to_missing_device, 126, 0) \
|
|
- x(backpointer_to_missing_alloc, 127, 0) \
|
|
+ x(backpointer_to_missing_device, 126, FSCK_AUTOFIX) \
|
|
+ x(backpointer_to_missing_alloc, 127, FSCK_AUTOFIX) \
|
|
x(backpointer_to_missing_ptr, 128, FSCK_AUTOFIX) \
|
|
x(lru_entry_at_time_0, 129, FSCK_AUTOFIX) \
|
|
x(lru_entry_to_invalid_bucket, 130, FSCK_AUTOFIX) \
|
|
--
|
|
2.45.2
|
|
|