diff options
-rw-r--r-- | drivers/block/virtio_blk.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 1523e05c46fc..93b1aaa5ba3b 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
@@ -391,22 +391,16 @@ static int init_vq(struct virtio_blk *vblk) | |||
391 | num_vqs = 1; | 391 | num_vqs = 1; |
392 | 392 | ||
393 | vblk->vqs = kmalloc(sizeof(*vblk->vqs) * num_vqs, GFP_KERNEL); | 393 | vblk->vqs = kmalloc(sizeof(*vblk->vqs) * num_vqs, GFP_KERNEL); |
394 | if (!vblk->vqs) { | 394 | if (!vblk->vqs) |
395 | err = -ENOMEM; | 395 | return -ENOMEM; |
396 | goto out; | ||
397 | } | ||
398 | 396 | ||
399 | names = kmalloc(sizeof(*names) * num_vqs, GFP_KERNEL); | 397 | names = kmalloc(sizeof(*names) * num_vqs, GFP_KERNEL); |
400 | if (!names) | ||
401 | goto err_names; | ||
402 | |||
403 | callbacks = kmalloc(sizeof(*callbacks) * num_vqs, GFP_KERNEL); | 398 | callbacks = kmalloc(sizeof(*callbacks) * num_vqs, GFP_KERNEL); |
404 | if (!callbacks) | ||
405 | goto err_callbacks; | ||
406 | |||
407 | vqs = kmalloc(sizeof(*vqs) * num_vqs, GFP_KERNEL); | 399 | vqs = kmalloc(sizeof(*vqs) * num_vqs, GFP_KERNEL); |
408 | if (!vqs) | 400 | if (!names || !callbacks || !vqs) { |
409 | goto err_vqs; | 401 | err = -ENOMEM; |
402 | goto out; | ||
403 | } | ||
410 | 404 | ||
411 | for (i = 0; i < num_vqs; i++) { | 405 | for (i = 0; i < num_vqs; i++) { |
412 | callbacks[i] = virtblk_done; | 406 | callbacks[i] = virtblk_done; |
@@ -417,7 +411,7 @@ static int init_vq(struct virtio_blk *vblk) | |||
417 | /* Discover virtqueues and write information to configuration. */ | 411 | /* Discover virtqueues and write information to configuration. */ |
418 | err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names); | 412 | err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names); |
419 | if (err) | 413 | if (err) |
420 | goto err_find_vqs; | 414 | goto out; |
421 | 415 | ||
422 | for (i = 0; i < num_vqs; i++) { | 416 | for (i = 0; i < num_vqs; i++) { |
423 | spin_lock_init(&vblk->vqs[i].lock); | 417 | spin_lock_init(&vblk->vqs[i].lock); |
@@ -425,16 +419,12 @@ static int init_vq(struct virtio_blk *vblk) | |||
425 | } | 419 | } |
426 | vblk->num_vqs = num_vqs; | 420 | vblk->num_vqs = num_vqs; |
427 | 421 | ||
428 | err_find_vqs: | 422 | out: |
429 | kfree(vqs); | 423 | kfree(vqs); |
430 | err_vqs: | ||
431 | kfree(callbacks); | 424 | kfree(callbacks); |
432 | err_callbacks: | ||
433 | kfree(names); | 425 | kfree(names); |
434 | err_names: | ||
435 | if (err) | 426 | if (err) |
436 | kfree(vblk->vqs); | 427 | kfree(vblk->vqs); |
437 | out: | ||
438 | return err; | 428 | return err; |
439 | } | 429 | } |
440 | 430 | ||