On Thu, Dec 01, 2016 at 11:26:21AM +0800, Jason Wang wrote:
>Sure, this can happen, but I think we'll just exit on the next loop,
>
>On 2016å12æ01æ 11:21, Michael S. Tsirkin wrote:
> >On Thu, Dec 01, 2016 at 02:48:59AM +0000, wangyunjian wrote:>
> >OK, I'd like to figure out what happened here. why don't> > > >-----Original Message-----> > >We started many guest VMs while attaching/detaching some virtio-net nics for loop.
> > > >From: Michael S. Tsirkin [mailto:mst@xxxxxxxxxx]
> > > >Sent: Wednesday, November 30, 2016 9:41 PM
> > > >To: wangyunjian
> > > >Cc:jasowang@xxxxxxxxxx;netdev@xxxxxxxxxxxxxxx;linux-kernel@xxxxxxxxxxxxxxx; 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?
> > >The soft lockup might happened. The err is -EBADFD.
> > >
> >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() ?
won't we?