> On Fri, Jun 13, 2025 at 11:11:50AM +0800, Xuewei Niu wrote: > >This patch adds support for SIOCINQ ioctl, which returns the number of > >bytes unread in the socket. > > > >Signed-off-by: Xuewei Niu <niuxuewei....@antgroup.com> > >--- > > include/net/af_vsock.h | 2 ++ > > net/vmw_vsock/af_vsock.c | 22 ++++++++++++++++++++++ > > 2 files changed, 24 insertions(+) > > > >diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h > >index d56e6e135158..723a886253ba 100644 > >--- a/include/net/af_vsock.h > >+++ b/include/net/af_vsock.h > >@@ -171,6 +171,8 @@ struct vsock_transport { > > > > /* SIOCOUTQ ioctl */ > > ssize_t (*unsent_bytes)(struct vsock_sock *vsk); > >+ /* SIOCINQ ioctl */ > >+ ssize_t (*unread_bytes)(struct vsock_sock *vsk); > > Instead of adding a new callback, can we just use > `vsock_stream_has_data()` ? > > Maybe adjusting it or changing something in the transports, but for > virtio-vsock, it seems to me it does exactly what the new > `virtio_transport_unread_bytes()` does, right?
Sorry, I forgot to update this. I am curious that is there a plan to implement dgram support in virtio-vsock? If yes, adding a new callback is the right way to go. I deadly hope to see that feature. If no, will do in the next. Thanks, Xuewei > Thanks, > Stefano > > > > > /* Shutdown. */ > > int (*shutdown)(struct vsock_sock *, int); > >diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c > >index 2e7a3034e965..466b1ebadbbc 100644 > >--- a/net/vmw_vsock/af_vsock.c > >+++ b/net/vmw_vsock/af_vsock.c > >@@ -1389,6 +1389,28 @@ static int vsock_do_ioctl(struct socket *sock, > >unsigned int cmd, > > vsk = vsock_sk(sk); > > > > switch (cmd) { > >+ case SIOCINQ: { > >+ ssize_t n_bytes; > >+ > >+ if (!vsk->transport || !vsk->transport->unread_bytes) { > >+ ret = -EOPNOTSUPP; > >+ break; > >+ } > >+ > >+ if (sock_type_connectible(sk->sk_type) && > >+ sk->sk_state == TCP_LISTEN) { > >+ ret = -EINVAL; > >+ break; > >+ } > >+ > >+ n_bytes = vsk->transport->unread_bytes(vsk); > >+ if (n_bytes < 0) { > >+ ret = n_bytes; > >+ break; > >+ } > >+ ret = put_user(n_bytes, arg); > >+ break; > >+ } > > case SIOCOUTQ: { > > ssize_t n_bytes; > > > >-- > >2.34.1 > >