]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
nbd: fix setting of 'error' in NBD_DO_IT ioctl
authorJens Axboe <axboe@fb.com>
Wed, 23 Nov 2016 02:09:45 +0000 (19:09 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 23 Nov 2016 02:09:45 +0000 (19:09 -0700)
Multiple paths don't set it properly, ensure that we do.

Fixes: 9561a7ade0c2 ("nbd: add multi-connection support")
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/nbd.c

index e683e2241cbdaed583d2314b3868c114021a559c..dc722a7adf580a8c56f4db661e8c8be8999c971e 100644 (file)
@@ -745,7 +745,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
        case NBD_DO_IT: {
                struct recv_thread_args *args;
                int num_connections = nbd->num_connections;
-               int error, i;
+               int error = 0, i;
 
                if (nbd->task_recv)
                        return -EBUSY;
@@ -754,14 +754,17 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
                if (num_connections > 1 &&
                    !(nbd->flags & NBD_FLAG_CAN_MULTI_CONN)) {
                        dev_err(disk_to_dev(nbd->disk), "server does not support multiple connections per device.\n");
+                       error = -EINVAL;
                        goto out_err;
                }
 
                set_bit(NBD_RUNNING, &nbd->runtime_flags);
                blk_mq_update_nr_hw_queues(&nbd->tag_set, nbd->num_connections);
                args = kcalloc(num_connections, sizeof(*args), GFP_KERNEL);
-               if (!args)
+               if (!args) {
+                       error = -ENOMEM;
                        goto out_err;
+               }
                nbd->task_recv = current;
                mutex_unlock(&nbd->config_lock);