Loading fs/bcachefs/fs.c +15 −31 Original line number Diff line number Diff line Loading @@ -1888,25 +1888,24 @@ static int bch2_test_super(struct super_block *s, void *data) return true; } static struct dentry *bch2_mount(struct file_system_type *fs_type, int flags, const char *dev_name, struct bch2_opts_parse opts_parse) static int bch2_fs_get_tree(struct fs_context *fc) { struct bch_fs *c; struct super_block *sb; struct inode *vinode; struct bch_opts opts = opts_parse.opts; struct bch2_opts_parse *opts_parse = fc->fs_private; struct bch_opts opts = opts_parse->opts; int ret; opt_set(opts, read_only, (flags & SB_RDONLY) != 0); opt_set(opts, read_only, (fc->sb_flags & SB_RDONLY) != 0); if (!dev_name || strlen(dev_name) == 0) return ERR_PTR(-EINVAL); if (!fc->source || strlen(fc->source) == 0) return -EINVAL; darray_str devs; ret = bch2_split_devs(dev_name, &devs); ret = bch2_split_devs(fc->source, &devs); if (ret) return ERR_PTR(ret); return ret; darray_fs devs_to_fs = {}; darray_for_each(devs, i) { Loading @@ -1917,7 +1916,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, } } sb = sget(fs_type, bch2_test_super, bch2_noset_super, flags|SB_NOSEC, &devs_to_fs); sb = sget(fc->fs_type, bch2_test_super, bch2_noset_super, fc->sb_flags|SB_NOSEC, &devs_to_fs); if (!IS_ERR(sb)) goto got_sb; Loading @@ -1928,7 +1927,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, } /* Some options can't be parsed until after the fs is started: */ ret = bch2_parse_mount_opts(c, &opts, NULL, opts_parse.parse_later.buf); ret = bch2_parse_mount_opts(c, &opts, NULL, opts_parse->parse_later.buf); if (ret) { bch2_fs_stop(c); sb = ERR_PTR(ret); Loading @@ -1937,7 +1936,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, bch2_opts_apply(&c->opts, opts); sb = sget(fs_type, NULL, bch2_set_super, flags|SB_NOSEC, c); sb = sget(fc->fs_type, NULL, bch2_set_super, fc->sb_flags|SB_NOSEC, c); if (IS_ERR(sb)) bch2_fs_stop(c); got_sb: Loading @@ -1952,7 +1951,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, c = sb->s_fs_info; if (sb->s_root) { if ((flags ^ sb->s_flags) & SB_RDONLY) { if ((fc->sb_flags ^ sb->s_flags) & SB_RDONLY) { ret = -EBUSY; goto err_put_super; } Loading Loading @@ -2018,7 +2017,8 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, sb->s_flags |= SB_ACTIVE; out: return dget(sb->s_root); fc->root = dget(sb->s_root); return 0; err_put_super: __bch2_fs_stop(c); Loading @@ -2034,7 +2034,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, */ if (bch2_err_matches(ret, EROFS) && ret != -EROFS) ret = -EIO; return ERR_PTR(bch2_err_class(ret)); return bch2_err_class(ret); } static void bch2_kill_sb(struct super_block *sb) Loading Loading @@ -2079,22 +2079,6 @@ static int bch2_fs_parse_param(struct fs_context *fc, return bch2_err_class(ret); } static int bch2_fs_get_tree(struct fs_context *fc) { struct bch2_opts_parse *opts = fc->fs_private; const char *dev_name = fc->source; struct dentry *root; root = bch2_mount(fc->fs_type, fc->sb_flags, dev_name, *opts); if (IS_ERR(root)) return PTR_ERR(root); fc->root = root; return 0; } static int bch2_fs_reconfigure(struct fs_context *fc) { struct super_block *sb = fc->root->d_sb; Loading Loading
fs/bcachefs/fs.c +15 −31 Original line number Diff line number Diff line Loading @@ -1888,25 +1888,24 @@ static int bch2_test_super(struct super_block *s, void *data) return true; } static struct dentry *bch2_mount(struct file_system_type *fs_type, int flags, const char *dev_name, struct bch2_opts_parse opts_parse) static int bch2_fs_get_tree(struct fs_context *fc) { struct bch_fs *c; struct super_block *sb; struct inode *vinode; struct bch_opts opts = opts_parse.opts; struct bch2_opts_parse *opts_parse = fc->fs_private; struct bch_opts opts = opts_parse->opts; int ret; opt_set(opts, read_only, (flags & SB_RDONLY) != 0); opt_set(opts, read_only, (fc->sb_flags & SB_RDONLY) != 0); if (!dev_name || strlen(dev_name) == 0) return ERR_PTR(-EINVAL); if (!fc->source || strlen(fc->source) == 0) return -EINVAL; darray_str devs; ret = bch2_split_devs(dev_name, &devs); ret = bch2_split_devs(fc->source, &devs); if (ret) return ERR_PTR(ret); return ret; darray_fs devs_to_fs = {}; darray_for_each(devs, i) { Loading @@ -1917,7 +1916,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, } } sb = sget(fs_type, bch2_test_super, bch2_noset_super, flags|SB_NOSEC, &devs_to_fs); sb = sget(fc->fs_type, bch2_test_super, bch2_noset_super, fc->sb_flags|SB_NOSEC, &devs_to_fs); if (!IS_ERR(sb)) goto got_sb; Loading @@ -1928,7 +1927,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, } /* Some options can't be parsed until after the fs is started: */ ret = bch2_parse_mount_opts(c, &opts, NULL, opts_parse.parse_later.buf); ret = bch2_parse_mount_opts(c, &opts, NULL, opts_parse->parse_later.buf); if (ret) { bch2_fs_stop(c); sb = ERR_PTR(ret); Loading @@ -1937,7 +1936,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, bch2_opts_apply(&c->opts, opts); sb = sget(fs_type, NULL, bch2_set_super, flags|SB_NOSEC, c); sb = sget(fc->fs_type, NULL, bch2_set_super, fc->sb_flags|SB_NOSEC, c); if (IS_ERR(sb)) bch2_fs_stop(c); got_sb: Loading @@ -1952,7 +1951,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, c = sb->s_fs_info; if (sb->s_root) { if ((flags ^ sb->s_flags) & SB_RDONLY) { if ((fc->sb_flags ^ sb->s_flags) & SB_RDONLY) { ret = -EBUSY; goto err_put_super; } Loading Loading @@ -2018,7 +2017,8 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, sb->s_flags |= SB_ACTIVE; out: return dget(sb->s_root); fc->root = dget(sb->s_root); return 0; err_put_super: __bch2_fs_stop(c); Loading @@ -2034,7 +2034,7 @@ static struct dentry *bch2_mount(struct file_system_type *fs_type, */ if (bch2_err_matches(ret, EROFS) && ret != -EROFS) ret = -EIO; return ERR_PTR(bch2_err_class(ret)); return bch2_err_class(ret); } static void bch2_kill_sb(struct super_block *sb) Loading Loading @@ -2079,22 +2079,6 @@ static int bch2_fs_parse_param(struct fs_context *fc, return bch2_err_class(ret); } static int bch2_fs_get_tree(struct fs_context *fc) { struct bch2_opts_parse *opts = fc->fs_private; const char *dev_name = fc->source; struct dentry *root; root = bch2_mount(fc->fs_type, fc->sb_flags, dev_name, *opts); if (IS_ERR(root)) return PTR_ERR(root); fc->root = root; return 0; } static int bch2_fs_reconfigure(struct fs_context *fc) { struct super_block *sb = fc->root->d_sb; Loading