summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/fs.c8
-rw-r--r--fs/bcachefs/super.c2
2 files changed, 9 insertions, 1 deletions
diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c
index 8958957b648b..80dcda43e26b 100644
--- a/fs/bcachefs/fs.c
+++ b/fs/bcachefs/fs.c
@@ -1906,7 +1906,10 @@ out:
return dget(sb->s_root);
err_put_super:
+ sb->s_fs_info = NULL;
+ c->vfs_sb = NULL;
deactivate_locked_super(sb);
+ bch2_fs_stop(c);
return ERR_PTR(bch2_err_class(ret));
}
@@ -1914,8 +1917,11 @@ static void bch2_kill_sb(struct super_block *sb)
{
struct bch_fs *c = sb->s_fs_info;
+ if (c)
+ c->vfs_sb = NULL;
generic_shutdown_super(sb);
- bch2_fs_free(c);
+ if (c)
+ bch2_fs_free(c);
}
static struct file_system_type bcache_fs_type = {
diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
index 48670c8b56aa..e7dbc31be36d 100644
--- a/fs/bcachefs/super.c
+++ b/fs/bcachefs/super.c
@@ -581,6 +581,8 @@ void bch2_fs_free(struct bch_fs *c)
{
unsigned i;
+ BUG_ON(!test_bit(BCH_FS_STOPPING, &c->flags));
+
mutex_lock(&bch_fs_list_lock);
list_del(&c->list);
mutex_unlock(&bch_fs_list_lock);