virtiofs: clean up error handling in virtio_fs_get_tree()
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 11 Nov 2020 16:22:32 +0000 (17:22 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 11 Nov 2020 16:22:32 +0000 (17:22 +0100)
Avoid duplicating error cleanup.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/virtio_fs.c

index 62d89b9..8868ac3 100644 (file)
@@ -1420,22 +1420,14 @@ static int virtio_fs_get_tree(struct fs_context *fsc)
                return -EINVAL;
        }
 
+       err = -ENOMEM;
        fc = kzalloc(sizeof(struct fuse_conn), GFP_KERNEL);
-       if (!fc) {
-               mutex_lock(&virtio_fs_mutex);
-               virtio_fs_put(fs);
-               mutex_unlock(&virtio_fs_mutex);
-               return -ENOMEM;
-       }
+       if (!fc)
+               goto out_err;
 
        fm = kzalloc(sizeof(struct fuse_mount), GFP_KERNEL);
-       if (!fm) {
-               mutex_lock(&virtio_fs_mutex);
-               virtio_fs_put(fs);
-               mutex_unlock(&virtio_fs_mutex);
-               kfree(fc);
-               return -ENOMEM;
-       }
+       if (!fm)
+               goto out_err;
 
        fuse_conn_init(fc, fm, get_user_ns(current_user_ns()),
                       &virtio_fs_fiq_ops, fs);
@@ -1468,6 +1460,13 @@ static int virtio_fs_get_tree(struct fs_context *fsc)
        WARN_ON(fsc->root);
        fsc->root = dget(sb->s_root);
        return 0;
+
+out_err:
+       kfree(fc);
+       mutex_lock(&virtio_fs_mutex);
+       virtio_fs_put(fs);
+       mutex_unlock(&virtio_fs_mutex);
+       return err;
 }
 
 static const struct fs_context_operations virtio_fs_context_ops = {