Messages in this thread | | | Subject | Re: [PATCH net] vhost_net: don't continue to call the recvmsg when meet errors | From | Jason Wang <> | Date | Thu, 1 Dec 2016 11:37:01 +0800 |
| |
On 2016年12月01日 11:27, Michael S. Tsirkin wrote: > On Thu, Dec 01, 2016 at 11:26:21AM +0800, Jason Wang wrote: >> > >> > >> >On 2016年12月01日 11:21, Michael S. Tsirkin wrote: >>> > >On Thu, Dec 01, 2016 at 02:48:59AM +0000, wangyunjian wrote: >>>>> > > > >-----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: >>>>>> > > > > >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.
| |