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 2673DC761A6 for ; Fri, 7 Apr 2023 02:02:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 631936B0072; Thu, 6 Apr 2023 22:02:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E1686B0074; Thu, 6 Apr 2023 22:02:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4D4606B0075; Thu, 6 Apr 2023 22:02:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 3D43D6B0072 for ; Thu, 6 Apr 2023 22:02:22 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 013A81C730C for ; Fri, 7 Apr 2023 02:02:21 +0000 (UTC) X-FDA: 80652945324.05.BA39A91 Received: from mail-vs1-f53.google.com (mail-vs1-f53.google.com [209.85.217.53]) by imf10.hostedemail.com (Postfix) with ESMTP id 4C902C001E for ; Fri, 7 Apr 2023 02:02:20 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=k0Rk6Klr; spf=pass (imf10.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.217.53 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=1680832940; 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=QNjYz0mwAEnp5iGFtGlkbjUifhzDTS1lkAnmUE+wQDs=; b=25WsghUFw1+q4rt9wbJFgby8WPb9lhqg82OJx5r20LKbj+Rqv+wAYx5p/tdB/iiQVID9H3 ohX6cP/wrpVNjHHbqKy3obHP5XFd5I2IwYfrc7XhrzyOowhnGzt03mbEoQN++IKLto0luF RWbX1vVvQzG9VXDLHwRwbRSL8JHQodI= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=k0Rk6Klr; spf=pass (imf10.hostedemail.com: domain of willemdebruijn.kernel@gmail.com designates 209.85.217.53 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=1680832940; a=rsa-sha256; cv=none; b=qjyE0Tqa43bUPZd+r21SDUYLR2/Fgl3qx+qPGkbpRKXrRBYs9+RgBYv5G6F14/E31OXvM5 IdzF75Se+hIP1NipBek/uMY7FU7AMs4DPd9SX6T2qzdVaRLlHEcto3R/t3wZjY29tBPCpY Hi2/ufEeynaW+3Q4tnLgTikzO82/plg= Received: by mail-vs1-f53.google.com with SMTP id df34so35886511vsb.8 for ; Thu, 06 Apr 2023 19:02:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680832939; x=1683424939; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=QNjYz0mwAEnp5iGFtGlkbjUifhzDTS1lkAnmUE+wQDs=; b=k0Rk6Klrd+NMVlkQ0I4To0EBVYkq06tJRKyF9Q+HTZZ0mjPeotBo3paE++cFPYF74I d7YMh7vQCKZi1N9BOffWx91Z9WKlyoiq8QIJe2HB3hbBC/XT6aa52OB/+8fug6vGCi1D Nia+kmPulIYI1u+DRUOoTPbVkxzFpd10SUkVkW00sps43RMJ/0UWdKnXPLRV/OSqjmi8 gZl+aiT8xrAeqf1Vpf+QzMN9k0mRMRhaw+u6oqUurjvtM+n18w2/8gxsC1kd+w7FC2nn ZXYQqe0Qqim7CRV9MMMbxO5dOwfeUjdeIE99mgOFkjWw0tD6DM0lBb2rdCFNnUi4vm/M 3HbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680832939; x=1683424939; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QNjYz0mwAEnp5iGFtGlkbjUifhzDTS1lkAnmUE+wQDs=; b=1/7ljXxh44ZeyLmIuUjNXasVVsclmW9zLvLn7C6QMiYhshDUIYIZP54LFl6YDmC9/b eCbh+OukmuFxgIieO7dZR0HUj+CtNs5hQJaZdoFontRa9XomflwexnL13laPUThCBxCS WOuesOCzY5HzUccxCrvOCPMJCAUwG/u50oj1Hax1wu2iAAJqBR4E6d58g8U1n4GJZfH1 yNyJa/DuFKP5oZVkkJ4TQoXFbapmRYBXr44geFWEbfjAdJLxgs1DHGPSIDg4RFFR2NOj GvNi6fD3Fi1Re7Ep1NQb21O8cTh8rLCeuKeK6jlQnN1nQxNTNmEIJA+hIPUFQs6Y2A0x rGSg== X-Gm-Message-State: AAQBX9e2x1h7Q0qp399nMwxudyaq3wTMc1wsdjEvSyWQT+HZnxSKqevS Io3qplsdicg5Y3VBVWMQRmIGYcuLzqwdAw3J7ew= X-Google-Smtp-Source: AKy350bGEsmljBB5v0+qgjtoyZwIZGaewYP8JGjSoxxkH0iyM7Jm0eZvtJ9T10+AG3zRu8TocoTTHS8eeuT3PBMxDmM= X-Received: by 2002:a67:c190:0:b0:425:969d:3709 with SMTP id h16-20020a67c190000000b00425969d3709mr326145vsj.3.1680832939251; Thu, 06 Apr 2023 19:02:19 -0700 (PDT) MIME-Version: 1.0 References: <20230406094245.3633290-1-dhowells@redhat.com> <20230406094245.3633290-7-dhowells@redhat.com> In-Reply-To: <20230406094245.3633290-7-dhowells@redhat.com> From: Willem de Bruijn Date: Thu, 6 Apr 2023 22:01:42 -0400 Message-ID: Subject: Re: [PATCH net-next v5 06/19] tcp: Make sendmsg(MSG_SPLICE_PAGES) copy unspliceable data To: David Howells Cc: netdev@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthew Wilcox , Al Viro , Christoph Hellwig , Jens Axboe , Jeff Layton , Christian Brauner , Chuck Lever III , Linus Torvalds , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, David Ahern Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: m48qeqorfunnbumn1cj83fbez7hbkbye X-Rspam-User: X-Rspamd-Queue-Id: 4C902C001E X-Rspamd-Server: rspam06 X-HE-Tag: 1680832940-346710 X-HE-Meta: U2FsdGVkX1/VPu2eu6qqccnxgjB7q+DxVZH1SyBwUg4wgv1rWEZ+3GrwynaWqmhl4+tHMOa678AoSOwVTDvVBBAcVzk3gvFOSXjWRw17dWUdp71lIoYMH9RWyemH5K8sRYcDkZUfi4RK3eEUjOnqOH3j2KOFJcYnbHqIQhp4pVyVpuotNQDDrFHjuCbwttCpC005hrtfy3i2O7z5rx6mwLUsSAzDl4lynYxtPDVxeY9sAXIVbQKU+pW4dR7ShInA8YtnuWLG3QiBDkpBFYsdh/af9VOxWZi59XDeeCjnjlJLBz6zclUvwVXmJmTISfYic4JnawKf2CwM74vLZ4PJWvOiMP8RsX37jN9817Atr60OCHEX1Wnr2+5QGYeolnyX3FwyqbL1HwhdVbdvfXxgjvQjTpb4EU0Xk7s/hZrDmTJAZyIq7u1HDTC05nUTiJfbSv6o6PdNokZgIzfNHlUOUGi6Rnz1Ey6cyNANMZARm7GagbFCaHZVLqG4BnwTwkglblWbryyeWXKPf9U572LOgbXb6QW05RPPRyuKKTtQ0MlGhFy7/zZdaUQiv8+4aC33VIVJPf/5pgoxnJ0ccYZ+Y5hbUXm8r2jSyHbMzmURmrsZgo/G3+5J9IPhxQlkkTVZ46egDWwIAMXxnHIbXWwhtXOiNxJyv+mSGb+E7FVy4VoUd9lyI59eaTkseVaHrTsQjxMBFR+P6ymauB197FvlmKON0zG7f20qnO/FC7TPTEYQXke7tfhire+ivc0nK+yv0fOM1mmfght3fihfgeEK3X6/pnfMZDVKxw5YLp4nxMAuzP+ihYQ1ZnGCtSdxOzlZpfyk+gWzE+KDAR4JUdwCCCVfYxiThdlA176w1TkLa6cBz9tcyDncNG2lPtrcFK+FDass6Liq9U8EM5yc02tEivtHGeT7lBu4V2apd+Yhe3PbNGVmWc64mXZW4u/XFL9jh92PKq+kLLFToABFW4g 9ImR8ysO 64UK79WK9/34M1iGIej84WhvlBKEqjxV+MqQMLWPFppTUi83l9PVOBgN2MfcotTkeE/B9A2W5t3SW4pN9J3YC9qcpSJ2kdV6j0Igrn7D+cJj5cR1CTuKLqYAQuaYa9x6UYl1HauoGQ1bGa7UFbscxfmuycDtAyHaa2DQxDlymmLfX1jup6FolapOmDkNfPD0Z0f+D+lppNXik7JkhDKfi8N8UlEHQRWYEcQktVHDrnj9W3xtWM1z6r5GT3F8ksbuZk0ouLSqZ+yWL3Wq4RlTDvJ2DGCHRQ3DWNfrM1Z8i6RJzq9GLz3W0rk/MbAWIMvc8f7j4BZHwBedoNN6sguyjgglNZjxMszu8Sk9zWItWxN+eR7tD0akvFb4h5PBt/Vk+yFf2HTve/V4e3agdTCDTQbnY3HORfOgOOwSO0Xnx0hlbCeRiQI4w+fSGP2PLEGGJGiFlGHNuLm0Cfkdzu3nk2ikxmu+vjafr/zBrfTPXVKmEpDvlIRORcbSC6gIilhdBH53Vh0ePHSnAJghhWRQBj8K+FuP0xcgmVOp8uin99tSvmwT5HMVODNidIdZnD5Zy7rRDlaVBMjPcn0eFWhxbR8r+W8U3UUMLJkjrNHP+M+gUc8K/CGpkPRTlr6jnDowsi92J2ByUVLL/3YFAK9vXh5tmX2552KdWgWeV 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: On Thu, Apr 6, 2023 at 5:43=E2=80=AFAM David Howells = wrote: > > If sendmsg() with MSG_SPLICE_PAGES encounters a page that shouldn't be > spliced - a slab page, for instance, or one with a zero count - make > tcp_sendmsg() copy it. > > Signed-off-by: David Howells > cc: Eric Dumazet > cc: "David S. Miller" > cc: David Ahern > cc: Jakub Kicinski > cc: Paolo Abeni > cc: Jens Axboe > cc: Matthew Wilcox > cc: netdev@vger.kernel.org > --- > net/ipv4/tcp.c | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c > index 510bacc7ce7b..238a8ad6527c 100644 > --- a/net/ipv4/tcp.c > +++ b/net/ipv4/tcp.c > @@ -1418,10 +1418,10 @@ int tcp_sendmsg_locked(struct sock *sk, struct ms= ghdr *msg, size_t size) > goto do_error; > copy =3D err; > } else if (zc =3D=3D 2) { > - /* Splice in data. */ > + /* Splice in data if we can; copy if we can't. */ > struct page *page =3D NULL, **pages =3D &page; > size_t off =3D 0, part; > - bool can_coalesce; > + bool can_coalesce, put =3D false; > int i =3D skb_shinfo(skb)->nr_frags; > > copy =3D iov_iter_extract_pages(&msg->msg_iter, &= pages, > @@ -1448,12 +1448,34 @@ int tcp_sendmsg_locked(struct sock *sk, struct ms= ghdr *msg, size_t size) > goto wait_for_space; > copy =3D part; > > + if (!sendpage_ok(page)) { > + const void *p =3D kmap_local_page(page); > + void *q; > + > + q =3D page_frag_memdup(NULL, p + off, cop= y, > + sk->sk_allocation, U= LONG_MAX); > + kunmap_local(p); > + if (!q) { > + iov_iter_revert(&msg->msg_iter, c= opy); > + err =3D copy ?: -ENOMEM; > + goto do_error; > + } > + page =3D virt_to_page(q); > + off =3D offset_in_page(q); > + put =3D true; > + can_coalesce =3D false; > + } > + This is almost identical in the later udp and unix implementations. Could this be a wrapper, something like page =3D sendpage_copy_if_needed(&page, &off, copy, gfp, &put)); (it seems page is never needed if it would return NULL)