bcachefs: don't attempt rw on unfreeze when shutdown
authorBrian Foster <bfoster@redhat.com>
Tue, 5 Dec 2023 13:24:38 +0000 (08:24 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 6 Dec 2023 05:21:30 +0000 (00:21 -0500)
The internal freeze mechanism in bcachefs mostly reuses the generic
rw<->ro transition code. If the fs happens to shutdown during or
after freeze, a transition back to rw can fail. This is expected,
but returning an error from the unfreeze callout prevents the
filesystem from being unfrozen.

Skip the read write transition if the fs is shutdown. This allows
the fs to unfreeze at the vfs level so writes will no longer block,
but will still fail due to the emergency read-only state of the fs.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs.c

index 4d51be813509891458735d494b44e36c043035c6..371565e02ff273cdded33d32ce3f913deccccad6 100644 (file)
@@ -1733,6 +1733,9 @@ static int bch2_unfreeze(struct super_block *sb)
        struct bch_fs *c = sb->s_fs_info;
        int ret;
 
+       if (test_bit(BCH_FS_EMERGENCY_RO, &c->flags))
+               return 0;
+
        down_write(&c->state_lock);
        ret = bch2_fs_read_write(c);
        up_write(&c->state_lock);