Re: [PATCH net] vhost_net: don't continue to call the recvmsg when meet errors
From: Jason Wang <hidden>
Date: 2016-12-01 03:37:08
Also in:
lkml
On 2016年12月01日 11:27, Michael S. Tsirkin wrote:
On Thu, Dec 01, 2016 at 11:26:21AM +0800, Jason Wang wrote:quoted
quoted
On 2016年12月01日 11:21, Michael S. Tsirkin wrote:quoted
quoted
On Thu, Dec 01, 2016 at 02:48:59AM +0000, wangyunjian wrote:quoted
quoted
quoted
quoted
-----Original Message----- From: Michael S. Tsirkin [mailto:mst@redhat.com] Sent: Wednesday, November 30, 2016 9:41 PM To: wangyunjian Cc:jasowang@redhat.com;netdev@vger.kernel.org;linux-kernel@vger.kernel.org; caihe Subject: Re: [PATCH net] vhost_net: don't continue to call the recvmsg when meet errors On Wed, Nov 30, 2016 at 08:10:57PM +0800, Yunjian Wang wrote:quoted
quoted
When we meet an error(err=-EBADFD) recvmsg,How do you get EBADFD? Won't vhost_net_rx_peek_head_len return 0 in this case, breaking the loop?We started many guest VMs while attaching/detaching some virtio-net nics for loop. The soft lockup might happened. The err is -EBADFD.OK, I'd like to figure out what happened here. why don't we get 0 when we peek at the head? EBADFD is from here: struct tun_struct *tun = __tun_get(tfile); ... if (!tun) return -EBADFD; but then: static int tun_peek_len(struct socket *sock) { ... struct tun_struct *tun; ... tun = __tun_get(tfile); if (!tun) return 0; so peek len should return 0. then while will exit: while ((sock_len = vhost_net_rx_peek_head_len(net, sock->sk))) ...Consider this case: user do ip link del link tap0 before recvmsg() but after tun_peek_len() ?Sure, this can happen, but I think we'll just exit on the next loop, won't we?
Right, this is the only case I can image for -EBADFD, let's wait for the author to the steps.