diff options
| -rw-r--r-- | drivers/vhost/net.c | 10 | ||||
| -rw-r--r-- | drivers/vhost/vhost.c | 18 |
2 files changed, 18 insertions, 10 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index ad37da2b6cb5..a6a88dfd5029 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c | |||
| @@ -125,7 +125,7 @@ static void handle_tx(struct vhost_net *net) | |||
| 125 | mutex_lock(&vq->mutex); | 125 | mutex_lock(&vq->mutex); |
| 126 | vhost_disable_notify(vq); | 126 | vhost_disable_notify(vq); |
| 127 | 127 | ||
| 128 | if (wmem < sock->sk->sk_sndbuf * 2) | 128 | if (wmem < sock->sk->sk_sndbuf / 2) |
| 129 | tx_poll_stop(net); | 129 | tx_poll_stop(net); |
| 130 | hdr_size = vq->hdr_size; | 130 | hdr_size = vq->hdr_size; |
| 131 | 131 | ||
| @@ -508,12 +508,12 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) | |||
| 508 | /* Verify that ring has been setup correctly. */ | 508 | /* Verify that ring has been setup correctly. */ |
| 509 | if (!vhost_vq_access_ok(vq)) { | 509 | if (!vhost_vq_access_ok(vq)) { |
| 510 | r = -EFAULT; | 510 | r = -EFAULT; |
| 511 | goto err; | 511 | goto err_vq; |
| 512 | } | 512 | } |
| 513 | sock = get_socket(fd); | 513 | sock = get_socket(fd); |
| 514 | if (IS_ERR(sock)) { | 514 | if (IS_ERR(sock)) { |
| 515 | r = PTR_ERR(sock); | 515 | r = PTR_ERR(sock); |
| 516 | goto err; | 516 | goto err_vq; |
| 517 | } | 517 | } |
| 518 | 518 | ||
| 519 | /* start polling new socket */ | 519 | /* start polling new socket */ |
| @@ -524,12 +524,14 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) | |||
| 524 | vhost_net_disable_vq(n, vq); | 524 | vhost_net_disable_vq(n, vq); |
| 525 | rcu_assign_pointer(vq->private_data, sock); | 525 | rcu_assign_pointer(vq->private_data, sock); |
| 526 | vhost_net_enable_vq(n, vq); | 526 | vhost_net_enable_vq(n, vq); |
| 527 | mutex_unlock(&vq->mutex); | ||
| 528 | done: | 527 | done: |
| 529 | if (oldsock) { | 528 | if (oldsock) { |
| 530 | vhost_net_flush_vq(n, index); | 529 | vhost_net_flush_vq(n, index); |
| 531 | fput(oldsock->file); | 530 | fput(oldsock->file); |
| 532 | } | 531 | } |
| 532 | |||
| 533 | err_vq: | ||
| 534 | mutex_unlock(&vq->mutex); | ||
| 533 | err: | 535 | err: |
| 534 | mutex_unlock(&n->dev.mutex); | 536 | mutex_unlock(&n->dev.mutex); |
| 535 | return r; | 537 | return r; |
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 7cd55e078794..7bd7a1e4409d 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c | |||
| @@ -476,8 +476,10 @@ static long vhost_set_vring(struct vhost_dev *d, int ioctl, void __user *argp) | |||
| 476 | if (r < 0) | 476 | if (r < 0) |
| 477 | break; | 477 | break; |
| 478 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); | 478 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); |
| 479 | if (IS_ERR(eventfp)) | 479 | if (IS_ERR(eventfp)) { |
| 480 | return PTR_ERR(eventfp); | 480 | r = PTR_ERR(eventfp); |
| 481 | break; | ||
| 482 | } | ||
| 481 | if (eventfp != vq->kick) { | 483 | if (eventfp != vq->kick) { |
| 482 | pollstop = filep = vq->kick; | 484 | pollstop = filep = vq->kick; |
| 483 | pollstart = vq->kick = eventfp; | 485 | pollstart = vq->kick = eventfp; |
| @@ -489,8 +491,10 @@ static long vhost_set_vring(struct vhost_dev *d, int ioctl, void __user *argp) | |||
| 489 | if (r < 0) | 491 | if (r < 0) |
| 490 | break; | 492 | break; |
| 491 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); | 493 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); |
| 492 | if (IS_ERR(eventfp)) | 494 | if (IS_ERR(eventfp)) { |
| 493 | return PTR_ERR(eventfp); | 495 | r = PTR_ERR(eventfp); |
| 496 | break; | ||
| 497 | } | ||
| 494 | if (eventfp != vq->call) { | 498 | if (eventfp != vq->call) { |
| 495 | filep = vq->call; | 499 | filep = vq->call; |
| 496 | ctx = vq->call_ctx; | 500 | ctx = vq->call_ctx; |
| @@ -505,8 +509,10 @@ static long vhost_set_vring(struct vhost_dev *d, int ioctl, void __user *argp) | |||
| 505 | if (r < 0) | 509 | if (r < 0) |
| 506 | break; | 510 | break; |
| 507 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); | 511 | eventfp = f.fd == -1 ? NULL : eventfd_fget(f.fd); |
| 508 | if (IS_ERR(eventfp)) | 512 | if (IS_ERR(eventfp)) { |
| 509 | return PTR_ERR(eventfp); | 513 | r = PTR_ERR(eventfp); |
| 514 | break; | ||
| 515 | } | ||
| 510 | if (eventfp != vq->error) { | 516 | if (eventfp != vq->error) { |
| 511 | filep = vq->error; | 517 | filep = vq->error; |
| 512 | vq->error = eventfp; | 518 | vq->error = eventfp; |
