Commit feffa5cc authored by Jens Axboe's avatar Jens Axboe

nbd: fix setting of 'error' in NBD_DO_IT ioctl

Multiple paths don't set it properly, ensure that we do.

Fixes: 9561a7ad ("nbd: add multi-connection support")
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 63db89ea
...@@ -745,7 +745,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, ...@@ -745,7 +745,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
case NBD_DO_IT: { case NBD_DO_IT: {
struct recv_thread_args *args; struct recv_thread_args *args;
int num_connections = nbd->num_connections; int num_connections = nbd->num_connections;
int error, i; int error = 0, i;
if (nbd->task_recv) if (nbd->task_recv)
return -EBUSY; return -EBUSY;
...@@ -754,14 +754,17 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, ...@@ -754,14 +754,17 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
if (num_connections > 1 && if (num_connections > 1 &&
!(nbd->flags & NBD_FLAG_CAN_MULTI_CONN)) { !(nbd->flags & NBD_FLAG_CAN_MULTI_CONN)) {
dev_err(disk_to_dev(nbd->disk), "server does not support multiple connections per device.\n"); dev_err(disk_to_dev(nbd->disk), "server does not support multiple connections per device.\n");
error = -EINVAL;
goto out_err; goto out_err;
} }
set_bit(NBD_RUNNING, &nbd->runtime_flags); set_bit(NBD_RUNNING, &nbd->runtime_flags);
blk_mq_update_nr_hw_queues(&nbd->tag_set, nbd->num_connections); blk_mq_update_nr_hw_queues(&nbd->tag_set, nbd->num_connections);
args = kcalloc(num_connections, sizeof(*args), GFP_KERNEL); args = kcalloc(num_connections, sizeof(*args), GFP_KERNEL);
if (!args) if (!args) {
error = -ENOMEM;
goto out_err; goto out_err;
}
nbd->task_recv = current; nbd->task_recv = current;
mutex_unlock(&nbd->config_lock); mutex_unlock(&nbd->config_lock);
......
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