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 F0EE2C7618A for ; Thu, 16 Mar 2023 18:37:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5EDBF900003; Thu, 16 Mar 2023 14:37:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 576D3900002; Thu, 16 Mar 2023 14:37:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3EF82900003; Thu, 16 Mar 2023 14:37:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 2C76D900002 for ; Thu, 16 Mar 2023 14:37:06 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id E9669401FE for ; Thu, 16 Mar 2023 18:37:05 +0000 (UTC) X-FDA: 80575618410.24.D5403A8 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by imf14.hostedemail.com (Postfix) with ESMTP id 2F9F0100012 for ; Thu, 16 Mar 2023 18:37:03 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=UiJyRovN; spf=pass (imf14.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.160.181 as permitted sender) smtp.mailfrom=willemdebruijn.kernel@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678991823; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=5yHp4jREjQWsbctCYQ1reY9QDPf2OVmLm7z44LvG+Sc=; b=T0vSyvTNBLlUNqUZIK4X3gtRIXPsw3E6nB/SIPOszIhTGIk+7MrXOWcfH0KFdAIoHtD7OT o2tpKiF8aUyVJkN1DQ3soVhB3npxig6a21n++OvmA6Xx7aFyjeLknqe7db0yXd85Foza9F wqYzg5dIg6ZL5cNux78zHbuLz7ak3U8= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=UiJyRovN; spf=pass (imf14.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.160.181 as permitted sender) smtp.mailfrom=willemdebruijn.kernel@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678991823; a=rsa-sha256; cv=none; b=qLn+Xs6bL14sOnwxpucXo4beb+mKmdOZL6rl4KVWII2gNlq+qWIvNKmaQOJL4Ima079Oqi tJjdOsxI2vmMO0QLWgRxTNHxjvIwVc+jeBw7JnyLdA29H+AW0nxmTfqL6ZQgDMox6KX50E FY7b2ubSo/c0el+yo7Bix54o5TbgEy4= Received: by mail-qt1-f181.google.com with SMTP id fy17so280710qtb.2 for ; Thu, 16 Mar 2023 11:37:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678991822; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=5yHp4jREjQWsbctCYQ1reY9QDPf2OVmLm7z44LvG+Sc=; b=UiJyRovNvybmojhj6CL+YSVtnvvEuY1cQ6QWsePLs0WPo7YG0uIrkqZ2SmyUtAFfCD 4lCpZF19u/SwFeuYGg8eaj19uKLxl5ij7W0+GBhutb6Il2sSUS0iUZok2BHLOHmEiZ3l d/6WzPc4WDllIYoi1nHAi1rwfpEgYEOUttx3e+0oP1u/r5qmvflhWl+zySaI4Uwg3bWJ 06xS5Kg1whSXqkDgW/O5xgTEkUfxosJJFo9qikUjRVnZnm6SAeBRt2Gx5/izsyJTz93g Jbab2mzAPm0nSbRnno+mRX+6votuVVY+kfAIIdslubgylyz60wpjL5Y757fGjE0N0biu IKGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678991822; h=content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5yHp4jREjQWsbctCYQ1reY9QDPf2OVmLm7z44LvG+Sc=; b=CLMLdvygHiuvpv3LZqvrUri0SnW2YQGZAD4y3cMjrWk3D+nZZsnVYzPPmCOZiKa9Xi 9DNTO9E7z95vfDHueTVIL4uR1QNsu3RReOVTMK+0cDk1/JRD351QcWf71YKmgiT1+Ycp HSHWM0WEbU1wWHUuU41bi2SJ8v5qheB0Y0DlY7zKX+2ghLu1Iev4HNFMdVk8Ak/ASs0/ iguJMKs7r5IsjpyTUTbnZt2L1V4HHAEJrMl7RMZalPJVDft0WymKxMmCmkVQ94u+95eY +c0zs5QO/BEoDYX6YCl9Jw8SiFP2aCr+QyTQdn1kD//8A9QlXhcTI3hvNR20ymEksuTP 7XcA== X-Gm-Message-State: AO0yUKXR8axKxNmcDJIISPpPfZCrzeznxiulsPL0Pm74uG/scdbmI/zQ O0j9tDqaYzuhjIfvbdkK0YY= X-Google-Smtp-Source: AK7set89m0NxgI0Dr4tvwq/CeeXie8ta0Jwg+0yZvAdMSGDc1GAqO0zueLl2XM2RZ4hYiuKSDlAdVg== X-Received: by 2002:ac8:5dd4:0:b0:3b6:3995:2ec2 with SMTP id e20-20020ac85dd4000000b003b639952ec2mr8002266qtx.19.1678991822174; Thu, 16 Mar 2023 11:37:02 -0700 (PDT) Received: from localhost (240.157.150.34.bc.googleusercontent.com. [34.150.157.240]) by smtp.gmail.com with ESMTPSA id j8-20020ac85c48000000b003bf9f9f1844sm6299599qtj.71.2023.03.16.11.37.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Mar 2023 11:37:01 -0700 (PDT) Date: Thu, 16 Mar 2023 14:37:01 -0400 From: Willem de Bruijn To: David Howells , Matthew Wilcox , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: David Howells , Al Viro , Christoph Hellwig , Jens Axboe , Jeff Layton , Christian Brauner , Linus Torvalds , netdev@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Message-ID: <641361cd8d704_33b0cc20823@willemb.c.googlers.com.notmuch> In-Reply-To: <20230316152618.711970-4-dhowells@redhat.com> References: <20230316152618.711970-1-dhowells@redhat.com> <20230316152618.711970-4-dhowells@redhat.com> Subject: RE: [RFC PATCH 03/28] tcp: Support MSG_SPLICE_PAGES Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Stat-Signature: 3zar9cooqzpj6hfq5dw74i413eff7rrc X-Rspam-User: X-Rspamd-Queue-Id: 2F9F0100012 X-Rspamd-Server: rspam06 X-HE-Tag: 1678991823-979272 X-HE-Meta: U2FsdGVkX187iaRbxrM1+2+d4gmyuwME9HyCsR4uR77f0gpHluWahOc/hGdaGURbNHYVN+NXx+/unVsQTGJH7eOK2g8uQBoGzU6deGQsdnACTHwHw7J9zONO62IzbUj7pbmudwXdHOnkn3d5mpp3h2YKjJc73jZLyPpb2rqm86QMHXypuMU4K1hjurTeDkOGVDus2gaz0k3OHzoDpEyDZoP84MVFvQaZPVE5ROl1aGDi8uhH0/N5Ise1G0YPdtYoQP2o+NRANSmQb+bzNrR5GRT7T2DFMWupFWv7Q5Qup7jwNcJnIuNtDSKGcbG47TXmsTih3BZEIjhDQIuhxbqx5r/poDxZHhSISXmTk5tvV7YWAHacEnhBb3D/qy1wAT/aQ67mD21xiJXE+rd/VUGCJKgw1QWlx/BRbTd9sOajZUiRnm51I7leV7KEejyGFVMwytHdTRo6nCxWh2wOlHuwLbKW8DZEb7hYpJhYyPkLbu+fmz/euYyKlF3w13p+d14tgL7NW4B58JkOc491C7Q+Hnk4A9Mh2bFXC9uqMtSxOmgvdjbsgboO7RrLq6Rad6CXovGO0LAa5vt0dch76dmm9XgxCxPuLtUyNlISOf8DpEzZsefj8VTqW99wD5MWuujIJo39a2u4Gc4KqKQ390aVzmG9GDM/HjE7WEwzDSsJIZtkMV4+j9PRWML8RXo+Yk/Doz3jCQRIgLm7w4aBZpuCYD0vzOcLpxUpSRLN1tuLlyQj7BFDDl+CLrBrYg0bfoD6yAP0FEQ+YU0V6ENOK7o5kcLbtPht/tiMnNrPevX1SXNcFcaCcFSxS1b2h/mPSR6Do9froJXAIJS25ybgqWeN2gChkLVP/m5lt9PwMmqzNA08QpPCmsQGZng6W/D2XRbyYf3jP4xRX56q9gFly/zi9tDw//Kn1NbOlzfvuipVhfSGLz2Bv6SCmtCEUiPHzAgZxOdm7fmkOvG6ahdNewl JoUTG7XR P8LJe1Hl3gypynxof/kPQnWjLCpmyGV0ZJV3QzWJ0k6egrjrylmuu9HiVa6OGw34AQd5RkgBQgaqvgTclXIcUrEnMI3Ogh5/ubEgS7zVkViuotCo/ekDpaAOf5FDxcXl/l0tFHLw2uhj/tWwuHDOHB+aPXgLKJw3aJBnTPvicFLzGb57D6MB57WYcBs+/6JcfEvkovioBDMwcO09k/lHbLYe8ofCCf2gfkLhvWz0vJVsmEZMH974gp6ieBVm9bmHRBjJ+nyhV+bw0wDM9HQSgWPGLsuFHl+yM9EOTZMb1AieyqnP7H1uaer0uTXhQrKIzV4rYPnjITd8evqMlTMuONF++62D1c7QgBEppcA6vGWriEc94jHbW0n2hgm9E6BjzAsri92PkWLc3VStTPBqtnSpuGU/whjerIXo8qAhctHbEV9m1FBHMFciTaAsWh3c87tROBmBpImUf6HYOPN3rwANvjdzL+ACG+/hKX2qu+/oehp/pMwhhGHz4g3dGvvkZWG5WdILIAc2qGJcN2sG44fOo/v75p6ekYGTLt9TPA811BT9cdUmQIxYp6na5C7CMbdP/4hijNORNt5aPI7lGWmLyKDLIryGLWP8nOevwji7qzIcLa4175+B1NYRAFs500jVR4eyL1GJY7SckNS/cOIkXWGYMlcdRWtHpamsvRAhZrzR5zh7A/rup3VsMJ9M+K4bPdopmWA5R3nDHCRtAig3T5Qyinq6tkuNXx5MK4PKZLLc= 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: David Howells wrote: > Make TCP's sendmsg() support MSG_SPLICE_PAGES. This causes pages to be > spliced from the source iterator if possible (the iterator must be > ITER_BVEC and the pages must be spliceable). > > This allows ->sendpage() to be replaced by something that can handle > multiple multipage folios in a single transaction. > > Signed-off-by: David Howells > cc: Eric Dumazet > cc: "David S. Miller" > cc: Jakub Kicinski > cc: Paolo Abeni > cc: Jens Axboe > cc: Matthew Wilcox > cc: netdev@vger.kernel.org > --- > net/ipv4/tcp.c | 59 +++++++++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 53 insertions(+), 6 deletions(-) > > diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c > index 288693981b00..77c0c69208a5 100644 > --- a/net/ipv4/tcp.c > +++ b/net/ipv4/tcp.c > @@ -1220,7 +1220,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size) > int flags, err, copied = 0; > int mss_now = 0, size_goal, copied_syn = 0; > int process_backlog = 0; > - bool zc = false; > + int zc = 0; > long timeo; > > flags = msg->msg_flags; > @@ -1231,17 +1231,24 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size) > if (msg->msg_ubuf) { > uarg = msg->msg_ubuf; > net_zcopy_get(uarg); > - zc = sk->sk_route_caps & NETIF_F_SG; > + if (sk->sk_route_caps & NETIF_F_SG) > + zc = 1; > } else if (sock_flag(sk, SOCK_ZEROCOPY)) { > uarg = msg_zerocopy_realloc(sk, size, skb_zcopy(skb)); > if (!uarg) { > err = -ENOBUFS; > goto out_err; > } > - zc = sk->sk_route_caps & NETIF_F_SG; > - if (!zc) > + if (sk->sk_route_caps & NETIF_F_SG) > + zc = 1; > + else > uarg_to_msgzc(uarg)->zerocopy = 0; > } > + } else if (unlikely(flags & MSG_SPLICE_PAGES) && size) { > + if (!iov_iter_is_bvec(&msg->msg_iter)) > + return -EINVAL; > + if (sk->sk_route_caps & NETIF_F_SG) > + zc = 2; > } The commit message mentions MSG_SPLICE_PAGES as an internal flag. It can be passed from userspace. The code anticipates that and checks preconditions. A side effect is that legacy applications that may already be setting this bit in the flags now start failing. Most socket types are historically permissive and simply ignore undefined flags. With MSG_ZEROCOPY we chose to be extra cautious and added SOCK_ZEROCOPY, only testing the MSG_ZEROCOPY bit if this socket option is explicitly enabled. Perhaps more cautious than necessary, but FYI.