Commit 9c618560 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Call bch2_fs_start before getting vfs superblock



This reverts

1fdbe0b1 bcachefs: Make sure c->vfs_sb is set before starting fs

switched up bch2_fs_get_tree() so that we got a superblock before
calling bch2_fs_start, so that c->vfs_sb would always be initialized
while the filesystem was active.

This turned out not to be necessary, because blk_holder_ops were
implemented using our own locking, not vfs locking.

And this had the side effect of creating a super_block and doing our
full recovery (including potentially fsck) before setting SB_BORN, which
causes things like sync calls to hang until our recovery is finished.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent aed4ccbf
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -2502,10 +2502,9 @@ static int bch2_fs_get_tree(struct fs_context *fc)

	bch2_opts_apply(&c->opts, opts);

	/*
	 * need to initialise sb and set c->vfs_sb _before_ starting fs,
	 * for blk_holder_ops
	 */
	ret = bch2_fs_start(c);
	if (ret)
		goto err_stop_fs;

	sb = sget(fc->fs_type, NULL, bch2_set_super, fc->sb_flags|SB_NOSEC, c);
	ret = PTR_ERR_OR_ZERO(sb);
@@ -2567,10 +2566,6 @@ static int bch2_fs_get_tree(struct fs_context *fc)

	sb->s_shrink->seeks = 0;

	ret = bch2_fs_start(c);
	if (ret)
		goto err_put_super;

#ifdef CONFIG_UNICODE
	sb->s_encoding = c->cf_encoding;
#endif