diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/vhost/net.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/vhost/net.c')
| -rw-r--r-- | drivers/vhost/net.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 07181cd8d52e..ae2273196b0c 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -935,13 +935,18 @@ static void handle_tx_zerocopy(struct vhost_net *net, struct socket *sock)  		err = sock->ops->sendmsg(sock, &msg, len);  		if (unlikely(err < 0)) { +			bool retry = err == -EAGAIN || err == -ENOMEM || err == -ENOBUFS; +  			if (zcopy_used) {  				if (vq->heads[ubuf->desc].len == VHOST_DMA_IN_PROGRESS)  					vhost_net_ubuf_put(ubufs); -				nvq->upend_idx = ((unsigned)nvq->upend_idx - 1) -					% UIO_MAXIOV; +				if (retry) +					nvq->upend_idx = ((unsigned)nvq->upend_idx - 1) +						% UIO_MAXIOV; +				else +					vq->heads[ubuf->desc].len = VHOST_DMA_DONE_LEN;  			} -			if (err == -EAGAIN || err == -ENOMEM || err == -ENOBUFS) { +			if (retry) {  				vhost_discard_vq_desc(vq, 1);  				vhost_net_enable_vq(net, vq);  				break;  |