From nobody Fri Oct 10 17:32:59 2025 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FC9F25D1E2; Fri, 13 Jun 2025 03:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784332; cv=none; b=u4kSNKcoSJdw9mk7rPNoMnROjzwKu5ortqWKN3puxpuvnERZMy0vCr4928GYQhHCjmbGEJ2EfODek2jQaeiOyt1T9RSbllFQsx68rJRIItV1p7KJJJM/7QGVHe4MuqeaSvwMbJBvtWNH6hxoVyL4li8K/bnA7LmlD/G4Ue8qza8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784332; c=relaxed/simple; bh=zTdqwv9Ssej6orvsbamVC5PHhURL+JyHsh7Gy+vvlK4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=B5QgbilpS+8ZFC/jzkmVQtjVy+CkulRptzkQh7CFOAUMYJX9d7xT1aCydyOI6Rz4qVXR7luZdkB0VlIGI5aK0d0X7vMEBh3VF+1feDBPpIqrKgzkfNZInYioLkp8tqYCliPmuOXjdpcg6XvIxR6t9arCnGSCVeCss2N6BnupjrI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kanvOKyp; arc=none smtp.client-ip=209.85.215.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kanvOKyp" Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-b2c49373c15so1233686a12.3; Thu, 12 Jun 2025 20:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749784330; x=1750389130; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4JaBNyC5lfL5DwQH+KQYKj542RoCqVrJF6tcJtmbxpA=; b=kanvOKypYcQh1zGFjbzRjor5jk8828yV1yYNliCBWZCLklkGlkS+6F7OmFdfzDEVMV 6Ncspr8MqrQlVaJzun61nxlXAWK4sWdoRSKRBlicKaRYsjLN4651vh5Roqpzq3Xp1zQH My7xE+aooUpWyrGbzxrN21SUGa24UEuYEcQDVSrRp/NATrNSNmRUa2T2n4r3zbw5EvKl 6yHtGvWXA3Wn8gJ2fJgGPN2JmXQpBmnj39BoutJjVEf9FyPLUghPywNgKUzoXMzER0hl hb5mDYHuWO4/L64YFKgTOt6/7iMjHMToevWlF4i3Lrrg3lqTiHe66GXVsLjj8xpZLoEk YOZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749784330; x=1750389130; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4JaBNyC5lfL5DwQH+KQYKj542RoCqVrJF6tcJtmbxpA=; b=UoB4ZzeuCpBoYy9IcXs+DcqUAUiZcVr2Mu1wuSUVxqBsNExrtHmRG1DY3Gah647CJ2 O7kJR9FFCmxQht16NooOtOLiH3dpGoTgd0EMycLwHtNRQWfAQEzCIinlQMoYHdGVcrwp xZlF3wI0d6WvVvCCzhXOv3p+Qx4QWj+0TUALKyevnpq6fZQnil4+oFbUL6Qmh3AP0Cpc /1o6ekFUEUBFEo+XLEhfLtYpca/tQwJzFPD7eZW+7eZ+BwKRr09FqCgExad64tUpJGa9 2puZ8iBpQa5e6++qa8V0w6EgnwzYHgUhNf+WJwOmHy/T8A/e+tZqLzaKKeLDv37rdN1K tk2A== X-Forwarded-Encrypted: i=1; AJvYcCUV4jc1Na/6eFIZJ22esb8jEUSwsCgVDX5XWql2hqMkn8LB34aIHi/glYNTdSn2H4oVWuQ=@vger.kernel.org, AJvYcCVYOGIAlm5DRLKFZDwUdA8kYAY2T17htjiGuMEV9f+V4yymIIvXhP4oUBdxggyK1Xbs8KgGO6gO@vger.kernel.org, AJvYcCVzGGVVioRgiBRA6KZX+uw9tmPjr+WWj9087Ahz9eERdWA5pToRymFpnWNS5k5ZBuXdhfHwz9zodq/ol0go@vger.kernel.org X-Gm-Message-State: AOJu0YwTvk8dsEDCg9UB0YP3DsMXtQOg0Z0ml5Cm4FIflVDzn+PPt8Ur bAWzWrit1joirQd9EG0fg/zq5lJENsyAAyAN9IA/WVTCl/g3wFZek+QG X-Gm-Gg: ASbGncu6YgjNJ14Ap5VTM7pd1soYUyMYOFMvcLgMk6KiYbespFtY4VYE4imolWSQMHD jicPtH21WZiAWjxwqFj4XCZLFekHCzTtc2n/SmrwizJXGukiECYvmtXLC76xhI3s/r4kozFnNbA oe8Y7r9HXGOWympu76RfORC7QyVe4gOPcYk4p7HN6TxSCyo+KDZg9Kdmw2BItTrAVdukKPwO/EV +FjdH1sZwgHBFGdQqnCmAXCCLN3QvrRktPEm1MZQ6C8t3dtppT+o8RtDdne2O1MnRoV2pAgVp5f PF1TAzkdIRKauRSPye0kWZaUory8A+lNwkTeVmQAW2hx3OwcC2OfbENMZ5/aIefBpsMMWvJ/FQs 0k5iFaWf4 X-Google-Smtp-Source: AGHT+IF6ZIGLNpqqBVYQhsnYee4rQdJFSL+hFV4nO+/toKNKtFhZK00+NJViwASyw5ZSKmQr/HD8ww== X-Received: by 2002:a17:90b:264e:b0:313:28e7:af14 with SMTP id 98e67ed59e1d1-313d9e93c27mr2245323a91.19.1749784330326; Thu, 12 Jun 2025 20:12:10 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-313c1bcbb39sm2291801a91.8.2025.06.12.20.12.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jun 2025 20:12:09 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v2 1/3] vsock: Add support for SIOCINQ ioctl Date: Fri, 13 Jun 2025 11:11:50 +0800 Message-Id: <20250613031152.1076725-2-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> References: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch adds support for SIOCINQ ioctl, which returns the number of bytes unread in the socket. Signed-off-by: Xuewei Niu Reviewed-by: Luigi Leonardi --- 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 { =20 /* SIOCOUTQ ioctl */ ssize_t (*unsent_bytes)(struct vsock_sock *vsk); + /* SIOCINQ ioctl */ + ssize_t (*unread_bytes)(struct vsock_sock *vsk); =20 /* 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, unsig= ned int cmd, vsk =3D vsock_sk(sk); =20 switch (cmd) { + case SIOCINQ: { + ssize_t n_bytes; + + if (!vsk->transport || !vsk->transport->unread_bytes) { + ret =3D -EOPNOTSUPP; + break; + } + + if (sock_type_connectible(sk->sk_type) && + sk->sk_state =3D=3D TCP_LISTEN) { + ret =3D -EINVAL; + break; + } + + n_bytes =3D vsk->transport->unread_bytes(vsk); + if (n_bytes < 0) { + ret =3D n_bytes; + break; + } + ret =3D put_user(n_bytes, arg); + break; + } case SIOCOUTQ: { ssize_t n_bytes; =20 --=20 2.34.1 From nobody Fri Oct 10 17:32:59 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ACBAF2638B5; Fri, 13 Jun 2025 03:12:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784336; cv=none; b=ZTLpN+5RfgwTksO1LS+48jRzU45h/CkNCYbgHd+PULy8ozxWLJ0RJy7L7iTv5+3ICgCoPCVAidaOQ/UbhCcfACI8bep8wxkB05uWZ9bk5aIZD37c4IRGPP3EwIyELwy5xxvW2gw7YGLvH8/y8oteRVNSaYt0cDj5c3jWRdibYkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784336; c=relaxed/simple; bh=JpimrpV+MtzzCPBuM8z+T+yol8hWsqq4uAYSN7jCxp0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Wem2nplCOEB6p50zpAvxds8IdJ+yn0T+UNi8Owkow1OdxzyuD0WJhDfm8giYkzayVKkrBjqZamQECpgD/4COZWXFe2L5eaP3es/cnpn5G0gR0BJCNq7O3Ib9vZ05zb2Dyh5zNFVvJF325m/TSy/tlGgGNC8fplgS5MI8meArdig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JUZ9fw1O; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JUZ9fw1O" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2353a2bc210so15890955ad.2; Thu, 12 Jun 2025 20:12:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749784334; x=1750389134; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5pUMawIHS3ge9aNMrUwuQCI1wFUmsQ8BlgJBs2il1xQ=; b=JUZ9fw1OH3kOFYfOQprWEt62/QyKbE+M+QKoRrGtXR+Vv9ry8w/IsUXyPSCqP7Hlf8 6fINDYpuSCTRGmHpu2nHiYsDZyAGejK0Q15EceX5r0e7r/PaWVK/Rk87KCPSFWKgzO5w OLpB8v+FloqMhX+OCs6PPX9EpbOR0bl9F2ELPPwUK2xO66VOOjqOfwEW6/NqrttXsWxe 60cYralbr+t5wszJ0DkV2BEnBZ2CQkk68J5bcxB1fc+BJxeIz1Hvne0JQWA8CQCQusoM rShWgBhXyR0Ognk102gqW0iHsOvH9K2J8kpO2Q059uVne3RvFs9ko/zYh9JG7o25aN1X M8vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749784334; x=1750389134; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5pUMawIHS3ge9aNMrUwuQCI1wFUmsQ8BlgJBs2il1xQ=; b=Tar8TPlkW7dF5X7RdTh5vMnHc1vjMXlmTxxdsaCn9DCp4ksIivQz+oLm//+3YS8MaH aSalek3ftyPNC7hYiaAD2fcJDBZZcsVa2MN7GxHTJzHppX6jxyL4WiJQBN4KtJF9uK8A snFUkMjSaek8jFJmFG3XirrVaZxLZbfcYKVKKmbrMLTpJyJTDhtr1Dgx3atZKSsCr5rx jWXfEHmVxd9nDXTg5tGdt2UxFdf8nIFs+GekuPgp8dg2S86rUiv1BcuPNN8PYsp24Gri 3KbfpT0jr5aKgHX0uE34WJHVPVAxJ/PkcaE1f0gr8/LQRVya4sr375k71xOVD9A+ZA1J dG5g== X-Forwarded-Encrypted: i=1; AJvYcCUfPslA1nTgjxAqH229hn0lHw2yJ/7XILh6OAzb42UoPPipdPtUZqhQ2gHiuJNjor5fdfUGuWXmjPRkLgXJ@vger.kernel.org, AJvYcCXa4ozDpvidCEUGB8l0rAqvjyrPEfrfRHp7nO61pimPx5T8pPhbMU95NqrA+7VYakHBAZWgbAct@vger.kernel.org, AJvYcCXkOIK7wltxjB0lSvS5SxHRTRmkKwoN/3u+8Kfdmnam99vz6He09Ovem1HeOD8ig+YXs1w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+T4ZzZ1Lae1CsFnhjEf1NCIAZ9fniBK9eXONiLuo6FCpaAZyH 6hIwafbOQ5Bj/sadUY1TtEMI5r1IJUcAIodG0GqbdbGwtRwcdwgzAskM X-Gm-Gg: ASbGncsv7w5CjGABIBiWNLGYLQf/jAxoNZ9yqag3kzwdrE+lVoxK7bAVgg7GOOp2vH2 vtcl/rVI/+lhsso2SND0vWHdDcb8JT8/Cta3cjJz/0Yg599W2Jh/WZja6YGh74QZY5XxMe28/3y pn+DGN6S4M28eIvS62TBRUEEJ/zWvmyhqZ4qEja3rSdRsvD+CVQo4vQoxaLznAz8e3PoWO8XNPk A852/+D1Mz3BLpbGuk5fd0cRml8pqPVQT/DA9LmB2Ug4CYLoa7n0e7lIE4HXzUAbXYUgn3sZVfA CAW5kCwhrwSop7e1BuTqtwKFxLYL+FRGhpITOkeVBaQscz4nfxbzsjPJPMdtcCuqCrDohyKG3sb a3kgHFGZ8v9wZLUQmlTo= X-Google-Smtp-Source: AGHT+IE/WULKBGn+KiKpo+6kHWGrSlbQfCN38Xb5dm/8MIQWGayir5xKvllT8tXaon8W9A8tUHwuiQ== X-Received: by 2002:a17:903:1b2c:b0:235:ed02:288b with SMTP id d9443c01a7336-2365da0bb53mr17826825ad.30.1749784333984; Thu, 12 Jun 2025 20:12:13 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-313c1bcbb39sm2291801a91.8.2025.06.12.20.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jun 2025 20:12:13 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v2 2/3] vsock/virtio: Add SIOCINQ support for all virtio based transports Date: Fri, 13 Jun 2025 11:11:51 +0800 Message-Id: <20250613031152.1076725-3-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> References: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The value of the SIOCINQ is obtained by `virtio_transport_unread_bytes()`, which is generic for all virtio transports. The function acquires the `rx_lock` and returns the value of `rx_bytes`. Signed-off-by: Xuewei Niu --- drivers/vhost/vsock.c | 1 + include/linux/virtio_vsock.h | 1 + net/vmw_vsock/virtio_transport.c | 1 + net/vmw_vsock/virtio_transport_common.c | 13 +++++++++++++ net/vmw_vsock/vsock_loopback.c | 1 + 5 files changed, 17 insertions(+) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 802153e23073..0f20af6e5036 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -452,6 +452,7 @@ static struct virtio_transport vhost_transport =3D { .notify_set_rcvlowat =3D virtio_transport_notify_set_rcvlowat, =20 .unsent_bytes =3D virtio_transport_unsent_bytes, + .unread_bytes =3D virtio_transport_unread_bytes, =20 .read_skb =3D virtio_transport_read_skb, }, diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index 36fb3edfa403..74c50224431e 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -196,6 +196,7 @@ s64 virtio_transport_stream_has_space(struct vsock_sock= *vsk); u32 virtio_transport_seqpacket_has_data(struct vsock_sock *vsk); =20 ssize_t virtio_transport_unsent_bytes(struct vsock_sock *vsk); +ssize_t virtio_transport_unread_bytes(struct vsock_sock *vsk); =20 void virtio_transport_consume_skb_sent(struct sk_buff *skb, bool consume); diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transp= ort.c index f0e48e6911fc..917881537b63 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -585,6 +585,7 @@ static struct virtio_transport virtio_transport =3D { .notify_set_rcvlowat =3D virtio_transport_notify_set_rcvlowat, =20 .unsent_bytes =3D virtio_transport_unsent_bytes, + .unread_bytes =3D virtio_transport_unread_bytes, =20 .read_skb =3D virtio_transport_read_skb, }, diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio= _transport_common.c index 1b5d9896edae..59e72d2dbd85 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -1135,6 +1135,19 @@ ssize_t virtio_transport_unsent_bytes(struct vsock_s= ock *vsk) } EXPORT_SYMBOL_GPL(virtio_transport_unsent_bytes); =20 +ssize_t virtio_transport_unread_bytes(struct vsock_sock *vsk) +{ + struct virtio_vsock_sock *vvs =3D vsk->trans; + size_t ret; + + spin_lock_bh(&vvs->rx_lock); + ret =3D vvs->rx_bytes; + spin_unlock_bh(&vvs->rx_lock); + + return ret; +} +EXPORT_SYMBOL_GPL(virtio_transport_unread_bytes); + static int virtio_transport_reset(struct vsock_sock *vsk, struct sk_buff *skb) { diff --git a/net/vmw_vsock/vsock_loopback.c b/net/vmw_vsock/vsock_loopback.c index 6e78927a598e..13a77db2a76f 100644 --- a/net/vmw_vsock/vsock_loopback.c +++ b/net/vmw_vsock/vsock_loopback.c @@ -99,6 +99,7 @@ static struct virtio_transport loopback_transport =3D { .notify_set_rcvlowat =3D virtio_transport_notify_set_rcvlowat, =20 .unsent_bytes =3D virtio_transport_unsent_bytes, + .unread_bytes =3D virtio_transport_unread_bytes, =20 .read_skb =3D virtio_transport_read_skb, }, --=20 2.34.1 From nobody Fri Oct 10 17:32:59 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3B3E267703; Fri, 13 Jun 2025 03:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784340; cv=none; b=nyfKuXnDeOSUDhXEx+Onqr7JszrseewFm56Sxqp1odxQR9ljQ6P4fMqvgZXZnrnxaDEQV1/apGatxXasuSOLK8Ft/N6vWSi42fAvCem/0AhkbyxWoNYNWsM+ZZQqf/J0lO+hKN1pwrMkSKjlNXLjHhsVRYH3fxhPqIAIKYV5q7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749784340; c=relaxed/simple; bh=su6tHM+gBupVdKThuHji8wFuKEgAR/ATOFmWdUd/Zb4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CzE1nA1Og00egI26FCrReAX18uV/Hg1lKK/k3gR0B8JuvmoCQ183nIcDRrz8aB4A7dnmfTTFcivsfjYK+K+x6ttCAp00OXPq4o2XtVJKBJjjjyWBDrRAI4vkOLuUO0ICo1VLjC91FKXrf08nga1bLu++8F+H3xDIFlRdVydkZK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GnoUClZu; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GnoUClZu" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-b2c3c689d20so1132859a12.3; Thu, 12 Jun 2025 20:12:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749784338; x=1750389138; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PFjmyN0nuW0ybI1fW+EqrHnDVCIapf1qjyihsbGmNzw=; b=GnoUClZujXxVisjcqCvl1tE6moOBHulITserFICCFDbNsP9N7uUZ+c3K29mgTpe+1f qtu+oT+l+fdx83IRyFIpYmZ7o4t7cgpAV41a9LJUmGKeqx/pY7Si1StQXDImiy5J0GFi aWGmFq+jx7QEKXArv8Iv1PbkZd5+PwcTEr1s4x9TwrU1bWTVBszMbLgWUW1/3cVgyN1B GvrIJpaU4dSc0+D/c4taRqQUP45oHZ4JMccWDbvOA/xv3W5NgIIWzRQ0rxrcJKQR5Ffw LULkrG0OGE3YgTVudtNYrI9ayxheMkpN0vgUXTkX83D2y54+n1MX8UPn3E6/lqRqg59H af4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749784338; x=1750389138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PFjmyN0nuW0ybI1fW+EqrHnDVCIapf1qjyihsbGmNzw=; b=UDjZv0heDdiHBPJUMAIUemkrVETFZop6W76NfW4FMMnAje8q45UWe8RGTbR8zCNcit cs3H4yybo1XR4sUZvNM3Hw0IV63fijg2bN9lfwjoSCIVbk+pFA/M8or3PjhL1UU6Nl4q kxlsmbkDao8XZuJW2mVi8P1CsnjSHwF5o/TrQoOwLqifogbB8f88lVMpwwPaY+h9OJRU yK1bBYBakKXqkb1MzM21DzzAq0lzTRO/VKDuhuTLp1CMbkEMsjPUOJgC3mUXuQ6gyNKI 8JUqyAW/VCS4l8LtWf6M7cNG6oDPV5OwbN97USUHwqOAkrEcadEAhOGHFtc9hsSjNF30 aoXQ== X-Forwarded-Encrypted: i=1; AJvYcCU4QSpnAnkUxGyML+bOwJh4wYWs+/slL5y3CthQo9MGSFv0NokfifLQR+3fbJ7fXwMy6vCicu9DSJJAfmMK@vger.kernel.org, AJvYcCUBGYrRk/YNdmwTmNIyYOiAQrRerFHNPJTiTbnVJrRrl39uHz017OM74UvrlCvegaUWX5Q0j34w@vger.kernel.org, AJvYcCWep96Iwp92E0HvIwOkSNHLAR3qpFZ/acxIwiIqHmvqiHoTvS6ZX5x4LqoPpM7PzKIGJqk=@vger.kernel.org X-Gm-Message-State: AOJu0YxFh05lGDPyEN2Ist7bXW0PJZaH7mAja9OShwdknxK1F6a694k9 dcBwhoBq+9IKAkCPm3Wrkrmoyl3x1ftV2n6YxxT0R8A6JfQaBeGeMpaZ X-Gm-Gg: ASbGncspDUiJCadl57Ozewou8QYvRXiPIvdZOfo9zioVsG8sbCB19L9ySltL/P1F/9b JCaQ+ij4zYU2ELviTZFn4QFyqfl5jaR/PzfkIPw8inkzErHb7fr4u9WegOyx39RqjpRnn+tgdPB p9IoZ65or4o6YCXUueBRDHPvJzQ0G04NmL2CMKZSOMlqmP2JHaX3F0KP8buczozz9ZypQhtGxlv MtvU6DT192imvfsbxFKEgExcVTVPR3koxJI1hqx7JxHzDxatL9agfnSyXNxv42XaPz1dAL/wD+e fGoNaQIvqqppC2Fb5cNjQ6dFTNz1G6jZZzUff0EEILoE5YuNKtDA5m/lgKxQHZzPCrs1isvHd5l 7uAzJrDF6 X-Google-Smtp-Source: AGHT+IEtZMzdxeZQg4GE8Orm9l745D/m8tiDw0531kmrlxupMhY5YUGLIK8RXAuqIQTNrU42XiYbPQ== X-Received: by 2002:a17:90a:d2ce:b0:312:959:dc42 with SMTP id 98e67ed59e1d1-313d9c6719dmr2428070a91.11.1749784337613; Thu, 12 Jun 2025 20:12:17 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-313c1bcbb39sm2291801a91.8.2025.06.12.20.12.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jun 2025 20:12:17 -0700 (PDT) From: Xuewei Niu X-Google-Original-From: Xuewei Niu To: sgarzare@redhat.com, mst@redhat.com, pabeni@redhat.com, jasowang@redhat.com, xuanzhuo@linux.alibaba.com, davem@davemloft.net, netdev@vger.kernel.org, stefanha@redhat.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [PATCH net-next v2 3/3] test/vsock: Add ioctl SIOCINQ tests Date: Fri, 13 Jun 2025 11:11:52 +0800 Message-Id: <20250613031152.1076725-4-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> References: <20250613031152.1076725-1-niuxuewei.nxw@antgroup.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch adds SIOCINQ ioctl tests for both SOCK_STREAM and SOCK_SEQPACKET. The client waits for the server to send data, and checks if the SIOCINQ ioctl value matches the data size. After consuming the data, the client checks if the SIOCINQ value is 0. Signed-off-by: Xuewei Niu --- tools/testing/vsock/util.c | 36 ++++++++++---- tools/testing/vsock/util.h | 2 + tools/testing/vsock/vsock_test.c | 83 +++++++++++++++++++++++++++++++- 3 files changed, 111 insertions(+), 10 deletions(-) diff --git a/tools/testing/vsock/util.c b/tools/testing/vsock/util.c index 0c7e9cbcbc85..472246198966 100644 --- a/tools/testing/vsock/util.c +++ b/tools/testing/vsock/util.c @@ -97,28 +97,46 @@ void vsock_wait_remote_close(int fd) close(epollfd); } =20 -/* Wait until transport reports no data left to be sent. - * Return false if transport does not implement the unsent_bytes() callbac= k. +/* Wait until ioctl gives an expected int value. + * Return a negative value if the op is not supported. */ -bool vsock_wait_sent(int fd) +int ioctl_int(int fd, unsigned long op, int *actual, int expected) { - int ret, sock_bytes_unsent; + int ret; + char name[32]; + + if (!actual) { + fprintf(stderr, "%s requires a non-null pointer\n", __func__); + exit(EXIT_FAILURE); + } + + snprintf(name, sizeof(name), "ioctl(%lu)", op); =20 timeout_begin(TIMEOUT); do { - ret =3D ioctl(fd, SIOCOUTQ, &sock_bytes_unsent); + ret =3D ioctl(fd, op, actual); if (ret < 0) { if (errno =3D=3D EOPNOTSUPP) break; =20 - perror("ioctl(SIOCOUTQ)"); + perror(name); exit(EXIT_FAILURE); } - timeout_check("SIOCOUTQ"); - } while (sock_bytes_unsent !=3D 0); + timeout_check(name); + } while (*actual !=3D expected); timeout_end(); =20 - return !ret; + return ret; +} + +/* Wait until transport reports no data left to be sent. + * Return false if transport does not implement the unsent_bytes() callbac= k. + */ +bool vsock_wait_sent(int fd) +{ + int sock_bytes_unsent; + + return !(ioctl_int(fd, SIOCOUTQ, &sock_bytes_unsent, 0)); } =20 /* Create socket , bind to and return the file descripto= r. */ diff --git a/tools/testing/vsock/util.h b/tools/testing/vsock/util.h index 5e2db67072d5..945c85ff8d22 100644 --- a/tools/testing/vsock/util.h +++ b/tools/testing/vsock/util.h @@ -3,6 +3,7 @@ #define UTIL_H =20 #include +#include #include =20 /* Tests can either run as the client or the server */ @@ -54,6 +55,7 @@ int vsock_stream_listen(unsigned int cid, unsigned int po= rt); int vsock_seqpacket_accept(unsigned int cid, unsigned int port, struct sockaddr_vm *clientaddrp); void vsock_wait_remote_close(int fd); +int ioctl_int(int fd, unsigned long op, int *actual, int expected); bool vsock_wait_sent(int fd); void send_buf(int fd, const void *buf, size_t len, int flags, ssize_t expected_ret); diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_t= est.c index f669baaa0dca..43996447f9a2 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -20,7 +20,6 @@ #include #include #include -#include #include =20 #include "vsock_test_zerocopy.h" @@ -1305,6 +1304,58 @@ static void test_unsent_bytes_client(const struct te= st_opts *opts, int type) close(fd); } =20 +static void test_unread_bytes_server(const struct test_opts *opts, int typ= e) +{ + unsigned char buf[MSG_BUF_IOCTL_LEN]; + int client_fd; + + client_fd =3D vsock_accept(VMADDR_CID_ANY, opts->peer_port, NULL, type); + if (client_fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + for (int i =3D 0; i < sizeof(buf); i++) + buf[i] =3D rand() & 0xFF; + + send_buf(client_fd, buf, sizeof(buf), 0, sizeof(buf)); + control_writeln("SENT"); + control_expectln("RECEIVED"); + + close(client_fd); +} + +static void test_unread_bytes_client(const struct test_opts *opts, int typ= e) +{ + unsigned char buf[MSG_BUF_IOCTL_LEN]; + int ret, fd; + int sock_bytes_unread; + + fd =3D vsock_connect(opts->peer_cid, opts->peer_port, type); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + control_expectln("SENT"); + /* The data has arrived but has not been read. The expected is + * MSG_BUF_IOCTL_LEN. + */ + ret =3D ioctl_int(fd, TIOCINQ, &sock_bytes_unread, MSG_BUF_IOCTL_LEN); + if (ret) { + fprintf(stderr, "Test skipped, TIOCINQ not supported.\n"); + goto out; + } + + recv_buf(fd, buf, sizeof(buf), 0, sizeof(buf)); + // All date has been consumed, so the expected is 0. + ioctl_int(fd, TIOCINQ, &sock_bytes_unread, 0); + control_writeln("RECEIVED"); + +out: + close(fd); +} + static void test_stream_unsent_bytes_client(const struct test_opts *opts) { test_unsent_bytes_client(opts, SOCK_STREAM); @@ -1325,6 +1376,26 @@ static void test_seqpacket_unsent_bytes_server(const= struct test_opts *opts) test_unsent_bytes_server(opts, SOCK_SEQPACKET); } =20 +static void test_stream_unread_bytes_client(const struct test_opts *opts) +{ + test_unread_bytes_client(opts, SOCK_STREAM); +} + +static void test_stream_unread_bytes_server(const struct test_opts *opts) +{ + test_unread_bytes_server(opts, SOCK_STREAM); +} + +static void test_seqpacket_unread_bytes_client(const struct test_opts *opt= s) +{ + test_unread_bytes_client(opts, SOCK_SEQPACKET); +} + +static void test_seqpacket_unread_bytes_server(const struct test_opts *opt= s) +{ + test_unread_bytes_server(opts, SOCK_SEQPACKET); +} + #define RCVLOWAT_CREDIT_UPD_BUF_SIZE (1024 * 128) /* This define is the same as in 'include/linux/virtio_vsock.h': * it is used to decide when to send credit update message during @@ -2016,6 +2087,16 @@ static struct test_case test_cases[] =3D { .run_client =3D test_seqpacket_unsent_bytes_client, .run_server =3D test_seqpacket_unsent_bytes_server, }, + { + .name =3D "SOCK_STREAM ioctl(SIOCINQ) functionality", + .run_client =3D test_stream_unread_bytes_client, + .run_server =3D test_stream_unread_bytes_server, + }, + { + .name =3D "SOCK_SEQPACKET ioctl(SIOCINQ) functionality", + .run_client =3D test_seqpacket_unread_bytes_client, + .run_server =3D test_seqpacket_unread_bytes_server, + }, { .name =3D "SOCK_STREAM leak accept queue", .run_client =3D test_stream_leak_acceptq_client, --=20 2.34.1