67 lines
2.2 KiB
Diff
67 lines
2.2 KiB
Diff
From 8afb03592ffda8f215e4b6816f847a32ad2ac53d Mon Sep 17 00:00:00 2001
|
|
From: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Date: Wed, 27 Nov 2024 03:00:54 -0500
|
|
Subject: [PATCH 133/233] bcachefs: BCH_FS_recovery_running
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
If we're autofixing topology errors, we shouldn't shutdown if we're
|
|
still in recovery.
|
|
|
|
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
|
|
---
|
|
fs/bcachefs/bcachefs.h | 1 +
|
|
fs/bcachefs/error.c | 2 +-
|
|
fs/bcachefs/recovery.c | 2 ++
|
|
3 files changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/fs/bcachefs/bcachefs.h b/fs/bcachefs/bcachefs.h
|
|
index a85b3bcc6383..d88129503bc5 100644
|
|
--- a/fs/bcachefs/bcachefs.h
|
|
+++ b/fs/bcachefs/bcachefs.h
|
|
@@ -614,6 +614,7 @@ struct bch_dev {
|
|
x(going_ro) \
|
|
x(write_disable_complete) \
|
|
x(clean_shutdown) \
|
|
+ x(recovery_running) \
|
|
x(fsck_running) \
|
|
x(initial_gc_unfixed) \
|
|
x(need_delete_dead_snapshots) \
|
|
diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c
|
|
index 9a695322b33c..5b67361b0cf1 100644
|
|
--- a/fs/bcachefs/error.c
|
|
+++ b/fs/bcachefs/error.c
|
|
@@ -34,7 +34,7 @@ bool bch2_inconsistent_error(struct bch_fs *c)
|
|
int bch2_topology_error(struct bch_fs *c)
|
|
{
|
|
set_bit(BCH_FS_topology_error, &c->flags);
|
|
- if (!test_bit(BCH_FS_fsck_running, &c->flags)) {
|
|
+ if (!test_bit(BCH_FS_recovery_running, &c->flags)) {
|
|
bch2_inconsistent_error(c);
|
|
return -BCH_ERR_btree_need_topology_repair;
|
|
} else {
|
|
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
|
|
index 64bb330eac86..c50dede64785 100644
|
|
--- a/fs/bcachefs/recovery.c
|
|
+++ b/fs/bcachefs/recovery.c
|
|
@@ -774,6 +774,7 @@ int bch2_fs_recovery(struct bch_fs *c)
|
|
set_bit(BCH_FS_fsck_running, &c->flags);
|
|
if (c->sb.clean)
|
|
set_bit(BCH_FS_clean_recovery, &c->flags);
|
|
+ set_bit(BCH_FS_recovery_running, &c->flags);
|
|
|
|
ret = bch2_blacklist_table_initialize(c);
|
|
if (ret) {
|
|
@@ -925,6 +926,7 @@ int bch2_fs_recovery(struct bch_fs *c)
|
|
*/
|
|
set_bit(BCH_FS_may_go_rw, &c->flags);
|
|
clear_bit(BCH_FS_fsck_running, &c->flags);
|
|
+ clear_bit(BCH_FS_recovery_running, &c->flags);
|
|
|
|
/* in case we don't run journal replay, i.e. norecovery mode */
|
|
set_bit(BCH_FS_accounting_replay_done, &c->flags);
|
|
--
|
|
2.45.2
|
|
|