Received: by 2002:a05:7412:a9a8:b0:f9:92ae:e617 with SMTP id o40csp129816rdh; Wed, 20 Dec 2023 19:11:41 -0800 (PST) X-Google-Smtp-Source: AGHT+IFHxhtG4+NSowm0Jkw/zD6Nt7eqk1Gz/3W1JcplitresTpDmZ6HVMy7FbCE1yt3ShP6kBG+ X-Received: by 2002:a05:6a20:54a1:b0:18f:c42c:d735 with SMTP id i33-20020a056a2054a100b0018fc42cd735mr802926pzk.99.1703128300973; Wed, 20 Dec 2023 19:11:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703128300; cv=none; d=google.com; s=arc-20160816; b=EKBYuQ/tqBSm9uOLfCaEjdOJqyrF0OzJbGqTbwY6Kc9AtIq4/hNmTYjKf1Jt8jThuh eP9BEzJhN9UrLAJaIpguASf+qO3YdZ2X4ioBFkHhyoRvfrXzpFmAXQcC/OEzwC4Oa7oC bAaGVc2oFSALMiLAfiYbVnw73KUd8zBVxBfKBjVBcemyu3znGgmL5f6z6p+YBloHK1Pe oSriM4JkAaYk1rt4OPZj8t+5fg4JVRROrpICbgdwPv1nvmBV+1UGUmPMGOud22mlQC21 LSwdv8SkEKbq+w6HmHS3fHR8cPUrzaHOitqY95u9GZY3POuA+H2ZB5fH2NoYPO5MX4KC gexQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:content-disposition:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:references :message-id:subject:cc:from:date:dkim-signature; bh=vydXVEslYVpAN/0zrw5DqIn2EKp+ucLsLzH93kVEFvA=; fh=Fcup1ZaRn/JP8fZULIBkXdJo1W7flDPKDQKOsAjlEFk=; b=MKodNzAxwyJAl3SxdMnQ2zT9Z4jW1ALH5fPHM7l1egyj3YZ9jjLqpZBh3hmykpEbr9 Cf8IRD1xn1CT3ujFmLn9/Ym47c+XcxufrMQ3kx+5zTdn+sSWqLbap5q+4IA6p/rCVi1S ++oCWdoU+gSZOVmvOkFAqJLbbaJM63Rr3mS/YdRyn0nxVGBW1fz+qIgAJWFF/WdwM9BA T5Z8kEQ8yDmiPTtT4mpsto+2HdtA0vuaYZtcJ+cst1p5uQusJ23OwFOPZ0RKeffF7zOe oRoBCoYVL2X/Or94BGok+0KOVc0zEUTSLdQWzNXuvyshn4I7y8N3yduI7Ov9hkKwfLFd HXrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nabijaczleweli.xyz header.s=202305 header.b=pHDgVoMi; spf=pass (google.com: domain of linux-kernel+bounces-7781-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-7781-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nabijaczleweli.xyz Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id bj19-20020a056a02019300b005cdba90861asi821274pgb.159.2023.12.20.19.11.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Dec 2023 19:11:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-7781-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@nabijaczleweli.xyz header.s=202305 header.b=pHDgVoMi; spf=pass (google.com: domain of linux-kernel+bounces-7781-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-7781-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nabijaczleweli.xyz Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 984A2B20AC0 for ; Thu, 21 Dec 2023 03:11:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BDCAE1775B; Thu, 21 Dec 2023 03:09:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nabijaczleweli.xyz header.i=@nabijaczleweli.xyz header.b="pHDgVoMi" X-Original-To: linux-kernel@vger.kernel.org Received: from tarta.nabijaczleweli.xyz (tarta.nabijaczleweli.xyz [139.28.40.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 893EB15AE7; Thu, 21 Dec 2023 03:09:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nabijaczleweli.xyz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nabijaczleweli.xyz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nabijaczleweli.xyz; s=202305; t=1703128148; bh=fnKQoYZiI85fSTbAEaSEfBVSSLGdtMQnakutCuLUGCM=; h=Date:From:Cc:Subject:References:In-Reply-To:From; b=pHDgVoMizVeq6S9MWjn6uFDxllWq6WcSq2K7TB4c041J+twDbF2NTE2zhwr+5oIWW xUVV0a6x46nlrs3++bVB4Js/bq9at4BnjVdo47lP9XATAs1HW6dGqc6harEIdxtpmd jOhuYtMKj4wfmnBPgcRGljdUZb4XZuwCNYqr5jaC+WtzeauWCGDZg5wyqt4a0Q+7zD aGX3tGEKc9P6eFLqcyDq7T1iigA0PaarDSCMdYsn2C4CjU/6rAcHqh5juofkXC1su6 sFxQLeyNa77hwQHmvHZnzMHkOVZIJBgpYyAS4upsU1UAO1pi5r/lvKYw6bl0evc+r1 8GzCAWdNZe/5g== Received: from tarta.nabijaczleweli.xyz (unknown [192.168.1.250]) by tarta.nabijaczleweli.xyz (Postfix) with ESMTPSA id 9AA7313D42; Thu, 21 Dec 2023 04:09:08 +0100 (CET) Date: Thu, 21 Dec 2023 04:09:08 +0100 From: Ahelenia =?utf-8?Q?Ziemia=C5=84ska?= Cc: Jens Axboe , Christian Brauner , Alexander Viro , linux-fsdevel@vger.kernel.org, Eric Dumazet , "David S. Miller" , David Ahern , Jakub Kicinski , Paolo Abeni , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 07/11] net/tcp: tcp_splice_read: always do non-blocking reads Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="hdk27c4uwgmfnada" Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20231103-116-3b855e-dirty --hdk27c4uwgmfnada Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Otherwise we risk sleeping with the pipe locked for indeterminate lengths of time =E2=80=92 given: cat > tcp.c <<^D #define _GNU_SOURCE #include #include #include #include #include int main() { int s =3D socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr =3D { .sin_family =3D AF_INET, .sin_addr =3D { htonl(INADDR_LOOPBACK) }, .sin_port =3D htons(getpid() % (0xFFFF - 1000) + 1000) }; bind(s, &addr, sizeof(addr)); listen(s, 1); if (!fork()) { connect(socket(AF_INET, SOCK_STREAM, 0), &addr, sizeof(addr)); sleep(100); return 0; } s =3D accept(s, NULL, NULL); for (;;) splice(s, 0, 1, 0, 128 * 1024 * 1024, 0); } ^D cc tcp.c -o tcp mkfifo fifo ./tcp > fifo & read -r _ < fifo & sleep 0.1 echo zupa > fifo tcp used to sleep in splice and the shell used to enter an uninterruptible sleep in open("fifo"); now the splice returns -EAGAIN and the whole program completes. sock_rcvtimeo() returns 0 if the second argument is true, so the explicit re-try loop for empty read conditions can be removed entirely. Signed-off-by: Ahelenia Ziemia=C5=84ska --- net/ipv4/tcp.c | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ff6838ca2e58..17a0e2a766b7 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -782,7 +782,6 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *pp= os, .len =3D len, .flags =3D flags, }; - long timeo; ssize_t spliced; int ret; =20 @@ -797,7 +796,6 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *pp= os, =20 lock_sock(sk); =20 - timeo =3D sock_rcvtimeo(sk, sock->file->f_flags & O_NONBLOCK); while (tss.len) { ret =3D __tcp_splice_read(sk, &tss); if (ret < 0) @@ -821,37 +819,13 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *= ppos, ret =3D -ENOTCONN; break; } - if (!timeo) { - ret =3D -EAGAIN; - break; - } - /* if __tcp_splice_read() got nothing while we have - * an skb in receive queue, we do not want to loop. - * This might happen with URG data. - */ - if (!skb_queue_empty(&sk->sk_receive_queue)) - break; - ret =3D sk_wait_data(sk, &timeo, NULL); - if (ret < 0) - break; - if (signal_pending(current)) { - ret =3D sock_intr_errno(timeo); - break; - } - continue; + ret =3D -EAGAIN; + break; } tss.len -=3D ret; spliced +=3D ret; =20 - if (!tss.len || !timeo) - break; - release_sock(sk); - lock_sock(sk); - - if (sk->sk_err || sk->sk_state =3D=3D TCP_CLOSE || - (sk->sk_shutdown & RCV_SHUTDOWN) || - signal_pending(current)) - break; + break; } =20 release_sock(sk); --=20 2.39.2 --hdk27c4uwgmfnada Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEfWlHToQCjFzAxEFjvP0LAY0mWPEFAmWDrFQACgkQvP0LAY0m WPEuzxAApW4yq5Dyu4M9dPkyvFpQ+3E5bXzE78/t08DzT4BYKiVs3lWJmT8zdQ9r ia5Q+qt3qLTwP4Qk8v6Br3n/PlsUXC4+BI/iNJ9VONYqJmKVP//W4rECWtDOWGzt uPFTwZ/2+0g01mMMuWkiknZEezXUB3W6nmKunAmCf6SjRIP2kA7/B0KF9QrE7fqo aN9/OBmLMJ1KbwAkla1DCKh920jS6J4r/1/QTq7Pr/SZz88E/H3G0c77j3smDccl rZl4THzrN5pjb7nXvPvCnU3r5gi7HVuZMcctL8VMY3jOekCQFcwMVGithI42KUPJ RBHY2+4zCWzFHtGoQGm/tObvX0hVnziGxg8oyEjDEA7wB/wRI0jlghBG05/Z2CHl g7qK7tjQg8DjBJgQ2KfzLBoq9zct6hBJLUxx8+hpRfmeI6fh1IwIy1f1MIsIrsHm 78gmw6LcBkz7VLkwLSiFXK1I1OAJ76j76J7T8SUKbQ31ALL3Z9u9mLq0V/jsrEMX wkVWLUbnaSXRJosK/KN2ILt7V67pwFaMJ4p0FU22hrMHqRQ7GbhUztKXhPph2gHp 7zAAwIFhB1x9D4tqwwkUJHAw/LsaFnoKzWz996p6KM/BTQvoRSfqkM2YcMo34rD+ t5SUqKAa9IWeVHC58pLb2o8AKKWzCH0OlX9x8HUa5EZqS/Y3g+U= =+Ry1 -----END PGP SIGNATURE----- --hdk27c4uwgmfnada--