From nobody Wed Oct 8 09:23:58 2025 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 34AC123AE66; Mon, 30 Jun 2025 07:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270268; cv=none; b=sKrk2BQe9L0NLOk367AX8IjoifvzQsGlSL9TExqqT/GHYWYedEfe66HDOMQAiLk92kofVJnjWjauNdQoET7zARrgGmp03/Y4d5EEw4Rr33qvoZKoc9sRwMH6lSumyPRW3DfPSCYl2Bu0Q4NkCtNNHgd7Qf476xtP2FW9SfwwwuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270268; c=relaxed/simple; bh=yYhC1SvTr4r/q4aKyafrkgVQ1b+GHoCyO4kJ6c3v10c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Kd4lc0LbGeTnd/FJsy8DUsIcn6qeQlLXkG0D0Z0eEsygaiHp81aqgw6dOvK3RafV+6t9wj1DZxhydaZ+ZAc2Hwcok0DUjuNfj/ZdTtvC+DNdkzKCCg29411fIATDVFvqhFJjKakMbU7IXWDCcBdtKKUwyZ/WeGkEYnofTULzwbM= 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=bm6m72Tx; arc=none smtp.client-ip=209.85.214.180 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="bm6m72Tx" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-235d6de331fso20464895ad.3; Mon, 30 Jun 2025 00:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751270266; x=1751875066; 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=Te1ubGn4t4pkro6tbCWw9qlZ7DcNvsq3ids6nDR7Ezw=; b=bm6m72TxS2FOTgZ68HvjBygKgMt1EgxAWWPY7PJV3L+h6vIclrxRqsHg7Zo/FVYzM4 clVjCZ+MUMeXZPm429Aa29pUPTpQ1vkZg3U+RbfSGE+bFVsj4QFZ4Je1tUJQY5KcjWYQ +l/ai/Wymg0BgDNW5pK2qIWRKJCj8kXLiqKx/4Fi1wdje2eIvh7CkC6m6uXFcbadst3l mSYZ6AgbGNaG4mxZVpD/KeOa/8yfw6mTMLwr/rbB0k6sR5Ql3o0ea21L7ZFuzs8ORLSr 2KoQLspZuxyfEhOakGkzU8JnjK2KfiPA3cHVotKAg0Mf3FUoNDlls/sp2mkySB6WZ5Gv GNjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751270266; x=1751875066; 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=Te1ubGn4t4pkro6tbCWw9qlZ7DcNvsq3ids6nDR7Ezw=; b=Hka0rQtYn9aMuK3/xIMHjrZWsnGxpQJnPlURjhBflT1awgCpSCt/bXFV2JAK+PW4lo Xv9NdfaW3INL9NjBQUhFIUs3DvZpwAEv7ZxIcFq/mZxKRFQzo8ABpvYzdTLkQKXnyevJ 1sNK/FwLbg1PBVdOHZwpRqRxrgGhUe7cUPHUyTgK2VmIKhgQbD7Ck96JWcUIr+53rhh8 pyc9UhqoWXqhOGtTjbPiHvMzDM0OBj63eCJl/QgfZkcqiIo/IEFFT6jsTSfAz/n2vUrK GnINflG7hh6nMJ/2lIj3Q+3E181oZa7AHw7NmaBJa1iB1NhMd2NAlCSZn4G2tU//Xjwy EHhQ== X-Forwarded-Encrypted: i=1; AJvYcCVDYzaqXpac8r3YH+7lz6FLLSFELKCn6WAHzQ59qUrJqqgkojDQAX+hvP9e8tV4B7ruHnFj0uo/Y0elTrRL@vger.kernel.org, AJvYcCWsVVsYNXK2E5d/53S0vtWvdS1JD/hQ5xJjyZSMZmBijjw9IwI5p/9PTDWsqkBSeYmaBwJbmVAi@vger.kernel.org, AJvYcCXVuA1Mr3/VF1rdlq5EhgHNfm4cXXYjmCE+rtpP3eYAKTcz7Jn9jivVDpbY/rp76Im/vTQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7vdrCcB2s2rZ9vcbbZ92Rx+Vje2QVyDZanNtVNZ7efBn3Hy6i zFG39HG0IlSqNZ87iIqfAPuCoP7p9ze5NAw/Kmc5c6SpuBkC6dpcycml X-Gm-Gg: ASbGncuQrjExa2mEqfK7WFFB6fSU9r4YzU8TtfgaC10UKpFg5Y5wOiW/naZD8N/xy0o p0+xa1zB1LU0iPlXoglnUm1glx1lJYDXwcFnS0dh3GSg9v3KgZb9VNXbOA9nqCckdJ2D01FuH6b yVWwSBiIK4KTV2JrVdtCVEv7XFWwA00CT2VAdtHhv0T2zJOXzfYYS5290HpUhZw5BqJ32ReMjTO KliSEewL7dhFAHTL70jqVA6vFZfkZLhIF3BDzXO0pSwhLJRRGZ00ppz0puopdfoWT+81RxNbPJn GHixNxIdufdCGAD1gqho0P10Sl5DoDUcPmEugeYAVBN6EqIW9fJJ1dTk4Ob6g3loIPA/4ilgwdW lCSW51i0G X-Google-Smtp-Source: AGHT+IElsi4FmjD8ptxsYXp6SgY5L4HbtTxYXy+6Tm1I+pM33trhN/23GKQddZOGFvxJS5SLFMN9ng== X-Received: by 2002:a17:903:18c:b0:235:ca87:37ae with SMTP id d9443c01a7336-23ac4637152mr195826455ad.41.1751270266294; Mon, 30 Jun 2025 00:57:46 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b34e31db02esm7414931a12.63.2025.06.30.00.57.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:57:45 -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, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [RESEND PATCH net-next v4 1/4] vsock: Add support for SIOCINQ ioctl Date: Mon, 30 Jun 2025 15:57:24 +0800 Message-Id: <20250630075727.210462-2-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630075727.210462-1-niuxuewei.nxw@antgroup.com> References: <20250630075727.210462-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" Add support for SIOCINQ ioctl, indicating the length of bytes unread in the socket. The value is obtained from `vsock_stream_has_data()`. Signed-off-by: Xuewei Niu --- net/vmw_vsock/af_vsock.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 2e7a3034e965..bae6b89bb5fb 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) { + 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 vsock_stream_has_data(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 Wed Oct 8 09:23:58 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (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 0497024291E; Mon, 30 Jun 2025 07:57:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270272; cv=none; b=kODxea5Hd6Ff83fZt4eszwGiLq86gVYFWPeOVgAu1q7B/uFDZDpkSJGtYsQvpkx/wCjQIhwlUOEAcXWeNGNdiyGEZ3uPDi2fCnjx+I2tnyPKjR0BlggUnKXUNzrzZb6wA0RQQQqnU2rl3ISjd+VxqZFF06AZYJ9dvbPlG/6GIaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270272; c=relaxed/simple; bh=8zHWFlCigM4oKQM+XUD7NX3O01Q7p6W6jnTQzPT3UPw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=b5Tv3EIk8BUEwuo23hROX0bCkGVs81yH9O58O3N7Qz7r6LuOO62DxLJNPw5GztT1+2lGNvPAnfR2s1xlinE1KPlsi1AqRKwu2EvZKpc3o64KSOb6JOZumCNLx68Lqpj/T8HNUuOh9fd2Re1lKTICquwo1eqUgpjt+FhK9m6xYWM= 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=k7On0m/+; arc=none smtp.client-ip=209.85.215.169 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="k7On0m/+" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b2fca9dc5f8so3881766a12.1; Mon, 30 Jun 2025 00:57:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751270270; x=1751875070; 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=Zxu7ig/S9LCUmwMcMSykN7rd/mLUHqPQuKn7T6xu2vY=; b=k7On0m/+hW871AFCg8SU73/PKUUU8djkf0zkzK1bca9YVYUN9CEcQredebPX80VXSg yBQE9zhCKOczJEXXOiiAL73h0KYkJuyJVDgzMa1VMnNgPg7w2MMXDYfg4iw79/uHsNOf 7wUPpNX5DuXgpwhNPfSvkvAxqB4iOL7jKWlM+LV5vOohx3PkxC5qi3o8YeadMir8vLcE ZzYA+LbW7vF8ObDWUS48BVsaI7NhhO3IDcDpwVkUYs6ZXC6AXC3v3NJggEaY7G2w7eCk mZ18D2D6jwHA1q183WiqZk0eGEda3h7vH7Lfvo6E9PlcEVQr10Pn0kGe2gnDk3HqBKeZ cCwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751270270; x=1751875070; 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=Zxu7ig/S9LCUmwMcMSykN7rd/mLUHqPQuKn7T6xu2vY=; b=mH8psfRN0E/IlWW02lFlCHFJS03TO26hAbb+7wpiv6CTbcaYzFgdxOltOPSd1sAQBM amtG7mnY+y5yrAVrCTiEiwbeUCikm42X/Xe7OIpD4l09K0tc4MGV4nH8aSlQuh5tcIOT NvKzgoSlgiuj+J1/7hrRISclbwPBdn1swJBHvpP0URJ5hohsg9LUv92HzExnM0yK6XPk JanBMp1Smmg0M8KNCHuSqrM3u4vXZSpNPMU7sumaeOhlDHDlafdiZttCVygW0UyEI+1j 4CLuOJxMtGSxvo9MtlfNAn1a6Ft9C94Uq6bYWY6+tqJib9SAsHCUKtL5GWkRvveTRE1Q Fbug== X-Forwarded-Encrypted: i=1; AJvYcCVebRQl65IMRNz8SgEucH49RLx1uQIX8bxZi83++I8CAhtGW4F4B9h5JicQLUCpa70ezPU=@vger.kernel.org, AJvYcCVndUvTTDVVxJfTkgjMONsLv6OdXysUFNvyJ+7jtIvrt/R9rghaEtCvF8X592E3TM/MLaTO3+gJ@vger.kernel.org, AJvYcCWtA2ISEVdM98PkZ+Hr86GTgW15iZRkD5E9aK36a+WlVO6FpQUlxYLSrKj0Gb7/ZRbjcvQ97bvt+jmxPhQg@vger.kernel.org X-Gm-Message-State: AOJu0YyKXdmAJn0I+CaQJJOIEDPg1XuKqdaOhj1pXBT6l/zBtMeDOMiI lXByLGUbN4ztCo7BRz67h7YNKRrUYwy5PKFb6Lr25gwZPLt/GvZ4z9qD X-Gm-Gg: ASbGncvixEPks3MgJcql7QIj25Skqft+XnFWTlHo8Dx5wEpl+URLOC3lDWJHgxjcbf+ +SJKSBosC+6u9IwwaIsanM+xKk5I0UcpMr+yTkk3HMKikjompww0Qxn7FUkzihDC/nlBziuVIpA w0bpf4V4gv2peA4Os0DFViqU+uq06JzP8ounqDgrOSJwnPjl4BnwqT+FXQQwUuSag3MWzUBVYVZ nK5M6/LbwgkzO7/P1Lam0SjU31YITSLT1/spM8rggnSUB6ueKONTHfZvgqwdShcudvlZOitIsUV HK1HL9mfchvU/faRUtDlbIyVQESWchDgOO7ZfreJT7wIAi9aW2PMunkBu3fy1klWnbtT7zuFCgT jJUi+oXA8 X-Google-Smtp-Source: AGHT+IFeB5QAqHDhB/+cLf2rBEoPse3nWkgqjJpbJmYfyGIZdEChb2MyNa+j8tvsdcGZfOOX40t+Dg== X-Received: by 2002:a05:6a20:9194:b0:1f5:9098:e42e with SMTP id adf61e73a8af0-220a12a4a3cmr20966808637.7.1751270270193; Mon, 30 Jun 2025 00:57:50 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b34e31db02esm7414931a12.63.2025.06.30.00.57.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:57:49 -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, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [RESEND PATCH net-next v4 2/4] hv_sock: Return the readable bytes in hvs_stream_has_data() Date: Mon, 30 Jun 2025 15:57:25 +0800 Message-Id: <20250630075727.210462-3-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630075727.210462-1-niuxuewei.nxw@antgroup.com> References: <20250630075727.210462-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" When hv_sock was originally added, __vsock_stream_recvmsg() and vsock_stream_has_data() actually only needed to know whether there is any readable data or not, so hvs_stream_has_data() was written to return 1 or 0 for simplicity. However, now hvs_stream_has_data() should return the readable bytes because vsock_data_ready() -> vsock_stream_has_data() needs to know the actual bytes rather than a boolean value of 1 or 0. The SIOCINQ ioctl support also needs hvs_stream_has_data() to return the readable bytes. Let hvs_stream_has_data() return the readable bytes of the payload in the next host-to-guest VMBus hv_sock packet. Note: there may be multpile incoming hv_sock packets pending in the VMBus channel's ringbuffer, but so far there is not a VMBus API that allows us to know all the readable bytes in total without reading and caching the payload of the multiple packets, so let's just return the readable bytes of the next single packet. In the future, we'll either add a VMBus API that allows us to know the total readable bytes without touching the data in the ringbuffer, or the hv_sock driver needs to understand the VMBus packet format and parse the packets directly. Signed-off-by: Dexuan Cui Signed-off-by: Xuewei Niu --- net/vmw_vsock/hyperv_transport.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transp= ort.c index 31342ab502b4..64f1290a9ae7 100644 --- a/net/vmw_vsock/hyperv_transport.c +++ b/net/vmw_vsock/hyperv_transport.c @@ -694,15 +694,25 @@ static ssize_t hvs_stream_enqueue(struct vsock_sock *= vsk, struct msghdr *msg, static s64 hvs_stream_has_data(struct vsock_sock *vsk) { struct hvsock *hvs =3D vsk->trans; + bool need_refill =3D !hvs->recv_desc; s64 ret; =20 if (hvs->recv_data_len > 0) - return 1; + return hvs->recv_data_len; =20 switch (hvs_channel_readable_payload(hvs->chan)) { case 1: - ret =3D 1; - break; + if (!need_refill) + return -EIO; + + hvs->recv_desc =3D hv_pkt_iter_first(hvs->chan); + if (!hvs->recv_desc) + return -ENOBUFS; + + ret =3D hvs_update_recv_data(hvs); + if (ret) + return ret; + return hvs->recv_data_len; case 0: vsk->peer_shutdown |=3D SEND_SHUTDOWN; ret =3D 0; --=20 2.34.1 From nobody Wed Oct 8 09:23:58 2025 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 C9992243378; Mon, 30 Jun 2025 07:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270276; cv=none; b=fNJRC18DLtsEEJBFqUH+C7kBA9/khIRTMYy2PezdQxVNNKnMXHVp9nEOzAqOQlkyN3ezHt6/IRi0VYm/uLpGfoxYE7Elsdvk7ejG6Ei/bqo6EnjEnl+Mxib1GPpNipEe9Iaem3K869dusy9HVwrbItG/imc2g/YnDcNbUhKB9AU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270276; c=relaxed/simple; bh=6e8nhq3wAutajxTDZ1caB5Wt0cNk1tW6jl9nRmn/iB0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aHogBag8NRsbfvIEGSQag94qXRMcOj8WmGneUP1SJeTJ08V/9Zto+DhjGAXoWt3eTwdwVcgQYBSwXslj0lDIBHDee/OMakbOJ1wvwXQ/9fJY1qoQV7owoG0eS48rRey8PIK4tKJIa+mHS33erLGekAOHTnfXiHOa43ucN4FnZW0= 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=Lus9NUyJ; arc=none smtp.client-ip=209.85.210.172 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="Lus9NUyJ" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-7494999de5cso3229992b3a.3; Mon, 30 Jun 2025 00:57:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751270274; x=1751875074; 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=JCu94amvUYw2PYDfqBO7v4QOw2C4FxuMQOpeOs/4SKI=; b=Lus9NUyJRakV/vhL5YVPqcIZcZ03M/+agoK9aEGxryL/PkYyja/IQggsp8miZU0Xa1 yH8W5xSJ1o0+NcxHOfbXFY3I513MwkQTEN//7utmnqz7cMhtV4uqs5dlDPDlFD1aVx8Z 5QQ3OdmeHQdzl20RILrQ63B+WSRQOQgAMyTCX0dMTeqmYbVGbxYuMa+59bqZBqPIJEEL KyTYPZcBVor+kRF7vAuUbISsFS8m1915oiFThA7Nn0J1OZaZ3vQzi9rYUCH/jtBtUMu4 jhVSjxAPd0XTCWULPXWEru9HGkrrw0JT9diuYDS9nWDuNre9SUOKaVhtj7iniQFbbK6G alfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751270274; x=1751875074; 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=JCu94amvUYw2PYDfqBO7v4QOw2C4FxuMQOpeOs/4SKI=; b=ro5PUHl77sLz1SX6/dfe3fcAqquMSRzPEjbuQU3/4kRIHBSRtlyugeOY/R0rGpAHXv KQm++7p+V1e0JuTQGlnVHeeSui8k49lJXs8TWivjImxCEhNM8sft2JGwlXinf0JN4BB3 27WkwQhsw14ICT8dmSu++YL6heGmX4G/TrrWib29I/csiZIhFcUnaTH8+CXRn0s86ztJ T5Cvr7gbeYmIPHJogH20WGd93+3DKSTnzClbbxzQ976v28VYntPPafp8CIbhaCh8MB0w s9rSCPGtMWMNSLVRMz37t1pacbq68pdLPXf3PzCu8Z9R6ysBlIP8wo/lV6FEFEDiOEUp WrYQ== X-Forwarded-Encrypted: i=1; AJvYcCV/uANJtDpj/dKTK53eSBldR49bxPNpyJ8cukKZfoxAAyET8yMr+aKg35s+2360vx9YbVKQypNL@vger.kernel.org, AJvYcCVy7WPBYGxLQJZbSfKkdTCjcrtexPnGn5o7UGRCGPYE1qEh56i7d6LzwbYTRQNjFt6v5QA=@vger.kernel.org, AJvYcCWG+8Tt/ll+9Yq4sWoFU7ogKkGqIDKZyGrs4O19QkcfrSM9X4Sc0WccXd6FD5YZptTQmUol5BxwNezHhN3T@vger.kernel.org X-Gm-Message-State: AOJu0YwOJEaUngIaGskRE6ocpByzUFVHEKyDWs6W6HigH40BWOhH9uBm ZgY9Qmk9u0BJeL5E0wxpwO0xT+wJt+Ib071fHGx3NKQYedyLejBHuZEpgt4MnBlrZNy7Gi9g X-Gm-Gg: ASbGncvP9h58Ztk7ILNqGBN3cwa5cslY0i86fnMOBExQ/TxGc+f3Ja2jAymOAY/UdEx 7w4GdcB925Se05N+5JGOJ2cqHVGaPDQkTsEiSj1eQ7AHCrWGQlZdpv8RbqwbTyb1v4b5Y6gem/N JaZhkpJIQfrsNihshKakTUUN6X+tlUCA1EcSSsQn1M1noRB7SEGK17xIwYTwfKswDf7PWddhn5M f/ick2HsB/ebDcWPTBtBgP8PVXn0leFQutDz/rBRzH5kPA6KMjTWeOnid1GkJ2zowpWuVeDXMW4 HdyHJREZtpq8FzZjMlisCAYlZYl9tu4qolLL6eZx9VSkvSyPnp25QqnpmzlRWobUi7/3jsdrzZB WP2C7w+Bg X-Google-Smtp-Source: AGHT+IEswJGvdxBSoFaPb2APxP0ZX96sIgqwRd8xIVVkz2BA3zKqHue5sohbeXX3Sz09j+bn0a3pig== X-Received: by 2002:a05:6a20:734b:b0:220:2e32:4e28 with SMTP id adf61e73a8af0-220a17ffa45mr17177744637.42.1751270274104; Mon, 30 Jun 2025 00:57:54 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b34e31db02esm7414931a12.63.2025.06.30.00.57.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:57:53 -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, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [RESEND PATCH net-next v4 3/4] test/vsock: Add retry mechanism to ioctl wrapper Date: Mon, 30 Jun 2025 15:57:26 +0800 Message-Id: <20250630075727.210462-4-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630075727.210462-1-niuxuewei.nxw@antgroup.com> References: <20250630075727.210462-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" Wrap the ioctl in `ioctl_int()`, which takes a pointer to the actual int value and an expected int value. The function will not return until either the ioctl returns the expected value or a timeout occurs, thus avoiding immediate failure. Signed-off-by: Xuewei Niu --- tools/testing/vsock/util.c | 32 +++++++++++++++++++++++--------- tools/testing/vsock/util.h | 1 + 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/tools/testing/vsock/util.c b/tools/testing/vsock/util.c index 0c7e9cbcbc85..481c395227e4 100644 --- a/tools/testing/vsock/util.c +++ b/tools/testing/vsock/util.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include =20 @@ -97,28 +98,41 @@ 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 false if the op is not supported. */ -bool vsock_wait_sent(int fd) +bool vsock_ioctl_int(int fd, unsigned long op, int *actual, int expected) { - int ret, sock_bytes_unsent; + int ret; + char name[32]; + + 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 >=3D 0; +} + +/* 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 vsock_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..d59581f68d61 100644 --- a/tools/testing/vsock/util.h +++ b/tools/testing/vsock/util.h @@ -54,6 +54,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); +bool vsock_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); --=20 2.34.1 From nobody Wed Oct 8 09:23:58 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 CA25124469F; Mon, 30 Jun 2025 07:57:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270280; cv=none; b=ARue7Zk5m+tk7quGWP92julKGyGo1SZi03c284DOg6y+YpsLE8F0UiR5reOU+54g7TKtd+5RmK5feWJi3f6q79d9tlUFAewELg272/qGcEgzwsC0wMlHHOdlWEex41hsVdPrQsaq5jHA8cn+KcHcwcJUCPxKKpoHXsFHvc/lm4g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751270280; c=relaxed/simple; bh=AOZ6oVmWOkitNq/6qx+PmOOk2d4N55RYRHT6AyMe7Lk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NYhOqbFTgWetQz/nK4Ijguq1uyIbnNmQ8Zellj0jysa5HPQlqBYLIhsxLkF/N6wCEezK2NoH992Q/VzAqoFuBaSdcHNEFcZ+Q3yrT86kfaQ+Y35codaAIlFWJMNzrcJ7I+5+BiRa1599y+tWbRAfM8XpBdmeJupijTJgLLrRuZY= 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=d6AtyBEU; arc=none smtp.client-ip=209.85.210.180 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="d6AtyBEU" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-742c3d06de3so2198059b3a.0; Mon, 30 Jun 2025 00:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751270278; x=1751875078; 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=NP7k3vrg3hSrjisvFnFBQDzzpUXz8NpLnGnPf2tMTWo=; b=d6AtyBEUrsSCo+Svb9kPlAITz9B+pgXOxQuWWs+dUPl+oOl+pTKwQzt/vpgUkbXC0y hUhIdbJYM122wTp9g63cLJFwQ4axYVnTtrTyGpD8EuNKTvG20rsQQQcZgPfFeAHlCPHG plkdE614KTKHz/vPYIeXSUVSolbsSVnMHLOQyPX5qda6+n/oybD09KeXiBHWqthWNsiF wKmK8rnDPr+HdL6LUVSjogFuWqaay63xbm29lgWG1uidZOIKhF2OycaWSHhsrBISGl6j 2PGYzmt5idJBAJGlykXpRiZDcUUISH70adrIRPEVVDv0XlICioyvOA9DGSqvR/vjymK0 jaaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751270278; x=1751875078; 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=NP7k3vrg3hSrjisvFnFBQDzzpUXz8NpLnGnPf2tMTWo=; b=hRsdIXsz+DnTxLVKN+qk8oQEh4klSS0H/VCASyMv+PKvsRYiHULnQRb6kL15DLrkEL +d+N+tt4i/xgG+FRZZ1TBpJF7z1bLe8Shw8ARHYtdCa9+3cZEv36KWA/RDu4Hoi6DThN jS35tbcIaQ1WcyxdvanbycE277Ofh9TAf/dyyUmAwkBayKz7uPZ5CPGKef9F95FHULFy N8fRkiDl7SPNlltq3bBzpPQWYmWFBoa7PWAktVXMTR6z3qxwEZK8V/URoYi7/cPtlI4y /2YED7XpDhjJOA3oYrHp9Zq4MpA25qMg3APWCgbrz16GfVx8gEYy+S3pR5PYK/O/BZuw wsrQ== X-Forwarded-Encrypted: i=1; AJvYcCV9hbHVQDhGSFDbs+HMAxvQufncsAOZq5m14Nn0vFzTqrnnMlweBwhjnOwNe144Bkl83zq75/HR@vger.kernel.org, AJvYcCVwcwYw6vc3nUdyGkX8khVG2HQE/e2upn2jcUu6XUJhWO9SC8p8SGuaGtabhI37iYuP1jI=@vger.kernel.org, AJvYcCWlwTYBwtvif9oNl9XEf1AIN0QzYNZYy9704Q+E0QNLjpEU1pu85INhGwjijE0pKAAoHZqCLtGAZDsg6ZU1@vger.kernel.org X-Gm-Message-State: AOJu0YwUIz0GGuhVGF2oQt0HLAHrFcm2/DlTtudSAFIjSZERKVufCAKe G+NNlDdUG7+nNfLGJU8DbLeWc/CHXcFcUs2kev3cUW9ya/7XntK3zjM7dVisQp/wHQQDt4wH X-Gm-Gg: ASbGncswYK1893nq8iWdNjdxjmnPLmnyEbKpk3Ats+MEUM/2t6D8UZfu4DHF/xThl7I MGiK7eFV0Gkliiup6N1CBootp+gddiOLQdH12mxtz5kUTo9JeCboz/opmxJ9ICr8WnsAzYhiTxB A0irUo2OjuIUgXFSVRitymWldtgW5L5dQJC2l5VaMsazw21eezNm03WnXI1IX670vn3q5uV6PEr J/FLoBCRa13L0ka7RFsZLXK7G1quhxTXC9YDO1kS8Pr/G6Ic2lKngrxhncUepCrNg0M6KgX8zQu H0gM0K7hktTLbmW1/u/MJwcNiQ91asNQWWSG2P91amdTsOVIf+k0pclSguj0GGp4CqzVLJaENxq LKVT4YC0X X-Google-Smtp-Source: AGHT+IGJxQhOgdfS47I3apdJsqJnzzvU1y8CdHZhf/JDLt96PRag9x30UnOO4MrqUqcGY/sgql8/Iw== X-Received: by 2002:a05:6a21:600a:b0:1ee:d418:f764 with SMTP id adf61e73a8af0-220a16c9a36mr19882874637.38.1751270277975; Mon, 30 Jun 2025 00:57:57 -0700 (PDT) Received: from devant.antgroup-inc.local ([47.89.83.0]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b34e31db02esm7414931a12.63.2025.06.30.00.57.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 00:57:57 -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, leonardi@redhat.com, decui@microsoft.com Cc: virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, fupan.lfp@antgroup.com, Xuewei Niu Subject: [RESEND PATCH net-next v4 4/4] test/vsock: Add ioctl SIOCINQ tests Date: Mon, 30 Jun 2025 15:57:27 +0800 Message-Id: <20250630075727.210462-5-niuxuewei.nxw@antgroup.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250630075727.210462-1-niuxuewei.nxw@antgroup.com> References: <20250630075727.210462-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" Add 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/vsock_test.c | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_t= est.c index f669baaa0dca..1f525a7e0098 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -1305,6 +1305,56 @@ 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"); + + 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 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. + */ + if (!vsock_ioctl_int(fd, TIOCINQ, &sock_bytes_unread, + MSG_BUF_IOCTL_LEN)) { + fprintf(stderr, "Test skipped, TIOCINQ not supported.\n"); + goto out; + } + + recv_buf(fd, buf, sizeof(buf), 0, sizeof(buf)); + /* All data has been consumed, so the expected is 0. */ + vsock_ioctl_int(fd, TIOCINQ, &sock_bytes_unread, 0); + +out: + close(fd); +} + static void test_stream_unsent_bytes_client(const struct test_opts *opts) { test_unsent_bytes_client(opts, SOCK_STREAM); @@ -1325,6 +1375,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 @@ -2051,6 +2121,16 @@ static struct test_case test_cases[] =3D { .run_client =3D test_stream_nolinger_client, .run_server =3D test_stream_nolinger_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, + }, {}, }; =20 --=20 2.34.1