From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DF5EC7EE43 for ; Wed, 7 Jun 2023 18:20:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F0E6B900009; Wed, 7 Jun 2023 14:20:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E9774900004; Wed, 7 Jun 2023 14:20:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D11D2900009; Wed, 7 Jun 2023 14:20:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id BE258900004 for ; Wed, 7 Jun 2023 14:20:27 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 7FEF7404C0 for ; Wed, 7 Jun 2023 18:20:27 +0000 (UTC) X-FDA: 80876766894.22.0A51994 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf03.hostedemail.com (Postfix) with ESMTP id AC0BF20023 for ; Wed, 7 Jun 2023 18:20:25 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=W7WcGW+y; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf03.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686162025; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6q5xbY97TlySjcT8Avdxpu9hvkIkBKUNCyWrMvUV8f8=; b=fnxSCk0Wnu8KKClB5Y9qIhYxZC/dagxLv6cBTi0hCsIl0hCkRUak0Lqe2l/x46eDxaLx8l Sf+Sby1N3jBf3kK/+rEE69HvpDf6G7l2Nze4pgUTQuWQgspshfOLIBtU8hHIb6OZisPu9G rswE6aHPZ7JTLQoLwQcMmyR9dt3oriY= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=W7WcGW+y; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf03.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686162025; a=rsa-sha256; cv=none; b=7vV7dtK4JkJYasvUaNo/aaHJHQJPM4Bz1TYm6u4gx1hvNcGNdw8lpkg4dNq9oMtipOFG7I RXeSG7FOyTJBDsKSs+5zv0Gs7QX+w/dHVa7O2r1Ub2jy5ARohaVijX++EkX77aw4pvNNoV 6fDP1wPHRU5/Q3OAJK4Hl5jzSBL205U= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1686162025; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6q5xbY97TlySjcT8Avdxpu9hvkIkBKUNCyWrMvUV8f8=; b=W7WcGW+yfoSgtS7F748lozL7QxYzZVo9/PdMFwfbCIhCrXwBgTwTot6m0Bh4se55pF5th5 BYzVfvyEmU8QTDKuhr8dtVC8elJFMOUKyZ/M1wmkwF1idF8Gu+R7V4ogEOkYMxg9Bt3/cT CGfCp0BD9PCLw/WG2p8bFP5m615QR5w= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-631-Eq-9mGkaPwauwtyewFdCog-1; Wed, 07 Jun 2023 14:20:19 -0400 X-MC-Unique: Eq-9mGkaPwauwtyewFdCog-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 25C4980027F; Wed, 7 Jun 2023 18:20:19 +0000 (UTC) Received: from warthog.procyon.org.uk (unknown [10.42.28.182]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0AC5C2166B25; Wed, 7 Jun 2023 18:20:16 +0000 (UTC) From: David Howells To: netdev@vger.kernel.org, Linus Torvalds Cc: David Howells , Chuck Lever , Boris Pismenny , John Fastabend , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn , David Ahern , Matthew Wilcox , Jens Axboe , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v6 11/14] tls/sw: Support MSG_SPLICE_PAGES Date: Wed, 7 Jun 2023 19:19:17 +0100 Message-ID: <20230607181920.2294972-12-dhowells@redhat.com> In-Reply-To: <20230607181920.2294972-1-dhowells@redhat.com> References: <20230607181920.2294972-1-dhowells@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: AC0BF20023 X-Stat-Signature: ietegn8faqd5ep9p3kwejizig4nhb116 X-HE-Tag: 1686162025-171744 X-HE-Meta: U2FsdGVkX18mpWnQsBsK98uBregorpYyGJtScASeVLIiLZSFkEzkVqRCtJk+aYCrSXFsCs2E4kQERrPKE824YFsvMMf4hv9eB1zAFSSAMr04fzn8yzaiqgGEEKiKJsAm0qu8M9Xzit8hwtY7tDs7hbM5LkOiFSFHEORTfbuIl6TF9BRozi4cW30oqqZLCeUTlIiA3KpY/HjQLv5HWUzQ4K00vBqh8Gj2pgg2kEgEzNNkDZuwW4Gl/0Iu3i/GYddtMyiwbBTKOhwTM5osZy09V+yRLEmVhkX+7yuQPJlwGoB59xVfKvO8nWsgjs0Fyi1/S9Fb729hRSXgsO0Rf16DRHKzolZuWGbcy1PGTYGBKudKvWgx23Cb8nZFnT/ZuhzIjXqgnkZZUoZjzU9PzN4PWGNBBiq1kLedGXQoLEwPm5mFzOt4LppXNi6O2O0m2Gr1Jmvi1mLDbyUvcExQiBeO52UA35pp058MMJGcd0KRQ1TO1x2igvOo9PKVoScGqw00g/cNUl9F+E1RmXwUWvB//oLZPxHcCZ4dpvEGs5Y/5nmHD82TMxMHgABiRurLqWvIn1bsBNOeKNWm+Pon4bkfOieQ6Kk+t0WTY7MAvJxSjC88PO+hQRufKBSYUZbsk/gwoDsDdRGVEiinr5GmHi3BiNtkVdaAwTnY2iCtkuL3QbX+0F1xBG27MqRQ3c9It9kRaBRnV1r93YD/VmvS/6t8vQeheglQ2w4ZV6FxlNZ6nE/HLbEX8U3IoEmXqNLkQmDXTXSbY4Jt7gycoZZmeAsEWVmUu2kh3q6CNSZmeykkW9gQTBB/Q4MMZCopILFmfLiib6XW9Koe/eu8ecWtOCsYIyVUnf9crSSONrNBtqfusiAtMQ33qiAteVftezxCwoDthznwUVT+H3zmrMZhkcvt8ktMd2x8bc7W7uvGNvLijlasdQmQ2DVce2HU6SeEsaySCR79KJkYhFT5Sm7zIZM MZBDI4BJ jkyFH9VswS6/dopCAWJbKmx2B7u1FRsLWuB+3+rpemoLlx2a/JOrGIZjqHMhWWjixDTInhulcfrJXMyZgsMZlyF9kA6V/H/TUHSRQKjKFlfDmxyYJWVBSAmlqET6ZJmbF7YMOBtp/hvGHWWbInhuUVl/9yxN8FdQYBgd5tsPQsUqfdg9DgSeocuIbVLs2YhO+BqDDI1xOiAK6LoQVtsqZu3kvWlRWily+9xskNkV2fis4A9+uFduN/3KwZx92YPbqkZNodTWicuLhhHursCvA6C83ax6Zpx5m0WksENVXZ+sZzvnOfW3E2C0a4NbuNh4ZrHrKhCU5O4Wkp0GXZVVDzRE1H5OpIGJ93nkhKZ83V4h4YUDdoKmThslVBiMHE9laZGKKjoYUYm/pBDrjNb42c9Ac9cUGyJyqMBBd4V2vEwoj5I1IKyrC6RDBP+ppC8Tdo4p9x0blN0XetmKcjkAHzmTMN0RKZcDE6LrEH5K8tCSRSE7ixVyh8KDazq8VStDXUL2Mdpg/C8cmQzbIn0B48TAXJXRDZbLSTqQ6bt7BdloVBknx4zb+jzYH3g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Make TLS's sendmsg() support MSG_SPLICE_PAGES. This causes pages to be spliced from the source iterator if possible. This allows ->sendpage() to be replaced by something that can handle multiple multipage folios in a single transaction. Signed-off-by: David Howells cc: Chuck Lever cc: Boris Pismenny cc: John Fastabend cc: Jakub Kicinski cc: Eric Dumazet cc: "David S. Miller" cc: Paolo Abeni cc: Jens Axboe cc: Matthew Wilcox cc: netdev@vger.kernel.org --- Notes: ver #6) - In tls_sw_sendmsg_splice(), remove unused put_page. - In tls_sw_sendmsg(), don't set pending_open_record_frags twice. ver #2) - "rls_" should be "tls_". net/tls/tls_sw.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index a2fb0256ff1c..2d2bb933d2a6 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -931,6 +931,35 @@ static int tls_sw_push_pending_record(struct sock *sk, int flags) &copied, flags); } +static int tls_sw_sendmsg_splice(struct sock *sk, struct msghdr *msg, + struct sk_msg *msg_pl, size_t try_to_copy, + ssize_t *copied) +{ + struct page *page = NULL, **pages = &page; + + do { + ssize_t part; + size_t off; + + part = iov_iter_extract_pages(&msg->msg_iter, &pages, + try_to_copy, 1, 0, &off); + if (part <= 0) + return part ?: -EIO; + + if (WARN_ON_ONCE(!sendpage_ok(page))) { + iov_iter_revert(&msg->msg_iter, part); + return -EIO; + } + + sk_msg_page_add(msg_pl, page, part, off); + sk_mem_charge(sk, part); + *copied += part; + try_to_copy -= part; + } while (try_to_copy && !sk_msg_full(msg_pl)); + + return 0; +} + int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) { long timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); @@ -1020,6 +1049,17 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) full_record = true; } + if (try_to_copy && (msg->msg_flags & MSG_SPLICE_PAGES)) { + ret = tls_sw_sendmsg_splice(sk, msg, msg_pl, + try_to_copy, &copied); + if (ret < 0) + goto send_end; + tls_ctx->pending_open_record_frags = true; + if (full_record || eor || sk_msg_full(msg_pl)) + goto copied; + continue; + } + if (!is_kvec && (full_record || eor) && !async_capable) { u32 first = msg_pl->sg.end; @@ -1084,6 +1124,7 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) */ tls_ctx->pending_open_record_frags = true; copied += try_to_copy; +copied: if (full_record || eor) { ret = bpf_exec_tx_verdict(msg_pl, sk, full_record, record_type, &copied,