On Wed, Jun 10, 2026 at 09:11:20AM +0000, Raf Dickson wrote: > All three transports (vmci, virtio, hyperv) call sk_acceptq_added() > immediately before vsock_enqueue_accept(). Move the call into > vsock_enqueue_accept() itself so callers cannot forget it and the > accounting is always consistent. > > Suggested-by: Paolo Abeni <[email protected]> > Suggested-by: Stefano Garzarella <[email protected]> > > Signed-off-by: Raf Dickson <[email protected]> > --- > net/vmw_vsock/af_vsock.c | 1 + > net/vmw_vsock/hyperv_transport.c | 1 - > net/vmw_vsock/virtio_transport_common.c | 1 - > net/vmw_vsock/vmci_transport.c | 1 - > 4 files changed, 1 insertion(+), 3 deletions(-) > > diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c > index 2ce1063d4a..73e6416ee9 100644 > --- a/net/vmw_vsock/af_vsock.c > +++ b/net/vmw_vsock/af_vsock.c > @@ -507,6 +507,7 @@ void vsock_enqueue_accept(struct sock *listener, struct > sock *connected) > sock_hold(connected); > sock_hold(listener); > list_add_tail(&vconnected->accept_queue, &vlistener->accept_queue); > + sk_acceptq_added(listener); > } > EXPORT_SYMBOL_GPL(vsock_enqueue_accept); > > diff --git a/net/vmw_vsock/hyperv_transport.c > b/net/vmw_vsock/hyperv_transport.c > index b3394946b2..0de8148877 100644 > --- a/net/vmw_vsock/hyperv_transport.c > +++ b/net/vmw_vsock/hyperv_transport.c > @@ -410,7 +410,6 @@ static void hvs_open_connection(struct vmbus_channel > *chan) > > if (conn_from_host) { > new->sk_state = TCP_ESTABLISHED; > - sk_acceptq_added(sk); > > hvs_new->vm_srv_id = *if_type; > hvs_new->host_srv_id = *if_instance; > diff --git a/net/vmw_vsock/virtio_transport_common.c > b/net/vmw_vsock/virtio_transport_common.c > index b10666937c..4a39d48db9 100644 > --- a/net/vmw_vsock/virtio_transport_common.c > +++ b/net/vmw_vsock/virtio_transport_common.c > @@ -1582,7 +1582,6 @@ virtio_transport_recv_listen(struct sock *sk, struct > sk_buff *skb, > return ret; > } > > - sk_acceptq_added(sk); > if (virtio_transport_space_update(child, skb)) > child->sk_write_space(child); > > diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c > index 91516488a7..4ce6660c11 100644 > --- a/net/vmw_vsock/vmci_transport.c > +++ b/net/vmw_vsock/vmci_transport.c > @@ -1109,7 +1109,6 @@ static int vmci_transport_recv_listen(struct sock *sk, > } > > vsock_add_pending(sk, pending); > - sk_acceptq_added(sk);
It looks like vmci might be an odd duck here, where sk_acceptq_added actually pairs with vsock_add_pending(), instead of vsock_enqueue_accept()... For example, if the pending work timer below fires, vsock_pending_work() will see vsock_is_pending() is true, and then hit sk_acceptq_removed() and underflow the zero backlog counter? Best, Bobby
