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 62A0EEB64D7 for ; Sun, 18 Jun 2023 16:43:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 609836B0071; Sun, 18 Jun 2023 12:43:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5916D6B0072; Sun, 18 Jun 2023 12:43:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4329B6B0075; Sun, 18 Jun 2023 12:43:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 2AED26B0071 for ; Sun, 18 Jun 2023 12:43:24 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E3E991C7CBC for ; Sun, 18 Jun 2023 16:43:23 +0000 (UTC) X-FDA: 80916439086.02.36683A3 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by imf27.hostedemail.com (Postfix) with ESMTP id 2046340009 for ; Sun, 18 Jun 2023 16:43:20 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=O9+clZi1; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf27.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=willemdebruijn.kernel@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687106601; 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=IBYSMIfVNe+e3QEh8TVSmb5vDV7wnLuHaPeZvqfS6CY=; b=A4zHJBAQHBRQaCCUdQRBl6yP/y0IX/sXU4+Th9YQCckalEHRiKPqgjyVZsEg5XV4/1FOpo yI8jlSBbBmyAK4nW1f2MEj4pg3+Peu5FC5nMiORdhUTQqKuqP1bCYn9ryhoByM+8xvhMRS BhJRgXMH9LqZKMVeYGe/Lrn9kql/cyA= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=O9+clZi1; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf27.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=willemdebruijn.kernel@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687106601; a=rsa-sha256; cv=none; b=vbAuMvq0NAsQO8U08Rmwj9Ljt36RUrnaKYCpOk2QE26RCAq67IQsGg6J7/yX+O/et7Xs6N MV/NHEkhvN9YrNUP1b6FPtzJdSKB+ky5mofl9jS00juqq53uQFTgRMw/Nlhq9GOxXgx0OB tc4sO85t9RUBJFSAkmHpIlETnWAOdGw= Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-62ffdbd6787so17934416d6.0 for ; Sun, 18 Jun 2023 09:43:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687106600; x=1689698600; 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=IBYSMIfVNe+e3QEh8TVSmb5vDV7wnLuHaPeZvqfS6CY=; b=O9+clZi1I7Q2D1/148JPWZ6FRaUXR76yXW7hKnWfbu+//s8ivOGfLVXwfMlXCpPhQn Fr0Foq5QI1gmd6v+7XUMkQT4jk4mw4tEZS/7Vc5ItcsMXPyIE60fCu+vTUcx0VUVXWos dP91NGU7Ak6fQDOj91Rxo9Lat83m2JqRkCI3s3eC3Hbbml9ElTeH6n3l9F2xW4Mqv+zC krc5FIvo3kbT80oXASGH9uXiXMLTv8tvmpcEH1tp9YueBbzemvloGczhOl/KtMd83mRx cJVQUCbZiQKjbxDULyPV+ILROWx94QmTyORWYZtd8RKnbYWT3pUjUX+G0PCUvOuEccJe +NXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687106600; x=1689698600; 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=IBYSMIfVNe+e3QEh8TVSmb5vDV7wnLuHaPeZvqfS6CY=; b=KQuDI0sLLNb6+vpPQYgTZP4lrM3sua/JqSQVxER5YUH6V6nT03e2DeChRdRKg0HoMC YWUR8sZm49SxfIGteNcz7C+zuzi41sw7f5pnjknUbRH1Lg29OfwTe5QCHJV4QqDsr+WT 7eqJYcd5zWhUq0MKaZLAwqCwu9mslphKaXU4KTpu3pD+yvqSOn4u2trDY+oPs1LQNtNr lnf9klWhU+8ULdOOf1bdBEud4428XWi8dXPpmLBfTLGhkcdiDjyaGd+L9LR0bMuYUSOb XUqlBHu3D+ysUt1KtiFt3yQ0t7c7HLgvBpuHQ6ad3zWNsi9QyPa5CqbOEC4NuLIFgN4j nTDg== X-Gm-Message-State: AC+VfDy5hwgAIdcCz3FOFc3d1vuT3wjvl28CeMuo76qSnMdKTxg3tay7 PFoC2Q6xXVcxkj9g5mYqIdo= X-Google-Smtp-Source: ACHHUZ5vAKSFUxtIEZrqdP7lnIVdO8BAAmNZswyf0pFWotHoIo+NzKaBjqBthMB99jVyHERDnfYhUw== X-Received: by 2002:a05:6214:410:b0:61b:79ab:7129 with SMTP id z16-20020a056214041000b0061b79ab7129mr11581461qvx.37.1687106599991; Sun, 18 Jun 2023 09:43:19 -0700 (PDT) Received: from localhost (172.174.245.35.bc.googleusercontent.com. [35.245.174.172]) by smtp.gmail.com with ESMTPSA id h2-20020a0cf442000000b00623927281c2sm9511953qvm.40.2023.06.18.09.43.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jun 2023 09:43:19 -0700 (PDT) Date: Sun, 18 Jun 2023 12:43:19 -0400 From: Willem de Bruijn To: David Howells , netdev@vger.kernel.org Cc: David Howells , Alexander Duyck , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Willem de Bruijn , David Ahern , Matthew Wilcox , Jens Axboe , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Menglong Dong Message-ID: <648f3427306bd_33cfbc2943a@willemb.c.googlers.com.notmuch> In-Reply-To: <20230617121146.716077-2-dhowells@redhat.com> References: <20230617121146.716077-1-dhowells@redhat.com> <20230617121146.716077-2-dhowells@redhat.com> Subject: RE: [PATCH net-next v2 01/17] net: Copy slab data for sendmsg(MSG_SPLICE_PAGES) Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: rget7kktswbh1yfm676dz5wjmudbb17w X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 2046340009 X-HE-Tag: 1687106600-61606 X-HE-Meta: U2FsdGVkX1/jSK5PAt4lrCIci7TMTuHpe4rCA44BB1cqp3xY+a1ez6Xx5HiiE+HtkDr0bMF02Mgoyjtm9bC+anWSsZDlbWZUfYVb5JSqRYiHeFJgW5QMh3hAYZfA3xSlQpGJBDiW2tAkbpjWRtbrPblqpJZ2XExKzXThsuunfXEamKDKsWaf96oId+tPQ1C0LBZSOiQNLyxwupqyTaIkpMiD3UqTAEay5t1rI9B/R4l3aTQDDNt0xYI9gFD6NNwTu+2fFdhXNGGRAyDo0TWABEgtmOAHRRU2wJ55R9s0lnnRYLT4CQZkWAnb+cW0kV7+R3uoW/zMtq/WAqp0sxjPg3BYvgafQEUxwK9KnB43MfwMzUHokFbJsx8enso/zKsIbfEI1MYVmePtTnySLwUSHcALtYbCVAjnJ+W0yG7dNralsSqce97iLP95UAP5MJE14v7fSMwcfI59DnTCRQW3ZKTgowlvqPW/7vaQOSrstDX1UW8Ebx9s5Yxdg+ma4dRzekJnlbyYUDHaW6tlZjmggsJCSQN3k1Gdh8H9mso0qYtNkDLMk+ICPZrbtl7lL1ZjLjTJHyEF6IvsVhAcuIgp2hEylQdapg0Kg9DuOWa5CRx9YksC9lKl/zAum0gWB0zDfVDDB8OQSF/SQ/1yEc53DCyebrwwHI00rxgqSGfQMn31zzqluLT+XjeiluJ/AiZJ2p68oADtqFH+7Vu7wSHXx7Nby1NlOYCAce4KSnELkZ415Zczlf4HrBOa28iV/fGYZc9anK8FlDSoQR3arAJ/1s1VVyXl7mn6CxSh6qHWEbW0WgYJ8Yy0bxZimEKHzH9TH8+ID5akiQElBzKgMQJF75qC1juMphj/ccu8CK7RxhwlVQPZ+ih1Sll4VTKOYEu5eUKuTS7N2gqfUGc3aNmxUsr3hlBIgRz89sliWLBTl+ouVx43Kl79vXn2dPFBt7mGNKkcynVy3hRlxEE41KL 5SNL4lAZ jMO+XdkylRwnS/Au7H6oEyjgt1LojoTt+dTwBpUvfdOdKFQgZndZ2ad/ArXMsyMoIyuAT4FyGUnSFnXrRDDEg1uIxUAInewS1PxJoZTjxJdubXUYvxrLcFiUBIFinjzZCuaCzbJeH6Wc352uwjHPLljW13Z4p/pF6siHkSYA0izbJCd48cWwkJvealGiCevR9SIp4W+YuItSFghigCokceFt7qyDM2Ld3SfPfDzn70S00I+C/sEMfpUNz+T1yRGQaJAjNdK9WZSSMfvbkmLPLb0s8HY7FIQSxct8bcC7E11fbH7BkVsJHyb/d/LnlcB87Kpb3eAeDnqcK4aFpJc+v8Sz3LII29C3nGQz6n3QD7lSf9FK6cac4qz/Lyly97IfPBmkzHzXm6kTkUidy+JtjSsOoJn70WorM75pXAQdFsFYC72Q5jrqBpjQvyEsKaZJY8gvzS8noI+bf8VqKTc80r39h5jMwvtNElzKusLBjuFvL6tICfjDCfhSJbvgako7wi9TGIAHuqQZqPQz4U71hS4c/QxRUhpHBnED1VYBg+hpy7Oynq0Ivjb51n4qam/gA8k+1DfR+ug7rHxrIwu9yX+59apTFshGFHWsVNh5PfsotsIajLMajSJ40ag66a05A9Csw17l/ZnRgtQS2tywGWSCFQBwgz6euolVkHzdw+C5zcbEdcDHkc9g8mnxjQD/G7HReCclKGOj8lodNucbsWdq9h6rck7BJCrQQ18f2nffM5pfHQxKYesTiaEipjJ2fPx1WI0Y0u7FRCgPh/a1LeNep5rqM7S81/vGAy4A1Oo8iUZi7nk/5M2u3MFAyqqf7d1yHQxH5qIjv6CNMkBVOIAiTnwLm13rFJgg8sEB7bJY7nJafS6DzhhBbCw== 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: > If sendmsg() is passed MSG_SPLICE_PAGES and is given a buffer that contains > some data that's resident in the slab, copy it rather than returning EIO. > This can be made use of by a number of drivers in the kernel, including: > iwarp, ceph/rds, dlm, nvme, ocfs2, drdb. It could also be used by iscsi, > rxrpc, sunrpc, cifs and probably others. > > skb_splice_from_iter() is given it's own fragment allocator as > page_frag_alloc_align() can't be used because it does no locking to prevent > parallel callers from racing. alloc_skb_frag() uses a separate folio for > each cpu and locks to the cpu whilst allocating, reenabling cpu migration > around folio allocation. > > This could allocate a whole page instead for each fragment to be copied, as > alloc_skb_with_frags() would do instead, but that would waste a lot of > space (most of the fragments look like they're going to be small). > > This allows an entire message that consists of, say, a protocol header or > two, a number of pages of data and a protocol footer to be sent using a > single call to sock_sendmsg(). > > The callers could be made to copy the data into fragments before calling > sendmsg(), but that then penalises them if MSG_SPLICE_PAGES gets ignored. > > Signed-off-by: David Howells > cc: Alexander Duyck > cc: Eric Dumazet > cc: "David S. Miller" > cc: David Ahern > cc: Jakub Kicinski > cc: Paolo Abeni > cc: Jens Axboe > cc: Matthew Wilcox > cc: Menglong Dong > cc: netdev@vger.kernel.org > --- > > Notes: > ver #2) > - Fix parameter to put_cpu_ptr() to have an '&'. > > include/linux/skbuff.h | 5 ++ > net/core/skbuff.c | 171 ++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 173 insertions(+), 3 deletions(-) > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > index 91ed66952580..0ba776cd9be8 100644 > --- a/include/linux/skbuff.h > +++ b/include/linux/skbuff.h > @@ -5037,6 +5037,11 @@ static inline void skb_mark_for_recycle(struct sk_buff *skb) > #endif > } > > +void *alloc_skb_frag(size_t fragsz, gfp_t gfp); > +void *copy_skb_frag(const void *s, size_t len, gfp_t gfp); > +ssize_t skb_splice_from_iter(struct sk_buff *skb, struct iov_iter *iter, > + ssize_t maxsize, gfp_t gfp); > + > ssize_t skb_splice_from_iter(struct sk_buff *skb, struct iov_iter *iter, > ssize_t maxsize, gfp_t gfp); > duplicate declaration (no need to respin just for this, imho)