Oh, got it. It is a very interesting implement. Thanks and regards, pingfan On Thu, May 3, 2012 at 4:41 PM, Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > On Thu, May 03, 2012 at 04:33:55PM +0800, Liu ping fan wrote: >> Hi, >> >> During reading the vhost-net code, I find the following, >> >> static void handle_tx(struct vhost_net *net) >> { >> struct vhost_virtqueue *vq = &net->dev.vqs[VHOST_NET_VQ_TX]; >> unsigned out, in, s; >> int head; >> struct msghdr msg = { >> .msg_name = NULL, >> .msg_namelen = 0, >> .msg_control = NULL, >> .msg_controllen = 0, >> .msg_iov = vq->iov, >> .msg_flags = MSG_DONTWAIT, >> }; >> size_t len, total_len = 0; >> int err, wmem; >> size_t hdr_size; >> struct socket *sock; >> struct vhost_ubuf_ref *uninitialized_var(ubufs); >> bool zcopy; >> >> /* TODO: check that we are running from vhost_worker? */ >> sock = rcu_dereference_check(vq->private_data, 1); >> if (!sock) >> return; >> >> --------------------------------> Qemu calls >> vhost_net_set_backend() to set a new backend fd, and close >> @oldsock->file. And sock->file refcnt==0. >> >> Can vhost_worker prevent >> itself from such situation? And how? >> >> wmem = atomic_read(&sock->sk->sk_wmem_alloc); >> ......................................................................... >> >> Is it a race? >> >> Thanks and regards, >> pingfan > > See comment before void __rcu *private_data in vhost.h > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html