bcachefs: BCH_FS_recovery_running
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 27 Nov 2024 08:00:54 +0000 (03:00 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:20 +0000 (01:36 -0500)
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>
fs/bcachefs/bcachefs.h
fs/bcachefs/error.c
fs/bcachefs/recovery.c

index a85b3bcc6383db551ebc040c4f8175a2434a0f60..d88129503bc558ce878b97f291399a7171969a1c 100644 (file)
@@ -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)   \
index 9a695322b33c259c99d4492f61baf137f42e76da..5b67361b0cf196a03cef153af0674a0986f9f0ea 100644 (file)
@@ -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 {
index 64bb330eac861f738cb4f2b062edb55d7fb53982..c50dede6478509ea45ebf8766c8effbd081a19b1 100644 (file)
@@ -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 @@ use_clean:
         */
        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);