diff options
-rw-r--r-- | drivers/vhost/vsock.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index bbbf588540ed..ce5e63d2c66a 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c | |||
@@ -373,6 +373,7 @@ static void vhost_vsock_handle_rx_kick(struct vhost_work *work) | |||
373 | 373 | ||
374 | static int vhost_vsock_start(struct vhost_vsock *vsock) | 374 | static int vhost_vsock_start(struct vhost_vsock *vsock) |
375 | { | 375 | { |
376 | struct vhost_virtqueue *vq; | ||
376 | size_t i; | 377 | size_t i; |
377 | int ret; | 378 | int ret; |
378 | 379 | ||
@@ -383,19 +384,20 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) | |||
383 | goto err; | 384 | goto err; |
384 | 385 | ||
385 | for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { | 386 | for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { |
386 | struct vhost_virtqueue *vq = &vsock->vqs[i]; | 387 | vq = &vsock->vqs[i]; |
387 | 388 | ||
388 | mutex_lock(&vq->mutex); | 389 | mutex_lock(&vq->mutex); |
389 | 390 | ||
390 | if (!vhost_vq_access_ok(vq)) { | 391 | if (!vhost_vq_access_ok(vq)) { |
391 | ret = -EFAULT; | 392 | ret = -EFAULT; |
392 | mutex_unlock(&vq->mutex); | ||
393 | goto err_vq; | 393 | goto err_vq; |
394 | } | 394 | } |
395 | 395 | ||
396 | if (!vq->private_data) { | 396 | if (!vq->private_data) { |
397 | vq->private_data = vsock; | 397 | vq->private_data = vsock; |
398 | vhost_vq_init_access(vq); | 398 | ret = vhost_vq_init_access(vq); |
399 | if (ret) | ||
400 | goto err_vq; | ||
399 | } | 401 | } |
400 | 402 | ||
401 | mutex_unlock(&vq->mutex); | 403 | mutex_unlock(&vq->mutex); |
@@ -405,8 +407,11 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) | |||
405 | return 0; | 407 | return 0; |
406 | 408 | ||
407 | err_vq: | 409 | err_vq: |
410 | vq->private_data = NULL; | ||
411 | mutex_unlock(&vq->mutex); | ||
412 | |||
408 | for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { | 413 | for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { |
409 | struct vhost_virtqueue *vq = &vsock->vqs[i]; | 414 | vq = &vsock->vqs[i]; |
410 | 415 | ||
411 | mutex_lock(&vq->mutex); | 416 | mutex_lock(&vq->mutex); |
412 | vq->private_data = NULL; | 417 | vq->private_data = NULL; |