bcachefs: Fix bch2_write_super to obey very_degraded option
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 9 Apr 2021 23:04:57 +0000 (19:04 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:54 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/super-io.c

index ce370cf2a72f7741ab183a5dab8d5808f4254efb..776c026ac838c65feb76a92e4e8e7bfcd44863e4 100644 (file)
@@ -699,8 +699,12 @@ int bch2_write_super(struct bch_fs *c)
        const char *err;
        struct bch_devs_mask sb_written;
        bool wrote, can_mount_without_written, can_mount_with_written;
+       unsigned degraded_flags = BCH_FORCE_IF_DEGRADED;
        int ret = 0;
 
+       if (c->opts.very_degraded)
+               degraded_flags |= BCH_FORCE_IF_LOST;
+
        lockdep_assert_held(&c->sb_lock);
 
        closure_init_stack(cl);
@@ -769,13 +773,13 @@ int bch2_write_super(struct bch_fs *c)
        nr_wrote = dev_mask_nr(&sb_written);
 
        can_mount_with_written =
-               bch2_have_enough_devs(c, sb_written, BCH_FORCE_IF_DEGRADED, false);
+               bch2_have_enough_devs(c, sb_written, degraded_flags, false);
 
        for (i = 0; i < ARRAY_SIZE(sb_written.d); i++)
                sb_written.d[i] = ~sb_written.d[i];
 
        can_mount_without_written =
-               bch2_have_enough_devs(c, sb_written, BCH_FORCE_IF_DEGRADED, false);
+               bch2_have_enough_devs(c, sb_written, degraded_flags, false);
 
        /*
         * If we would be able to mount _without_ the devices we successfully