bcachefs: Fix bch2_mount error path

In the bch2_mount() error path, we were calling
deactivate_locked_super(), which calls ->kill_sb(), which in our case
was calling bch2_fs_free() without __bch2_fs_stop().

This changes bch2_mount() to just call bch2_fs_stop() directly.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2023-08-18 17:44:21 -04:00
parent adc0e95091
commit 7573041ab9
2 changed files with 9 additions and 1 deletions

View file

@ -1906,7 +1906,10 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type,
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 = {

View file

@ -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);