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);
        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 = {