Commit c191cd07 authored by Miklos Szeredi's avatar Miklos Szeredi

fuse: clean up fuse_mount destruction

1. call fuse_mount_destroy() for open coded variants

2. before deactivate_locked_super() don't need fuse_mount destruction since
that will now be done (if ->s_fs_info is not cleared)

3. rearrange fuse_mount setup in fuse_get_tree_submount() so that the
regular pattern can be used
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent a27c061a
...@@ -1415,20 +1415,17 @@ static int fuse_get_tree_submount(struct fs_context *fsc) ...@@ -1415,20 +1415,17 @@ static int fuse_get_tree_submount(struct fs_context *fsc)
if (!fm) if (!fm)
return -ENOMEM; return -ENOMEM;
fm->fc = fuse_conn_get(fc);
fsc->s_fs_info = fm; fsc->s_fs_info = fm;
sb = sget_fc(fsc, NULL, set_anon_super_fc); sb = sget_fc(fsc, NULL, set_anon_super_fc);
if (IS_ERR(sb)) { if (fsc->s_fs_info)
kfree(fm); fuse_mount_destroy(fm);
if (IS_ERR(sb))
return PTR_ERR(sb); return PTR_ERR(sb);
}
fm->fc = fuse_conn_get(fc);
/* Initialize superblock, making @mp_fi its root */ /* Initialize superblock, making @mp_fi its root */
err = fuse_fill_super_submount(sb, mp_fi); err = fuse_fill_super_submount(sb, mp_fi);
if (err) { if (err) {
fuse_conn_put(fc);
kfree(fm);
sb->s_fs_info = NULL;
deactivate_locked_super(sb); deactivate_locked_super(sb);
return err; return err;
} }
...@@ -1595,16 +1592,12 @@ static int fuse_fill_super(struct super_block *sb, struct fs_context *fsc) ...@@ -1595,16 +1592,12 @@ static int fuse_fill_super(struct super_block *sb, struct fs_context *fsc)
err = fuse_fill_super_common(sb, ctx); err = fuse_fill_super_common(sb, ctx);
if (err) if (err)
goto err_put_conn; goto err;
/* file->private_data shall be visible on all CPUs after this */ /* file->private_data shall be visible on all CPUs after this */
smp_mb(); smp_mb();
fuse_send_init(get_fuse_mount_super(sb)); fuse_send_init(get_fuse_mount_super(sb));
return 0; return 0;
err_put_conn:
fuse_conn_put(fc);
kfree(fm);
sb->s_fs_info = NULL;
err: err:
return err; return err;
} }
......
...@@ -1456,19 +1456,14 @@ static int virtio_fs_get_tree(struct fs_context *fsc) ...@@ -1456,19 +1456,14 @@ static int virtio_fs_get_tree(struct fs_context *fsc)
fsc->s_fs_info = fm; fsc->s_fs_info = fm;
sb = sget_fc(fsc, virtio_fs_test_super, set_anon_super_fc); sb = sget_fc(fsc, virtio_fs_test_super, set_anon_super_fc);
if (fsc->s_fs_info) { if (fsc->s_fs_info)
fuse_conn_put(fc); fuse_mount_destroy(fm);
kfree(fm);
}
if (IS_ERR(sb)) if (IS_ERR(sb))
return PTR_ERR(sb); return PTR_ERR(sb);
if (!sb->s_root) { if (!sb->s_root) {
err = virtio_fs_fill_super(sb, fsc); err = virtio_fs_fill_super(sb, fsc);
if (err) { if (err) {
fuse_conn_put(fc);
kfree(fm);
sb->s_fs_info = NULL;
deactivate_locked_super(sb); deactivate_locked_super(sb);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment