From patchwork Wed Sep 20 22:22:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393495 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 C350CCD13CF for ; Wed, 20 Sep 2023 22:22:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4AF7D6B018E; Wed, 20 Sep 2023 18:22:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 45F356B0196; Wed, 20 Sep 2023 18:22:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 300966B019A; Wed, 20 Sep 2023 18:22:47 -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 1CEEE6B018E for ; Wed, 20 Sep 2023 18:22:47 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id B4233C07F9 for ; Wed, 20 Sep 2023 22:22:46 +0000 (UTC) X-FDA: 81258401532.29.601C0B0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf30.hostedemail.com (Postfix) with ESMTP id 1905C80022 for ; Wed, 20 Sep 2023 22:22:44 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gIG7h1J2; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf30.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=1695248565; 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=wf1ilFnN40MCOQdTnir6rzgfTHWCDirDBrdNo7z0qfI=; b=OkuNjpW25gion6HalkkQFfsK5s/r2uf1ra4FnN0qHJjJajVzGhH9BjeuCHhQO5Jqa3sCON fm5wZyFjME/oggsswUVuAVEbVxAIgS5hPCFse43TTyAFR3vTPq50ZHPoh9dmp+u/RRLHdU MJMWLiKA2Ac83FwCnb9k96Oywn9gmoo= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gIG7h1J2; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf30.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=1695248565; a=rsa-sha256; cv=none; b=8YkSAnUUoX/SSf7Ut7tqqFZZqRvCFD3cDod/ZMKOtyp+Fuj4ZI8DxgN7v9ID5yXE64PAMd wP6xFZuhG2a+UMCxNzRZtL4nKUQt4BHhxZZ1CF0+kHJm5WwC0zq+m8ajNjBfTTrs5ydr+l CFII0R66MuuaPhDbCYU1wJf6FymOF68= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248564; 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=wf1ilFnN40MCOQdTnir6rzgfTHWCDirDBrdNo7z0qfI=; b=gIG7h1J2UsxpUbGt08CsIOjMXpr2i8JpQbWjd9/l2EBgNZ+lyd2FEopKlnbnXX5PDOHu80 IDb2+jMrlJwHcGfrSnDxmYPxfwuX1eUoOSNT+Y1gBpmCvBuKunmcdU7uwAys/5sOdts3vL j9VE+/MsMcesWsQlyvcGAubx16YOqJI= 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-163-wPPuppLQO0SLdceeEFMs3Q-1; Wed, 20 Sep 2023 18:22:41 -0400 X-MC-Unique: wPPuppLQO0SLdceeEFMs3Q-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4219F800B35; Wed, 20 Sep 2023 22:22:40 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id F3AAA492B16; Wed, 20 Sep 2023 22:22:36 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jaroslav Kysela , Takashi Iwai , Oswald Buddenhagen , Suren Baghdasaryan , Kuninori Morimoto , alsa-devel@alsa-project.org Subject: [PATCH v5 01/11] sound: Fix snd_pcm_readv()/writev() to use iov access functions Date: Wed, 20 Sep 2023 23:22:21 +0100 Message-ID: <20230920222231.686275-2-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Rspamd-Queue-Id: 1905C80022 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: gojjunjo3wndaxqjcxq64dk83dc7ofwe X-HE-Tag: 1695248564-764996 X-HE-Meta: U2FsdGVkX1+ZhJVtsIPfMy4uuXQh0IDYwypNPhYyWAKZfTYUuLnxjd8aKkZlD/iWsR3vUzOiZ0ogUAiLVABujIJZ93tGYEIhub9EScxDiWNKXU4BdBCgEzRm74ezff7N4BJ47WpdXIIZFvZwIjVXr1UOfpsBQaYuE+DIvwS0eodgJqdoofSLdLLw7epU15kPlGjFzRnypn/k2lWoWx1hn4rSmEmSh4ZO8VdIDXizIs8AzZ54jTbstcfp/CnG2Cqc33JY90ERWHAZKqttlgz1sMzcUXslXv4QOwvgVbV315EZjMDpTzNFGVTkW8G9wctxVQBNRIfWV+0jVYe8Ek0R/QK019LIxHTonwM84ytQ42XGkf98IY98PuryzLEMEHRDIvxHPuW66GyYC0QD5zq1Z5t5//KLPIIV51txVYuLEZPlUjuK7sbafZNBDuLrCbXHHsriP0mEYrrGJ94CjQ/qy/P54ykuEIQJptcJ63poeTSJ+Nf5u8Kve5fQbqNnBtO49nnLe+AAKXZ9klwLma9dqY9/RUfylM7R8iRiR3wrr0AATnSzHjaG+92WHRECFA1D3g9kZkSQPNwhTSvOZ6ufEZn3Q7vXHeUjUkv07dh1hsodPuValEUxGleQLYiHMn8dVN1gz9GVt3g5r/InOUA+4I+676s11shvXEZ8NXYG5mEtm0EFPf2W5cDygRcC7St2e+bo1mi4ZNEB/+pBNZETKlR81WOA7OWd0UhB1neD1VwmUiCzglrk6shrJw5ym0V53HN2GgGvlRxrr2Ya3yT3B2UiPHlZguVxtatxsbaGc7UcZfiAvDKqPvs5TZ4QuuAw6a2DRFPxkQELCFjZBxOG2sxmpjET8/zcxYxMewMpjX4gmyhv2jOQNYhrzVlhLkGJ2YXllLd5G8UtYZ3W5Y0NwchMNmNtEqxjanjXpRHQDP6d5hN0qpjV+JPwn2o5vCTC7WBVfKS/URrwSi5hg/c 3ZnQtCd3 DnTAtUICCN0TB0tn2DWPnXbYt/zsI8dcX+/cZxUn8yyLeEtVrD7onQfWW4qkgj9RIZbTzdQ7s83L6Al682F2e3wzrY2CXrPdkQhG5Le7p0n1XnpTMhQ95qHIUVB1tVjseak4+O74YDA1mRGVkO/n2/dHaD8MQj20D014vGIExmfHlX4SHFb+UCXxp1U09XmI/kD9XOIdWIMqL8izbXQsEw1gLglfB8shnwlcKQuTnuVENU2KKDN69K4ovifCwt6LjiqzEc3Hfhll2W/+FUhEPOvs6U5QQSro4sczX2+wxWem/ryqDQhT12bElrpYEhbprY6IID12gNgVyQfikYIbT134dJXY/ZK8EmGEvwuBbxMHcxZjtq4GNfAM8fd9WoiSsrRaY 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: Fix snd_pcm_readv()/writev() to use iov access functions rather than poking at the iov_iter internals directly. Signed-off-by: David Howells cc: Jaroslav Kysela cc: Takashi Iwai cc: Oswald Buddenhagen cc: Jens Axboe cc: Suren Baghdasaryan cc: Kuninori Morimoto cc: alsa-devel@alsa-project.org Reviewed-by: Jaroslav Kysela Reviewed-by: Takashi Iwai --- sound/core/pcm_native.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index bd9ddf412b46..9a69236fa207 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -3527,7 +3527,7 @@ static ssize_t snd_pcm_readv(struct kiocb *iocb, struct iov_iter *to) if (runtime->state == SNDRV_PCM_STATE_OPEN || runtime->state == SNDRV_PCM_STATE_DISCONNECTED) return -EBADFD; - if (!to->user_backed) + if (!user_backed_iter(to)) return -EINVAL; if (to->nr_segs > 1024 || to->nr_segs != runtime->channels) return -EINVAL; @@ -3567,7 +3567,7 @@ static ssize_t snd_pcm_writev(struct kiocb *iocb, struct iov_iter *from) if (runtime->state == SNDRV_PCM_STATE_OPEN || runtime->state == SNDRV_PCM_STATE_DISCONNECTED) return -EBADFD; - if (!from->user_backed) + if (!user_backed_iter(from)) return -EINVAL; if (from->nr_segs > 128 || from->nr_segs != runtime->channels || !frame_aligned(runtime, iov->iov_len)) From patchwork Wed Sep 20 22:22:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393496 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 B0E32CD13CF for ; Wed, 20 Sep 2023 22:22:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 329586B019A; Wed, 20 Sep 2023 18:22:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2D8A66B019F; Wed, 20 Sep 2023 18:22:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 152A56B01A1; Wed, 20 Sep 2023 18:22:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 013CB6B019A for ; Wed, 20 Sep 2023 18:22:52 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id CDC73C0D97 for ; Wed, 20 Sep 2023 22:22:52 +0000 (UTC) X-FDA: 81258401784.27.27200E5 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf18.hostedemail.com (Postfix) with ESMTP id 2DE8E1C0022 for ; Wed, 20 Sep 2023 22:22:50 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=HNrA5sgo; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf18.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=1695248570; 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=j/K7bby96tUMA/iC07lWusXqTlhgR9zlJgJ7++h0ZQI=; b=MtOjDqv0+Kph2xnYKalmFxB+Ts156OF7V8Ox3qV0NzDb4AEGNBBPhfNzBmne2yyAVDbEwV qNZHdnjoTiif6hwYKriUAtWS15GoFnQd5Wm/tMpC4Kpp5hERZFNZcLIqVJeEV5gL2HQCIJ H5YuSVBaKz8max0t1ZeEJD+jsd7oeNQ= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=HNrA5sgo; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf18.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=1695248570; a=rsa-sha256; cv=none; b=pSlpbZJrJLPMvlxiQx0xVUhHeA5ky7/dd8+zxKbcsQZRc8XKf+SflvHAoEdOGg8rJjuu0B KPvg8YvZbuZAoIEfBD0z4TjEkUio6AXhYx8FidaTVzeagbhCh1TiRRzb+pHfykZxoqgUee 0mWDvPNpwOEVVc5E/tsfzKYRDEu0BG8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248569; 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=j/K7bby96tUMA/iC07lWusXqTlhgR9zlJgJ7++h0ZQI=; b=HNrA5sgovKS1kYk9UfNGmHYAz7nChnCdT3FWFbWnqhOo/pxr1GRLqWhh/q1UGwBSm1l+po b2e7Y60WaW+CiO2YOV+jBy3KOTOdfguBAr4obWQoXgf1wuex3P8UO3XfikR8+HGv/yOnNJ ztpeaMoCxMyUeAOgAanux1iwaxp0aJU= 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-553-qSI8WUj0N3Orf3pb4D2D6g-1; Wed, 20 Sep 2023 18:22:45 -0400 X-MC-Unique: qSI8WUj0N3Orf3pb4D2D6g-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 58FB9185A797; Wed, 20 Sep 2023 22:22:44 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB58E492C37; Wed, 20 Sep 2023 22:22:40 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Dennis Dalessandro , Jason Gunthorpe , Leon Romanovsky , linux-rdma@vger.kernel.org Subject: [PATCH v5 02/11] infiniband: Use user_backed_iter() to see if iterator is UBUF/IOVEC Date: Wed, 20 Sep 2023 23:22:22 +0100 Message-ID: <20230920222231.686275-3-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 2DE8E1C0022 X-Stat-Signature: ibiocqyjgp3a8xh9srttn8knps7igxjw X-HE-Tag: 1695248570-954586 X-HE-Meta: U2FsdGVkX1+lPfINi3HyJ9+zsu3Pf8jOjReGLg+1X/i839HLuiEuswBhvf0rmqYJDhNkHXm5eMUhblO/uPF+8ERMiauCx1dG6kBOYHPcq3XNs8h/UCaWO05tKAb57W2YBI+ZL8EAldhdCy8jPsy1IJWph318XJd/brX0qRHtPtr8raQvDcL842CnBDa73zyA5P6CzLI55H1xd4HQkKI02RaYp9RkD6Gp2wZ3ULQFH7+YKRPGXAh703lqDAhVaWtkH4hvD5NZNrSHQsyEE1xU+BTDe3JFM/18PCV6kIN7dGviIbmWqGhezTT9CjUdwRz18xTqpAEs7Ww4ZATbDUhZAjES3+GZvF2YEiOCob8h4VowNMV6TiHBB0CUeypOPyFls9TETTja3AHJEFVSc0XEhuWxXR7brIm4oBk1S3fGWOdj4L71Pl8hQucqLhH41S2oWe+PK/AUy7xMgpwotZ+ksU3pQr6Fy4NyueYq8Q1pqm4Fkl2an+rL3hVgOO2U199lAa+7Oc0CadnXMuKQHZ+DGHUSpn0kpWqjSRB0M3r0vaQl5CS3ron/nPm9rhxVmXRWCKB9Olez4WsNMebeHwKgLMrYGqCCKRqUpOJtAFpX5CEFdNWVMXhw5nKt5Vx704J6t7vkonFwoOCdEWOjcg39pQM4CN0Ng9ZvpMRp32z/17nj/2szbB/OyUcE6x/YER28hfF1e/D/ajbwhxHVbFn+Nwb6C2Fuc/Fhii8AWsC9I0CizxjVxc3i1lzH13bqIB6oHccWVkzsly+RK0lMh9RLSkfTs5qvEv5azHh5PKAeZC5vE64Gkm9zfiPPxzCfOQOc/E7d73Bsf55esJPUt7uvZRrV/as66FFNpdKYwRnUuw+Rc5UUi6X4ntvKECet8Q9XOoZcxYsByzgOlEyYupLfobZDrkygYlaN14Gh5NDCtl04yV1FKcVa4uAxJZxkoNEYayz6367TrOkhfq6oEku w2PmWQjK LSjwzCKeOTvaDO3ETnmJgk5YIW84G6hZmum1toGhtJYa0JT4FALM2DUw593NaJRRB1l+qVqPtfcqE/YDrHgX9Pr5ObnDViw3aXjgUCqLucE8DYbO/d1h7OMAAfYVVdqp9AM6EgqHvekmvbpgNAU9Qi3VcryTDDUYDjxOqPmrD/vKhqzOG3GHrhdqm74Q2FYk8Lx/Oj3MsbVxw3FCHlhjZ8x5lsROBX08bmSkOYel+zUg0IdJg6PH+Iz6y5dLXils26FdhWERfXNpqBxzCHO9Skr1FpxyTRMJB75zUgsT6NHTPm+Ye0qo1u37T3z1ApCI99syfQM2zD5xGlLyw6aCiikD864F0FSQQNGh5ozQDcTgxrOxjH11JBWms4mpIcO6h1mRhIN+tFXurys0= 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: Use user_backed_iter() to see if iterator is UBUF/IOVEC rather than poking inside the iterator. Signed-off-by: David Howells cc: Dennis Dalessandro cc: Jason Gunthorpe cc: Leon Romanovsky cc: linux-rdma@vger.kernel.org --- drivers/infiniband/hw/hfi1/file_ops.c | 2 +- drivers/infiniband/hw/qib/qib_file_ops.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/file_ops.c b/drivers/infiniband/hw/hfi1/file_ops.c index a5ab22cedd41..788fc249234f 100644 --- a/drivers/infiniband/hw/hfi1/file_ops.c +++ b/drivers/infiniband/hw/hfi1/file_ops.c @@ -267,7 +267,7 @@ static ssize_t hfi1_write_iter(struct kiocb *kiocb, struct iov_iter *from) if (!HFI1_CAP_IS_KSET(SDMA)) return -EINVAL; - if (!from->user_backed) + if (!user_backed_iter(from)) return -EINVAL; idx = srcu_read_lock(&fd->pq_srcu); pq = srcu_dereference(fd->pq, &fd->pq_srcu); diff --git a/drivers/infiniband/hw/qib/qib_file_ops.c b/drivers/infiniband/hw/qib/qib_file_ops.c index 152952127f13..29e4c59aa23b 100644 --- a/drivers/infiniband/hw/qib/qib_file_ops.c +++ b/drivers/infiniband/hw/qib/qib_file_ops.c @@ -2244,7 +2244,7 @@ static ssize_t qib_write_iter(struct kiocb *iocb, struct iov_iter *from) struct qib_ctxtdata *rcd = ctxt_fp(iocb->ki_filp); struct qib_user_sdma_queue *pq = fp->pq; - if (!from->user_backed || !from->nr_segs || !pq) + if (!user_backed_iter(from) || !from->nr_segs || !pq) return -EINVAL; return qib_user_sdma_writev(rcd, pq, iter_iov(from), from->nr_segs); From patchwork Wed Sep 20 22:22:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393498 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 96FCECD13D3 for ; Wed, 20 Sep 2023 22:22:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A7E456B01A4; Wed, 20 Sep 2023 18:22:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A2FF16B01A5; Wed, 20 Sep 2023 18:22:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87F7C6B01A6; Wed, 20 Sep 2023 18:22:57 -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 6CF1F6B01A4 for ; Wed, 20 Sep 2023 18:22:57 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 3E194160788 for ; Wed, 20 Sep 2023 22:22:57 +0000 (UTC) X-FDA: 81258401994.03.BCF1B4F Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf09.hostedemail.com (Postfix) with ESMTP id 83994140021 for ; Wed, 20 Sep 2023 22:22:55 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MFmIX2T9; spf=pass (imf09.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248575; 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=437kiFAHLHJfEBaWwZrq8WSevs6s9dyVAFCFY8Y8ee4=; b=dYE4mtNBsKG2e63RBAEKzjvQ4gFI/s4lKP4OgQO0KNuaRNKvNs0WKG0++Dn3h8O2vRgfQF nz7f0x9QGy1lb2bbl86+wmftxBnNxJKEJJAel8PhHuxmO9bE2D5Z7M6YaT6L1O3mlkbfTN IRjj6pNoWSAVo3p18QNwKN4SKLuAwMA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248575; a=rsa-sha256; cv=none; b=hXLTv1MpZVpDWuQovj3gCCpNy4MOH/fZkVaBME63Ej3dO8Juu2h0BgdFQlpDhpWYk12ARP lcpBuqN1cBDptRE5HPT7W3U6HsL5Osk1TSBrvk41HBPZ+lTykq43biJDc5+Ly6rUXoCFqy 7YCzQ4s4sjOdjVKfAACSC8788DqSZaM= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MFmIX2T9; spf=pass (imf09.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248574; 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=437kiFAHLHJfEBaWwZrq8WSevs6s9dyVAFCFY8Y8ee4=; b=MFmIX2T9aUrDOKitCxGke2sq0ojgbaM4S+1AIUy7LQdubbPuE14qUt351az8H+S9ygrLEj FdUaLRXmYjXHFF2103AUvqxlWFoL1peZKLZNhF6FW3IqAgOceTcB7fKtOjywidVrj0TEuc w8T75v0mhvJ5trwUvz1XR6stFiwp/VY= 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-453-GGmAFyesMt6gNbnmBSrgrA-1; Wed, 20 Sep 2023 18:22:47 -0400 X-MC-Unique: GGmAFyesMt6gNbnmBSrgrA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 95FA1811E7D; Wed, 20 Sep 2023 22:22:46 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id F228340C2064; Wed, 20 Sep 2023 22:22:44 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 03/11] iov_iter: Renumber ITER_* constants Date: Wed, 20 Sep 2023 23:22:23 +0100 Message-ID: <20230920222231.686275-4-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Rspamd-Queue-Id: 83994140021 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 6tr13bzt9zq3qpo6zohxktwkw73hiay5 X-HE-Tag: 1695248575-542915 X-HE-Meta: U2FsdGVkX18gutL9iB4yeJxWzjlyhYZw/ZOHYHeKeghOkVtwRA5BOxcpTPPFVeJqbvXWPMCyc2dESzOnKJXE8+iETReSAxVcnzwePqn9A3w+T8vkeYh60PD1I2YuslPDh4ififj2a2FhGBaDRdnN7XsOIFXG+y0hOChcFaDx5JCZBRxssfNFIDlqy8q+jpuqJReZ2C4kro46a7QrkOT3oqmzgnQz1WL2iSjI1KhZcihU8hQnpyBun4yXhR0AzpfbDEb9WVuUE0lTxjcsoDSfOFP75qhPqDy1XsKpqMDIkPgZTDJQQeHtBcql3Z68hM5iW/MvTLDDu1tNFGZKWUFPl30N5kP6v3dsSRwAlevQ/g7uqByl+Naji1XF0k64G+2PAq2bJaWJ0Im/X29afxSm9gqHV/R6xv8GvBxexupPx8oE8dadKg290GveMLBQDaL4M7oLFRumIVJjOxiCok0pa8KzAPBiCdNK5gMnOTzEYbFZ7Lh2QeSEWx74QnU2SxV1eorPSX9YNUKe9SJrRtetpUbQYpuI1NjUxHfpNYb3UyziIknaEBmzpplgMTfpoYBw5fEmBVZu17227kuiSEueDLwBJ6ON3GAe+YMVNzZs3cgA58kIOc8yYc2vpFyVsI54S1OhdFO2TmEzOMjZkKMQe8JuIjGkjHfvFm7JptmxWTq2so7Re67s1etM8CEQz3gUGphaQ190Bf2EgeLnakp22ng8d1Dyf8JVNcC+ewo826fj5+PQds4G/A1DBZgyg1Wy8cWscBB+xqDn0WCk+0tC0PcXFCxZ4qI0zTLb+KZBMTwJi6tFBbcPyCTSSMAul9cQ6c2lW7C5BgMJ2aZf5te+DM+lk7uwrMlMDdByiZ8GEz3LTTZ2TFmSTD2Fq1dnkP3Qkcvds0RlklDeWcQ6UpiDjMBsWwPWzZx5/BFE4BxxkGWKFGVrCxzp4L5QQ5nUe1kbXl1sUWQdLr3+E6O/koC 0wqwfjVL mwEXeHQyYUXt8IzqtRY4RD9fpzhww7/g2l1oirKjQEP3MR/qSx8miuhoXjycjV/RxG5AdsT3GzkebKuVA8erwn/xlV5p/ylA5+akqzLoHdAHhOMJl6z/6nActzeqIDnbnUyTuKxn9aZ1wUJ2ZzqDVFxmngCp6tedQ9WPp4uXIo/Rf3doIUMaHafM4v5oU4LGG/5qzt4NSqqa2omHKNNo3jb7/HZY3+u1PrWjDcM6/ZS8OtAUuzuRgcuI7KT2/f3Az7T42XlEIcvYR4lR/E0DIsssigTkDxJdQTKStkITQlDWD8mH+QgS3XJJLuP1KxaFOt9Ua2UWlwgNekbcLSmiAni4j8uQKJ6f4w/WOA7Oeyn1p0c5rDcSNKZbl4dR/UohRW0RjjXRkSQJ7CQDaczaE7HXQH/oJ4HbPtwTBzXxOyPAV4Age05oi1M/XUMhttSa5+bHzwT9qTgnrtxDCPIRkVbwFTvQpwNRk6xVpXuggZEcngJwS4FyUk52dmiXnpKHc4FRBH4GKG116HJw43ktVCUE9hlxUCECM2E77tR+RAU2wFaXEf96zdRXeJegutMWjLekyS831hIgqvo8= 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: Renumber the ITER_* iterator-type constants to put things in the same order as in the iteration functions and to group user-backed iterators at the bottom. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org --- include/linux/uio.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/uio.h b/include/linux/uio.h index 42bce38a8e87..d1801c46e89e 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -21,12 +21,12 @@ struct kvec { enum iter_type { /* iter types */ + ITER_UBUF, ITER_IOVEC, - ITER_KVEC, ITER_BVEC, + ITER_KVEC, ITER_XARRAY, ITER_DISCARD, - ITER_UBUF, }; #define ITER_SOURCE 1 // == WRITE From patchwork Wed Sep 20 22:22:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393497 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 3C082C2FC0C for ; Wed, 20 Sep 2023 22:22:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C02186B01A1; Wed, 20 Sep 2023 18:22:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BB2796B01A4; Wed, 20 Sep 2023 18:22:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A53776B01A5; Wed, 20 Sep 2023 18:22:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 92BA56B01A1 for ; Wed, 20 Sep 2023 18:22:56 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 6DF3740DF4 for ; Wed, 20 Sep 2023 22:22:56 +0000 (UTC) X-FDA: 81258401952.10.6DFFDFC Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf27.hostedemail.com (Postfix) with ESMTP id BD8B34002D for ; Wed, 20 Sep 2023 22:22:53 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GW2zw02b; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248573; 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=z7dUGMUCdPzyoXpN55evy5eiv8axvEjBjfUl9Q9dpbg=; b=cFMFcQrZfpXYmcvTT8YZiSFLEmzNW1nbBOVy5Y0mlvYeydHqSkd0y/joEgwL229Gb8eSSh 7gJOchLQINeQ2q1z/xES7o2Lhr0efe+qveCgm81ioQFFCU9ihFjL/LBWlER27QvXV8AlVi dXwxm4AqWrerOu67cNRTffwke7RAoGU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248573; a=rsa-sha256; cv=none; b=zZRjpjMMn1Nx+A10GPBpaFcJLWFwLVSKlUOW7xjUJxoj8M02TEE3osV5BlduLNXIKt5Ior nfY1AAvo8dhBFfi3c/wF8pNwSZAp83A6rjB5W7CRYZcLzc1To1ySHoLhUsL7MADQoWBCjx IlsYOqyWXJ/7eAjW/Peh3fhyB3npZpg= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GW2zw02b; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248573; 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=z7dUGMUCdPzyoXpN55evy5eiv8axvEjBjfUl9Q9dpbg=; b=GW2zw02b/vWqm1yMQUMeQAqnbXPLV0y7AdFlXGUhaG86ejFbv2LjJlddoYyjXFM7n7DG6Y 0+cV5vRqsPfItLj19k7l1msr0hm4J80QRDpfT0hpjxZbw7hic+m8AWcHOqsLsQaaQi7+3w DtdYeOyGryAYPQB4o+T08LlA51Z/C68= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-630-R2WmEFWxPlGwwyO8nYc--A-1; Wed, 20 Sep 2023 18:22:49 -0400 X-MC-Unique: R2WmEFWxPlGwwyO8nYc--A-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E9CE12932493; Wed, 20 Sep 2023 22:22:48 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4FC2840C6EC0; Wed, 20 Sep 2023 22:22:47 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 04/11] iov_iter: Derive user-backedness from the iterator type Date: Wed, 20 Sep 2023 23:22:24 +0100 Message-ID: <20230920222231.686275-5-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Rspamd-Queue-Id: BD8B34002D X-Rspam-User: X-Stat-Signature: 7ke3yzxk669m71gp1ax1jbkeu1n5ujog X-Rspamd-Server: rspam03 X-HE-Tag: 1695248573-526864 X-HE-Meta: U2FsdGVkX1/gUUsloeQ/vk414VQZ1ppOid9Agn3DEpXpcWrFsXSj1GXdD4KCIWAGhs7yL/Z69lIN2a/pi9uPlkHslLxb4V5x+TukEqX+aJysGTl7W6FQA0wyqYM73VMDdg3ENv9KRbI8fvW9meGVxJQ+xS1yYE50J9WIkwaqcYD5ZbFHZcDGwNHjA9pvflzGiDNH8K1VI2kbpUfAfQdWVm6pPTp8e9pgq34PU9mjBpKU7WWWZbgN2F/U1/1/gwrPouSpkYeF/T0gfE2rWULIDufhDAdk0Z/YnZ5BoSd0tHjVwp9p2aJAngbrZwzRaUsmBBlUUSjSXYxodsay2k6J6hqbZYIKYkRfHOsqk+DBCwMr63L4k6RpDbLiyA/aO5349Sw0eW87JUs7QqGVjdc9aB987fnGqa//HWpttqt35wEFUcLTMZHzKOoWYfaJvR8C5JaoToT5kdmEFtS9z77az54/wEBCyAoNPDwxQ7CIG0I4UOaxZHOAbc7f5qnj2Xfy14sKuJy5We+HZQiCZvABWU4pt01xsi2In1Fq0KplG/hW1GRubydFLrtrut0NPMtmuoUCtkojDTIerlJTToPnRnPPRAEd13GV90lCf3+xDdF3H2RW3R87mDkYoCJqAYa6J//jGB1sfKdlmvsbzC0h21ek+hLEYBkOahYUnQO0mOhSltcjcTZXBZnFx2bUKr6PQ/BPA1WiFd4gDO75kRzKNVO8lqmWRBCH3VMcL0RMHoZIMxy6JFEtqtfPTv4YXbn5XCfOR0CXwva+4/U9ddAHyWNNfIn9F2XKBWhL4wG6rDF8gMmfe4UUHQOK+jzR9U8NH6Zz0JieEMfnkcd0f6WvgWZDTfu2XbxfAndJV8ily0GCJHGmModBatG3xgbTeNiPf5N64uXHjqubSSvv8ZuKkVI+BmWfbhEcJcjM2tu/noWwcOq73zfKiwvBNbGrWbXk2Ee9vtL+rVt4GWjFkB2 Dzr4kzTZ v9dvlWZKl6PsySh9oq4AN8ApCAUuYZgmpr9dP/NBArkb9Uv5WoLVX819OwYmHprtdflwuLRg8JMkPwn2zo4fBlMFQgOOgo2YBNqAGLEQrBZb3UlkrpEevTJPrT5RbFQiFH/ieKQh1v1CK4RxwoThmtI5EjdgJjWjph6VapdI4h9+nVpuJWnxSV+qcd7Pr83kIX8kx6ky9vmye2586UCs7eW3dS1ZexmoFrW43En16FAkF/fLqlc8pAkN8RjykM6C6UNHcYN31pUuxXu09FM5n5lEV+uLN6s/r1DdXbSa7rHXxgthBVmI7tJhm598N9GV32MstLoIyoqDBDDDGB2nnqYyqZYT8H90qek+qhOTw0dJmvt/u9Wi+sNFcOZzKamVW+0206fBEYeirl1WEGxAEQGlup9LUaEGACiJmx6o6kmrJJErlU1o75Y1YNoLIiSbEeFTsEQ/paiDJG+r3g2mWKAUXeA5/lVHtzXkUCYmtkF8tgqzbGwnoOTMDdYZZIB5WmUchaoWmmg6sfpIBt7SDorN0OUcx41xnqMUUSa/ll/FPyAASXDBe1Rxk0ef0bgggdM3XRbqWx08tn0I= 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: Use the iterator type to determine whether an iterator is user-backed or not rather than using a special flag for it. Now that ITER_UBUF and ITER_IOVEC are 0 and 1, they can be checked with a single comparison. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org --- include/linux/uio.h | 4 +--- lib/iov_iter.c | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/include/linux/uio.h b/include/linux/uio.h index d1801c46e89e..e2a248dad80b 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -43,7 +43,6 @@ struct iov_iter { bool copy_mc; bool nofault; bool data_source; - bool user_backed; union { size_t iov_offset; int last_offset; @@ -143,7 +142,7 @@ static inline unsigned char iov_iter_rw(const struct iov_iter *i) static inline bool user_backed_iter(const struct iov_iter *i) { - return i->user_backed; + return iter_is_ubuf(i) || iter_is_iovec(i); } /* @@ -383,7 +382,6 @@ static inline void iov_iter_ubuf(struct iov_iter *i, unsigned int direction, *i = (struct iov_iter) { .iter_type = ITER_UBUF, .copy_mc = false, - .user_backed = true, .data_source = direction, .ubuf = buf, .count = count, diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 27234a820eeb..227c9f536b94 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -290,7 +290,6 @@ void iov_iter_init(struct iov_iter *i, unsigned int direction, .iter_type = ITER_IOVEC, .copy_mc = false, .nofault = false, - .user_backed = true, .data_source = direction, .__iov = iov, .nr_segs = nr_segs, From patchwork Wed Sep 20 22:22:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393499 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 33771CD13CF for ; Wed, 20 Sep 2023 22:23:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 91DD26B01A6; Wed, 20 Sep 2023 18:23:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8CF746B01A7; Wed, 20 Sep 2023 18:23:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F9EA6B01A8; Wed, 20 Sep 2023 18:23:00 -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 5988A6B01A6 for ; Wed, 20 Sep 2023 18:23:00 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 1556916050E for ; Wed, 20 Sep 2023 22:23:00 +0000 (UTC) X-FDA: 81258402120.18.1A0B38C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf11.hostedemail.com (Postfix) with ESMTP id 33A934000E for ; Wed, 20 Sep 2023 22:22:58 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gsfPyqAC; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.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=1695248578; 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=saXGiomC5bnv9RAKI0XpVlyY0MbcRBlM5OC3bKVXk+c=; b=SRrQ2mOsE2S7wLMniS3CTN754LXAjXflOLj9+y8BLGDml8Ef+cBmfi1ECNR7ZdFHZjbs+m 18PqGl2CO6hpI5VpbqbQ2YVqxONri0tbIoTVwG3G3jQdPmr4tntpPjCFEgEMLtYzXSrCrs PXqHmESADOoYh7bLUjqhQ9X3iuNpL1w= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=gsfPyqAC; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248578; a=rsa-sha256; cv=none; b=wThCcwWJiFvlkhfgxJ9BATDGbMKYV/QIh2UrEx8FaFuyA7ALXuJrMt592RgROrfNMQyMr3 kCtRPgoM6k/UQFak0OXKq+Rc/j3b+ihoWKdqcPEg2vK03oGoIEJ8130ihvPTrVvdh2ORdo MNioQHXLDLw3E41lWQRfJ5zr9eid7NI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248577; 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=saXGiomC5bnv9RAKI0XpVlyY0MbcRBlM5OC3bKVXk+c=; b=gsfPyqACxJCDBqhZPJ5hMN6HGMuiwdfkJEovInoQZPEu4ZlTfIGRSHJLv0q0gXotKFhES6 WSMda+4Wr0JsTV2/2DJ3OXeIWY7Yu2aTeD1IRqFrONSHW3rZSF8gA8i1ovY78si0/Z+EpW F0jgdidKQCs0udFLpQKbJmtWfV63QEU= 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-508-NsElvuKSM-y5PeFX_I_uDw-1; Wed, 20 Sep 2023 18:22:52 -0400 X-MC-Unique: NsElvuKSM-y5PeFX_I_uDw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6A8A585A5A8; Wed, 20 Sep 2023 22:22:51 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 902922156A27; Wed, 20 Sep 2023 22:22:49 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 05/11] iov_iter: Convert iterate*() to inline funcs Date: Wed, 20 Sep 2023 23:22:25 +0100 Message-ID: <20230920222231.686275-6-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Rspamd-Queue-Id: 33A934000E X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: uccki1xbcqi8otikrti3z9to58pgynx1 X-HE-Tag: 1695248578-78559 X-HE-Meta: U2FsdGVkX1+0A6n5Bx6aQQ76S18nHlEA/RgsVh9QJOqyBq9X37qdz/BBGMqK7y9U/KF0cQN0R4rhZoAKn8HziN2Ikl9+SQr2rmQAM1Xqs13eD3E+do1kvK1qz2yk4pCpCfmJIEs5Y1lOeqxhBRFxZL2qIhIDFjMdZWubKou4/zqauns4KawgQed78VQWFtCkMbzc9nnA3K+06ktp1DcENbk4b3B5sMBeHu3FkoYEYTiJyQ5sNqzQOECo89vODQBhU0wJcyZtUqgDhk5gOGcSakPjfCHpG8k7NyG8xPvIbH++Zn5VzFQA+r4tl8IUestNgG2txmGsfBiTTDCcdFCN0v50076EjcHn4f29pYBLXukt1IsOL1Z4Hq44x7fK4m+8fsxscgCbb78W9hE9WDjDWK2CSZHaOF/V9pPM3LXN9I063Y5iCnTN7MkVCSMB3JOC4yvi3TSXV41qNL3ykBHgKrOw5QQKFCNtX2ChOkTcolPBZ476dA+NRDS3EJ/+39DnJv2f2WniNQ6GZ74pk1UDyYRrkJiuPbaCfr4PKy6CBIsA8ydKRt42zNG6zdsw+WVWBOQqPqayzNYdSTjklwrrb6klCrbIKqHWxAvdGbkTNCU2vH0zOyDcxogqGfhf0dkMKlHJAM9N+jBfIfOzY4pUAYR3fagmRrBbJRYqocUmk4YLS6GxISNXUe545Luo6SqU4xN8YALexJc62jek0VddcmNykLUS+I4H/27wvXpTRWGma/UbxxGG2CPlzsrRkNBjF7WpMeUdR611VQmeqcGwp8aOhmsynNrehCa3QWguK+toddZwFOU25hR5tskuO2gD9yYFmyYGHkoOfasJm3JJ0zd3yVfNe8FjdjPD5OpouPgWlWVhFlp767UngBxt1C2k7bybBnRKEjafR2FP+lXpKkdAWTNkKhn9Mw69ZhQscZ29+pfxKN/qwnesLpWHBdp7nNnQWsn9cNvG5y3eTQy W+imAPzt e66KmJ/f4mA0FAGgDeKSHIbBXP91X9kSaK6tT1Qh4jliRt1R6gx+LgOcksVVASPWHM7yfVbt4UeC8OTWD949xLMUi4uViyU3J39yUnU2QOhrIhu1e84S6seYacDaxjgAb4LuG2jmx8MfdnDsGvdfI7hsrRBUX2NZDVppdldKLdgudYASkAJvNDY8cLv0k1LlNrJnijohwzJz75ZzhLT21RekNRDaNhN3FuAgIt8ZWZy1JPJ3YujibtYvnK4RM16D2EXzDKLwwytb2roWTRWTVDs88L1GnAPZKK9QkxTFrHKpDKv8F0DCOf3MbURvsd5Y/QTE9mjdgf6xUlxDTvY2zLUaDhTG/+j9HtLHDV+mF5ZjjdwC4agOQ9LwH20dlRDF0E4Cf4pdpQcdtw/8bNFStVVO0nOhWjCVM5sNvXeyFHTwAJ+oL7+YHgEeafLd/Fqt2uSzCA47wnJfXsKSfEaF4FxrMDf8YgAGcwMR70eprGIp3nutvjBhcszhd2yFLdGbjdZLTIxdXHdXEVbF+hesrA1Bg41uaGjAzjr+aagRIG6L6ZkgRCDk2+/eWqY8hNClqxZdPNHamjJSug5CWaf6k3HdW9MkeCSWgFcTcEt0VpU4lfPJ15pI1OZ3IIcov9FUd29GrFbmyX9KWkHdxY9S4LJSI3g8/Yiwt4eAp 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: Convert the iov_iter iteration macros to inline functions to make the code easier to follow. The functions are marked __always_inline as we don't want to end up with indirect calls in the code. This, however, leaves dealing with ->copy_mc in an awkard situation since the step function (memcpy_from_iter_mc()) needs to test the flag in the iterator, but isn't passed the iterator. This will be dealt with in a follow-up patch. The variable names in the per-type iterator functions have been harmonised as much as possible and made clearer as to the variable purpose. The iterator functions are also moved to a header file so that other operations that need to scan over an iterator can be added. For instance, the rbd driver could use this to scan a buffer to see if it is all zeros and libceph could use this to generate a crc. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org Link: https://lore.kernel.org/r/3710261.1691764329@warthog.procyon.org.uk/ # v1 Link: https://lore.kernel.org/r/855.1692047347@warthog.procyon.org.uk/ # v2 Link: https://lore.kernel.org/r/20230816120741.534415-1-dhowells@redhat.com/ # v3 --- Notes: Changes ======= ver #5) - Merge in patch to move iteration framework to a header file. - Move "iter->count - progress" into individual iteration subfunctions. include/linux/iov_iter.h | 274 ++++++++++++++++++++++++++ lib/iov_iter.c | 416 ++++++++++++++++----------------------- 2 files changed, 449 insertions(+), 241 deletions(-) create mode 100644 include/linux/iov_iter.h diff --git a/include/linux/iov_iter.h b/include/linux/iov_iter.h new file mode 100644 index 000000000000..270454a6703d --- /dev/null +++ b/include/linux/iov_iter.h @@ -0,0 +1,274 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* I/O iterator iteration building functions. + * + * Copyright (C) 2023 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + */ + +#ifndef _LINUX_IOV_ITER_H +#define _LINUX_IOV_ITER_H + +#include +#include + +typedef size_t (*iov_step_f)(void *iter_base, size_t progress, size_t len, + void *priv, void *priv2); +typedef size_t (*iov_ustep_f)(void __user *iter_base, size_t progress, size_t len, + void *priv, void *priv2); + +/* + * Handle ITER_UBUF. + */ +static __always_inline +size_t iterate_ubuf(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_ustep_f step) +{ + void __user *base = iter->ubuf; + size_t progress = 0, remain; + + remain = step(base + iter->iov_offset, 0, len, priv, priv2); + progress = len - remain; + iter->iov_offset += progress; + iter->count -= progress; + return progress; +} + +/* + * Handle ITER_IOVEC. + */ +static __always_inline +size_t iterate_iovec(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_ustep_f step) +{ + const struct iovec *p = iter->__iov; + size_t progress = 0, skip = iter->iov_offset; + + do { + size_t remain, consumed; + size_t part = min(len, p->iov_len - skip); + + if (likely(part)) { + remain = step(p->iov_base + skip, progress, part, priv, priv2); + consumed = part - remain; + progress += consumed; + skip += consumed; + len -= consumed; + if (skip < p->iov_len) + break; + } + p++; + skip = 0; + } while (len); + + iter->nr_segs -= p - iter->__iov; + iter->__iov = p; + iter->iov_offset = skip; + iter->count -= progress; + return progress; +} + +/* + * Handle ITER_KVEC. + */ +static __always_inline +size_t iterate_kvec(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_step_f step) +{ + const struct kvec *p = iter->kvec; + size_t progress = 0, skip = iter->iov_offset; + + do { + size_t remain, consumed; + size_t part = min(len, p->iov_len - skip); + + if (likely(part)) { + remain = step(p->iov_base + skip, progress, part, priv, priv2); + consumed = part - remain; + progress += consumed; + skip += consumed; + len -= consumed; + if (skip < p->iov_len) + break; + } + p++; + skip = 0; + } while (len); + + iter->nr_segs -= p - iter->kvec; + iter->kvec = p; + iter->iov_offset = skip; + iter->count -= progress; + return progress; +} + +/* + * Handle ITER_BVEC. + */ +static __always_inline +size_t iterate_bvec(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_step_f step) +{ + const struct bio_vec *p = iter->bvec; + size_t progress = 0, skip = iter->iov_offset; + + do { + size_t remain, consumed; + size_t offset = p->bv_offset + skip, part; + void *kaddr = kmap_local_page(p->bv_page + offset / PAGE_SIZE); + + part = min3(len, + (size_t)(p->bv_len - skip), + (size_t)(PAGE_SIZE - offset % PAGE_SIZE)); + remain = step(kaddr + offset % PAGE_SIZE, progress, part, priv, priv2); + kunmap_local(kaddr); + consumed = part - remain; + len -= consumed; + progress += consumed; + skip += consumed; + if (skip >= p->bv_len) { + skip = 0; + p++; + } + if (remain) + break; + } while (len); + + iter->nr_segs -= p - iter->bvec; + iter->bvec = p; + iter->iov_offset = skip; + iter->count -= progress; + return progress; +} + +/* + * Handle ITER_XARRAY. + */ +static __always_inline +size_t iterate_xarray(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_step_f step) +{ + struct folio *folio; + size_t progress = 0; + loff_t start = iter->xarray_start + iter->iov_offset; + pgoff_t index = start / PAGE_SIZE; + XA_STATE(xas, iter->xarray, index); + + rcu_read_lock(); + xas_for_each(&xas, folio, ULONG_MAX) { + size_t remain, consumed, offset, part, flen; + + if (xas_retry(&xas, folio)) + continue; + if (WARN_ON(xa_is_value(folio))) + break; + if (WARN_ON(folio_test_hugetlb(folio))) + break; + + offset = offset_in_folio(folio, start + progress); + flen = min(folio_size(folio) - offset, len); + + while (flen) { + void *base = kmap_local_folio(folio, offset); + + part = min_t(size_t, flen, + PAGE_SIZE - offset_in_page(offset)); + remain = step(base, progress, part, priv, priv2); + kunmap_local(base); + + consumed = part - remain; + progress += consumed; + len -= consumed; + + if (remain || len == 0) + goto out; + flen -= consumed; + offset += consumed; + } + } + +out: + rcu_read_unlock(); + iter->iov_offset += progress; + iter->count -= progress; + return progress; +} + +/* + * Handle ITER_DISCARD. + */ +static __always_inline +size_t iterate_discard(struct iov_iter *iter, size_t len, void *priv, void *priv2, + iov_step_f step) +{ + size_t progress = len; + + iter->count -= progress; + return progress; +} + +/** + * iterate_and_advance2 - Iterate over an iterator + * @iter: The iterator to iterate over. + * @len: The amount to iterate over. + * @priv: Data for the step functions. + * @priv2: More data for the step functions. + * @ustep: Function for UBUF/IOVEC iterators; given __user addresses. + * @step: Function for other iterators; given kernel addresses. + * + * Iterate over the next part of an iterator, up to the specified length. The + * buffer is presented in segments, which for kernel iteration are broken up by + * physical pages and mapped, with the mapped address being presented. + * + * Two step functions, @step and @ustep, must be provided, one for handling + * mapped kernel addresses and the other is given user addresses which have the + * potential to fault since no pinning is performed. + * + * The step functions are passed the address and length of the segment, @priv, + * @priv2 and the amount of data so far iterated over (which can, for example, + * be added to @priv to point to the right part of a second buffer). The step + * functions should return the amount of the segment they didn't process (ie. 0 + * indicates complete processsing). + * + * This function returns the amount of data processed (ie. 0 means nothing was + * processed and the value of @len means processes to completion). + */ +static __always_inline +size_t iterate_and_advance2(struct iov_iter *iter, size_t len, void *priv, + void *priv2, iov_ustep_f ustep, iov_step_f step) +{ + if (unlikely(iter->count < len)) + len = iter->count; + if (unlikely(!len)) + return 0; + + if (likely(iter_is_ubuf(iter))) + return iterate_ubuf(iter, len, priv, priv2, ustep); + if (likely(iter_is_iovec(iter))) + return iterate_iovec(iter, len, priv, priv2, ustep); + if (iov_iter_is_bvec(iter)) + return iterate_bvec(iter, len, priv, priv2, step); + if (iov_iter_is_kvec(iter)) + return iterate_kvec(iter, len, priv, priv2, step); + if (iov_iter_is_xarray(iter)) + return iterate_xarray(iter, len, priv, priv2, step); + return iterate_discard(iter, len, priv, priv2, step); +} + +/** + * iterate_and_advance - Iterate over an iterator + * @iter: The iterator to iterate over. + * @len: The amount to iterate over. + * @priv: Data for the step functions. + * @ustep: Function for UBUF/IOVEC iterators; given __user addresses. + * @step: Function for other iterators; given kernel addresses. + * + * As iterate_and_advance2(), but priv2 is always NULL. + */ +static __always_inline +size_t iterate_and_advance(struct iov_iter *iter, size_t len, void *priv, + iov_ustep_f ustep, iov_step_f step) +{ + return iterate_and_advance2(iter, len, priv, NULL, ustep, step); +} + +#endif /* _LINUX_IOV_ITER_H */ diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 227c9f536b94..65374ee91ecd 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -13,189 +13,69 @@ #include #include #include +#include -/* covers ubuf and kbuf alike */ -#define iterate_buf(i, n, base, len, off, __p, STEP) { \ - size_t __maybe_unused off = 0; \ - len = n; \ - base = __p + i->iov_offset; \ - len -= (STEP); \ - i->iov_offset += len; \ - n = len; \ -} - -/* covers iovec and kvec alike */ -#define iterate_iovec(i, n, base, len, off, __p, STEP) { \ - size_t off = 0; \ - size_t skip = i->iov_offset; \ - do { \ - len = min(n, __p->iov_len - skip); \ - if (likely(len)) { \ - base = __p->iov_base + skip; \ - len -= (STEP); \ - off += len; \ - skip += len; \ - n -= len; \ - if (skip < __p->iov_len) \ - break; \ - } \ - __p++; \ - skip = 0; \ - } while (n); \ - i->iov_offset = skip; \ - n = off; \ -} - -#define iterate_bvec(i, n, base, len, off, p, STEP) { \ - size_t off = 0; \ - unsigned skip = i->iov_offset; \ - while (n) { \ - unsigned offset = p->bv_offset + skip; \ - unsigned left; \ - void *kaddr = kmap_local_page(p->bv_page + \ - offset / PAGE_SIZE); \ - base = kaddr + offset % PAGE_SIZE; \ - len = min(min(n, (size_t)(p->bv_len - skip)), \ - (size_t)(PAGE_SIZE - offset % PAGE_SIZE)); \ - left = (STEP); \ - kunmap_local(kaddr); \ - len -= left; \ - off += len; \ - skip += len; \ - if (skip == p->bv_len) { \ - skip = 0; \ - p++; \ - } \ - n -= len; \ - if (left) \ - break; \ - } \ - i->iov_offset = skip; \ - n = off; \ -} - -#define iterate_xarray(i, n, base, len, __off, STEP) { \ - __label__ __out; \ - size_t __off = 0; \ - struct folio *folio; \ - loff_t start = i->xarray_start + i->iov_offset; \ - pgoff_t index = start / PAGE_SIZE; \ - XA_STATE(xas, i->xarray, index); \ - \ - len = PAGE_SIZE - offset_in_page(start); \ - rcu_read_lock(); \ - xas_for_each(&xas, folio, ULONG_MAX) { \ - unsigned left; \ - size_t offset; \ - if (xas_retry(&xas, folio)) \ - continue; \ - if (WARN_ON(xa_is_value(folio))) \ - break; \ - if (WARN_ON(folio_test_hugetlb(folio))) \ - break; \ - offset = offset_in_folio(folio, start + __off); \ - while (offset < folio_size(folio)) { \ - base = kmap_local_folio(folio, offset); \ - len = min(n, len); \ - left = (STEP); \ - kunmap_local(base); \ - len -= left; \ - __off += len; \ - n -= len; \ - if (left || n == 0) \ - goto __out; \ - offset += len; \ - len = PAGE_SIZE; \ - } \ - } \ -__out: \ - rcu_read_unlock(); \ - i->iov_offset += __off; \ - n = __off; \ -} - -#define __iterate_and_advance(i, n, base, len, off, I, K) { \ - if (unlikely(i->count < n)) \ - n = i->count; \ - if (likely(n)) { \ - if (likely(iter_is_ubuf(i))) { \ - void __user *base; \ - size_t len; \ - iterate_buf(i, n, base, len, off, \ - i->ubuf, (I)) \ - } else if (likely(iter_is_iovec(i))) { \ - const struct iovec *iov = iter_iov(i); \ - void __user *base; \ - size_t len; \ - iterate_iovec(i, n, base, len, off, \ - iov, (I)) \ - i->nr_segs -= iov - iter_iov(i); \ - i->__iov = iov; \ - } else if (iov_iter_is_bvec(i)) { \ - const struct bio_vec *bvec = i->bvec; \ - void *base; \ - size_t len; \ - iterate_bvec(i, n, base, len, off, \ - bvec, (K)) \ - i->nr_segs -= bvec - i->bvec; \ - i->bvec = bvec; \ - } else if (iov_iter_is_kvec(i)) { \ - const struct kvec *kvec = i->kvec; \ - void *base; \ - size_t len; \ - iterate_iovec(i, n, base, len, off, \ - kvec, (K)) \ - i->nr_segs -= kvec - i->kvec; \ - i->kvec = kvec; \ - } else if (iov_iter_is_xarray(i)) { \ - void *base; \ - size_t len; \ - iterate_xarray(i, n, base, len, off, \ - (K)) \ - } \ - i->count -= n; \ - } \ -} -#define iterate_and_advance(i, n, base, len, off, I, K) \ - __iterate_and_advance(i, n, base, len, off, I, ((void)(K),0)) - -static int copyout(void __user *to, const void *from, size_t n) +static __always_inline +size_t copy_to_user_iter(void __user *iter_to, size_t progress, + size_t len, void *from, void *priv2) { if (should_fail_usercopy()) - return n; - if (access_ok(to, n)) { - instrument_copy_to_user(to, from, n); - n = raw_copy_to_user(to, from, n); + return len; + if (access_ok(iter_to, len)) { + from += progress; + instrument_copy_to_user(iter_to, from, len); + len = raw_copy_to_user(iter_to, from, len); } - return n; + return len; } -static int copyout_nofault(void __user *to, const void *from, size_t n) +static __always_inline +size_t copy_to_user_iter_nofault(void __user *iter_to, size_t progress, + size_t len, void *from, void *priv2) { - long res; + ssize_t res; if (should_fail_usercopy()) - return n; - - res = copy_to_user_nofault(to, from, n); + return len; - return res < 0 ? n : res; + from += progress; + res = copy_to_user_nofault(iter_to, from, len); + return res < 0 ? len : res; } -static int copyin(void *to, const void __user *from, size_t n) +static __always_inline +size_t copy_from_user_iter(void __user *iter_from, size_t progress, + size_t len, void *to, void *priv2) { - size_t res = n; + size_t res = len; if (should_fail_usercopy()) - return n; - if (access_ok(from, n)) { - instrument_copy_from_user_before(to, from, n); - res = raw_copy_from_user(to, from, n); - instrument_copy_from_user_after(to, from, n, res); + return len; + if (access_ok(iter_from, len)) { + to += progress; + instrument_copy_from_user_before(to, iter_from, len); + res = raw_copy_from_user(to, iter_from, len); + instrument_copy_from_user_after(to, iter_from, len, res); } return res; } +static __always_inline +size_t memcpy_to_iter(void *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + memcpy(iter_to, from + progress, len); + return 0; +} + +static __always_inline +size_t memcpy_from_iter(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + memcpy(to + progress, iter_from, len); + return 0; +} + /* * fault_in_iov_iter_readable - fault in iov iterator for reading * @i: iterator @@ -312,23 +192,29 @@ size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i) return 0; if (user_backed_iter(i)) might_fault(); - iterate_and_advance(i, bytes, base, len, off, - copyout(base, addr + off, len), - memcpy(base, addr + off, len) - ) - - return bytes; + return iterate_and_advance(i, bytes, (void *)addr, + copy_to_user_iter, memcpy_to_iter); } EXPORT_SYMBOL(_copy_to_iter); #ifdef CONFIG_ARCH_HAS_COPY_MC -static int copyout_mc(void __user *to, const void *from, size_t n) -{ - if (access_ok(to, n)) { - instrument_copy_to_user(to, from, n); - n = copy_mc_to_user((__force void *) to, from, n); +static __always_inline +size_t copy_to_user_iter_mc(void __user *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + if (access_ok(iter_to, len)) { + from += progress; + instrument_copy_to_user(iter_to, from, len); + len = copy_mc_to_user(iter_to, from, len); } - return n; + return len; +} + +static __always_inline +size_t memcpy_to_iter_mc(void *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + return copy_mc_to_kernel(iter_to, from + progress, len); } /** @@ -361,22 +247,20 @@ size_t _copy_mc_to_iter(const void *addr, size_t bytes, struct iov_iter *i) return 0; if (user_backed_iter(i)) might_fault(); - __iterate_and_advance(i, bytes, base, len, off, - copyout_mc(base, addr + off, len), - copy_mc_to_kernel(base, addr + off, len) - ) - - return bytes; + return iterate_and_advance(i, bytes, (void *)addr, + copy_to_user_iter_mc, memcpy_to_iter_mc); } EXPORT_SYMBOL_GPL(_copy_mc_to_iter); #endif /* CONFIG_ARCH_HAS_COPY_MC */ -static void *memcpy_from_iter(struct iov_iter *i, void *to, const void *from, - size_t size) +static size_t memcpy_from_iter_mc(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) { - if (iov_iter_is_copy_mc(i)) - return (void *)copy_mc_to_kernel(to, from, size); - return memcpy(to, from, size); + struct iov_iter *iter = priv2; + + if (iov_iter_is_copy_mc(iter)) + return copy_mc_to_kernel(to + progress, iter_from, len); + return memcpy_from_iter(iter_from, progress, len, to, priv2); } size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) @@ -386,30 +270,46 @@ size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) if (user_backed_iter(i)) might_fault(); - iterate_and_advance(i, bytes, base, len, off, - copyin(addr + off, base, len), - memcpy_from_iter(i, addr + off, base, len) - ) - - return bytes; + return iterate_and_advance2(i, bytes, addr, i, + copy_from_user_iter, + memcpy_from_iter_mc); } EXPORT_SYMBOL(_copy_from_iter); +static __always_inline +size_t copy_from_user_iter_nocache(void __user *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + return __copy_from_user_inatomic_nocache(to + progress, iter_from, len); +} + size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i) { if (WARN_ON_ONCE(!i->data_source)) return 0; - iterate_and_advance(i, bytes, base, len, off, - __copy_from_user_inatomic_nocache(addr + off, base, len), - memcpy(addr + off, base, len) - ) - - return bytes; + return iterate_and_advance(i, bytes, addr, + copy_from_user_iter_nocache, + memcpy_from_iter); } EXPORT_SYMBOL(_copy_from_iter_nocache); #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE +static __always_inline +size_t copy_from_user_iter_flushcache(void __user *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + return __copy_from_user_flushcache(to + progress, iter_from, len); +} + +static __always_inline +size_t memcpy_from_iter_flushcache(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + memcpy_flushcache(to + progress, iter_from, len); + return 0; +} + /** * _copy_from_iter_flushcache - write destination through cpu cache * @addr: destination kernel address @@ -431,12 +331,9 @@ size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i) if (WARN_ON_ONCE(!i->data_source)) return 0; - iterate_and_advance(i, bytes, base, len, off, - __copy_from_user_flushcache(addr + off, base, len), - memcpy_flushcache(addr + off, base, len) - ) - - return bytes; + return iterate_and_advance(i, bytes, addr, + copy_from_user_iter_flushcache, + memcpy_from_iter_flushcache); } EXPORT_SYMBOL_GPL(_copy_from_iter_flushcache); #endif @@ -508,10 +405,9 @@ size_t copy_page_to_iter_nofault(struct page *page, unsigned offset, size_t byte void *kaddr = kmap_local_page(page); size_t n = min(bytes, (size_t)PAGE_SIZE - offset); - iterate_and_advance(i, n, base, len, off, - copyout_nofault(base, kaddr + offset + off, len), - memcpy(base, kaddr + offset + off, len) - ) + n = iterate_and_advance(i, bytes, kaddr, + copy_to_user_iter_nofault, + memcpy_to_iter); kunmap_local(kaddr); res += n; bytes -= n; @@ -554,14 +450,25 @@ size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes, } EXPORT_SYMBOL(copy_page_from_iter); -size_t iov_iter_zero(size_t bytes, struct iov_iter *i) +static __always_inline +size_t zero_to_user_iter(void __user *iter_to, size_t progress, + size_t len, void *priv, void *priv2) { - iterate_and_advance(i, bytes, base, len, count, - clear_user(base, len), - memset(base, 0, len) - ) + return clear_user(iter_to, len); +} - return bytes; +static __always_inline +size_t zero_to_iter(void *iter_to, size_t progress, + size_t len, void *priv, void *priv2) +{ + memset(iter_to, 0, len); + return 0; +} + +size_t iov_iter_zero(size_t bytes, struct iov_iter *i) +{ + return iterate_and_advance(i, bytes, NULL, + zero_to_user_iter, zero_to_iter); } EXPORT_SYMBOL(iov_iter_zero); @@ -586,10 +493,9 @@ size_t copy_page_from_iter_atomic(struct page *page, size_t offset, } p = kmap_atomic(page) + offset; - iterate_and_advance(i, n, base, len, off, - copyin(p + off, base, len), - memcpy_from_iter(i, p + off, base, len) - ) + n = iterate_and_advance2(i, n, p, i, + copy_from_user_iter, + memcpy_from_iter_mc); kunmap_atomic(p); copied += n; offset += n; @@ -1180,32 +1086,64 @@ ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, } EXPORT_SYMBOL(iov_iter_get_pages_alloc2); +static __always_inline +size_t copy_from_user_iter_csum(void __user *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + __wsum next, *csum = priv2; + + next = csum_and_copy_from_user(iter_from, to + progress, len); + *csum = csum_block_add(*csum, next, progress); + return next ? 0 : len; +} + +static __always_inline +size_t memcpy_from_iter_csum(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + __wsum *csum = priv2; + + *csum = csum_and_memcpy(to + progress, iter_from, len, *csum, progress); + return 0; +} + size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i) { - __wsum sum, next; - sum = *csum; if (WARN_ON_ONCE(!i->data_source)) return 0; - - iterate_and_advance(i, bytes, base, len, off, ({ - next = csum_and_copy_from_user(base, addr + off, len); - sum = csum_block_add(sum, next, off); - next ? 0 : len; - }), ({ - sum = csum_and_memcpy(addr + off, base, len, sum, off); - }) - ) - *csum = sum; - return bytes; + return iterate_and_advance2(i, bytes, addr, csum, + copy_from_user_iter_csum, + memcpy_from_iter_csum); } EXPORT_SYMBOL(csum_and_copy_from_iter); +static __always_inline +size_t copy_to_user_iter_csum(void __user *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + __wsum next, *csum = priv2; + + next = csum_and_copy_to_user(from + progress, iter_to, len); + *csum = csum_block_add(*csum, next, progress); + return next ? 0 : len; +} + +static __always_inline +size_t memcpy_to_iter_csum(void *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + __wsum *csum = priv2; + + *csum = csum_and_memcpy(iter_to, from + progress, len, *csum, progress); + return 0; +} + size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, struct iov_iter *i) { struct csum_state *csstate = _csstate; - __wsum sum, next; + __wsum sum; if (WARN_ON_ONCE(i->data_source)) return 0; @@ -1219,14 +1157,10 @@ size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, } sum = csum_shift(csstate->csum, csstate->off); - iterate_and_advance(i, bytes, base, len, off, ({ - next = csum_and_copy_to_user(addr + off, base, len); - sum = csum_block_add(sum, next, off); - next ? 0 : len; - }), ({ - sum = csum_and_memcpy(base, addr + off, len, sum, off); - }) - ) + + bytes = iterate_and_advance2(i, bytes, (void *)addr, &sum, + copy_to_user_iter_csum, + memcpy_to_iter_csum); csstate->csum = csum_shift(sum, csstate->off); csstate->off += bytes; return bytes; From patchwork Wed Sep 20 22:22:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393500 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 8B064C2FC0C for ; Wed, 20 Sep 2023 22:23:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 687C16B01A8; Wed, 20 Sep 2023 18:23:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 599D36B01A9; Wed, 20 Sep 2023 18:23:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4144B6B01AA; Wed, 20 Sep 2023 18:23:01 -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 2C4FB6B01A8 for ; Wed, 20 Sep 2023 18:23:01 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 0313A409F9 for ; Wed, 20 Sep 2023 22:23:00 +0000 (UTC) X-FDA: 81258402162.11.DE1B54A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf12.hostedemail.com (Postfix) with ESMTP id 42E0140019 for ; Wed, 20 Sep 2023 22:22:59 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SH2msZFE; spf=pass (imf12.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248579; 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=gfSLwCbdFMwywMZPFTO5hx480mND9O9O9B3C6PwfVhs=; b=R4DF82bYUhQFBBEeryuHlAJq8K73PSzjNZSUhkJ1iT5bQwwMeIH6ZSbbSNEiuoUKZEAOej BisHk5n5zZiLDiBI8pl0ui26UYCCegdz0iZQ6L2minaCUBob69u3ImVEE3JHEkG6yJ0SHZ 3qtlHtpctLt5jooMNM+etHmQBKOe9KU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248579; a=rsa-sha256; cv=none; b=bIpss+FVmJ0h2IaedNVQ83yObNK9anae/d4D+0XUklfDk0FIRTJnUg0lM21RbeSRdgK0zm SwZdPp8S1Os3Z98hVSP0e7Ra0mbFkxtBuWUnAqhJGFDF9Qflyle8s0V5wKWL0CZ4YXGlMG buSwr9TtjZKtTBxtIvl6IVGOWHAJg6c= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=SH2msZFE; spf=pass (imf12.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248578; 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=gfSLwCbdFMwywMZPFTO5hx480mND9O9O9B3C6PwfVhs=; b=SH2msZFEs6LI4FL0lBH1GhZaxxelDVnslOCrIGoeDLv5EYBTVDcDHxONJ8z+diK+JCUXJr Kf0JB/LeYy40+PgBX9lBrmEKmQXu2SPT47ewPSnXQMGf3ou+7CfDWHNTc3I1vFgjR/jmro taOs8y193oA7UovVu7vH2ep2UZrDxbM= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-74-jGqCcrvuM6694XgMINqOzQ-1; Wed, 20 Sep 2023 18:22:54 -0400 X-MC-Unique: jGqCcrvuM6694XgMINqOzQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A146428EC111; Wed, 20 Sep 2023 22:22:53 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 07578492C37; Wed, 20 Sep 2023 22:22:51 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 06/11] iov_iter: Don't deal with iter->copy_mc in memcpy_from_iter_mc() Date: Wed, 20 Sep 2023 23:22:26 +0100 Message-ID: <20230920222231.686275-7-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Rspamd-Queue-Id: 42E0140019 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: zp856fseo4kzd9h6nnonbkumak84wh6p X-HE-Tag: 1695248579-975210 X-HE-Meta: U2FsdGVkX1+09zyeSGpjVLTkCw1en+yDhAYomS5y65ux5/ZU+x7WLEesLP0bIMr0NQRdf7aeL1HN1+gOqSt/ZKrJRWb563e3sLwCnbhV//L5N5wE3MmLunRj9W+l+kiGxi1tbky2qV3ajD29mqa30JjFPsojGDLFuVdfPUrQikAH6iOI+rt+lFrLx81d7I0csX8TjDoekirqQgxP0Sq3GMKuv/j8RXdXhvASwFvmS1IwgxIdJREj2HzPocajINOQMKav+X74Pb38Bc+wQDyVKHtmfmyjP0PqBfKuWuWiNhYOtTrC/xi5sgb96cHiw75gH6IXmyBeCnUjHLnLs2uUkQ1YPfD7eYwfnR/MsWYyQv/+vh75IH5mWPxMcAFIYQMKB2AwUktewiXJRETn2YkSLHohVqzvYL40jvi6NOIcA/G42gkbWYAWKmQAfmMX0OzAtmQorHHWrGwnAim+qrleN3LmuoFR4G16NtVFvJN05lI+t2qV9BwEVbW6T60jc/XVRmw0A1VBGgwRZBVA9JIeuDT+p+uYwXmZvJsZ1WUSih7AE6lT0TsSvG4TBpBuSI4XiSBIqq3N5FGpKevL7fQ1j+kzUxIZMETQ2EVXDRdJiFwry3XuMuyT4GXSAfFdZplFv4A0PCP0kMiIeP0vjdlTB6Gj9L293KPWfbnlUGs0Tnzz7d2UFyK7VYfBEuVLbhG2dQIQP4SaNtLS4u4ASE5K4VKh2xvUoBrT9tOdykywGP6C5vWBxXuCyDx+Z1aemisP/GscGI0MThITDXCyxwV39ehO4+k7brEBUmv4oBElfpD+slOYwwuKqChEc6i4T57zzeya6F+BdwN7/+TPFltWlXZtlHjUqt6P/OEzp9InC0Sm+MSbOhs6/ZVCewUb29xcfjwZ/rljDVyEKmJGvjxhJfDO/aPQYVDu+ZJAN5EFLyMKdT9nE15/PXBVQn1NfJ0PcbRWMd0k5It40V++yEF 5PUnfIfs cqlvMBYLVIhpjhQOAUVKGlR2KOem1kqNgtNdGRaUoLI13HvF9ZsqZLweCkollz1x+xU3fzBR6v5trbQ9loKPcKqHF7NSwD3t53RAMaJ+lHQnOwjNgL5hhobkrWfn3ILR5Bp24/DOiY+fRHSRxT5uN6rpjiOw65noZknSiAiVzv4M0ZxWn8Yq+FqXPv+m/Nt3gHiHp 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: iter->copy_mc is only used with a bvec iterator and only by dump_emit_page() in fs/coredump.c so rather than handle this in memcpy_from_iter_mc() where it is checked repeatedly by _copy_from_iter() and copy_page_from_iter_atomic(), --- lib/iov_iter.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 65374ee91ecd..943aa3cfd7b3 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -253,14 +253,33 @@ size_t _copy_mc_to_iter(const void *addr, size_t bytes, struct iov_iter *i) EXPORT_SYMBOL_GPL(_copy_mc_to_iter); #endif /* CONFIG_ARCH_HAS_COPY_MC */ -static size_t memcpy_from_iter_mc(void *iter_from, size_t progress, - size_t len, void *to, void *priv2) +static __always_inline +size_t memcpy_from_iter_mc(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + return copy_mc_to_kernel(to + progress, iter_from, len); +} + +static size_t __copy_from_iter_mc(void *addr, size_t bytes, struct iov_iter *i) { - struct iov_iter *iter = priv2; + size_t progress; - if (iov_iter_is_copy_mc(iter)) - return copy_mc_to_kernel(to + progress, iter_from, len); - return memcpy_from_iter(iter_from, progress, len, to, priv2); + if (unlikely(i->count < bytes)) + bytes = i->count; + if (unlikely(!bytes)) + return 0; + progress = iterate_bvec(i, bytes, addr, NULL, memcpy_from_iter_mc); + i->count -= progress; + return progress; +} + +static __always_inline +size_t __copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) +{ + if (unlikely(iov_iter_is_copy_mc(i))) + return __copy_from_iter_mc(addr, bytes, i); + return iterate_and_advance(i, bytes, addr, + copy_from_user_iter, memcpy_from_iter); } size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) @@ -270,9 +289,7 @@ size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) if (user_backed_iter(i)) might_fault(); - return iterate_and_advance2(i, bytes, addr, i, - copy_from_user_iter, - memcpy_from_iter_mc); + return __copy_from_iter(addr, bytes, i); } EXPORT_SYMBOL(_copy_from_iter); @@ -493,9 +510,7 @@ size_t copy_page_from_iter_atomic(struct page *page, size_t offset, } p = kmap_atomic(page) + offset; - n = iterate_and_advance2(i, n, p, i, - copy_from_user_iter, - memcpy_from_iter_mc); + __copy_from_iter(p, n, i); kunmap_atomic(p); copied += n; offset += n; From patchwork Wed Sep 20 22:22:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393501 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 84A1FC2FC0C for ; Wed, 20 Sep 2023 22:23:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1D65C6B01AA; Wed, 20 Sep 2023 18:23:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 17BE46B01AB; Wed, 20 Sep 2023 18:23:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F0E746B01AE; Wed, 20 Sep 2023 18:23:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id DACFF6B01AA for ; Wed, 20 Sep 2023 18:23:05 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B6005807DB for ; Wed, 20 Sep 2023 22:23:05 +0000 (UTC) X-FDA: 81258402330.15.7094402 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf26.hostedemail.com (Postfix) with ESMTP id 00597140017 for ; Wed, 20 Sep 2023 22:23:03 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=VByCaamG; spf=pass (imf26.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248584; 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=QdaDFgQ/IdiUz+wPFCKvBKKks+ni1Kcs8Sp2gYxHcOI=; b=gICFspeO6mns9RaTZzY+VNi0unsGRYb0hcA+R0YHjStCPJI5uHShKuHCtFZVMlSywwD4MD oEz3iMmflS74bSrWe2wb7bPfe42SvqbF8iEYKom6PCRXiMfamuvPHF3gkewf81A4nPB3Pr seWu5MllaOi74ZWrxwHvZ8+lg9UKGDM= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248584; a=rsa-sha256; cv=none; b=EKoP/kjK0RpezuPHNdaZxoGpNsb9FxsRaGduSfDCTZ5f3PzOQwMV3FJTGLRGjZpa5WoNTk MI+eEwUqZYpy4qe4LBMJ9k3zHsj264dmmPGpHhBIbMZ9nDffh5Vwt2StfvV5Z5PbL8oD7+ VgcqAnh0WP9bCeGMH/znwNb9y1aCDZ8= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=VByCaamG; spf=pass (imf26.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248583; 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=QdaDFgQ/IdiUz+wPFCKvBKKks+ni1Kcs8Sp2gYxHcOI=; b=VByCaamGkRzP7TVTaBOe18GreNttnd8igZQyaSadjsRKS8Vu0MryCL5tJddrRYeVO7M06h 17BxnWOhgSCGhI+03IgWmbc4k1GlAxE2Z3coFTtiAFBgSOd/JjfxYQJv3GhWmLdwjpdYFs jKuhyldQLAYnalypcvuY3M6QA36UWeE= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-169-pcHmzeEEOaC540eqzQ0x5A-1; Wed, 20 Sep 2023 18:22:56 -0400 X-MC-Unique: pcHmzeEEOaC540eqzQ0x5A-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EEE4328EC113; Wed, 20 Sep 2023 22:22:55 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 55F5F2156A27; Wed, 20 Sep 2023 22:22:54 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 07/11] iov_iter: Add a kernel-type iterator-only iteration function Date: Wed, 20 Sep 2023 23:22:27 +0100 Message-ID: <20230920222231.686275-8-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Stat-Signature: hckym45hcm8fn1h74nasrhhogsbboaw9 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 00597140017 X-Rspam-User: X-HE-Tag: 1695248583-509285 X-HE-Meta: U2FsdGVkX1+eLc8wPA9gu3/QRIn/srwXlburi4GtdKGavH82TmCBjWmYDYQxehuSbONZLr1h4o9XIxInzTNxzinIwSIkESU8Bu3dZtfBM81vl15KVDgWe1pjw3miShfsdqvvsFj2sqH5FHTb4Gd+TAnDyIKwdlZWAo9jjMwxsSoto/mNno+sPXwXNY8ntBsqB45FW+rIStu6zFXOlUZWPhs0tgH97W5dC4Y52tFnwMI2Yv20+mBmsUI9Ph75OI53yw0U6a69pevYZOXYqHaFWVGw31z+BVtgOnBbssxpOdoR56MFmB8fPdGKRym+rS/Ow50a24O8tjGnvG8c5MFVePlsl3gtSlbjfLmWlug7lMFr7/+YLRqwZqy5G311GWxpOiVIhF8mzPQFbkiuw2mohcP6twtjleFZmVMjpEJpaLfDoGzZZwJZQT4w/sr9X3TtSjR8BbqH0zAz/L8SU8F+3LrJZO8r2xc3d8ZPT5x8+rC9r7ON1hVO8IcXhSYGUhbuuNNm/35sRaCjHUls/ORbM25NNGEne5duHX6+0ltZlibfGyjt87BU7avcCEmuSM+MnbtGe3+89zEncZdbPDKK2/cZvhZnRTGngYM3/Dz11AfvkU0Yk0iPH2/G21x7YcD3jw+6Ys35l7Rv3sw4c3fpy9kpcfYPT6BGuV1MpwsHxCfUJpOoTo5ownRT4fFVMreItGKTIVk963+J4eWcJjKlvVMD2IeW/LY2x7+32RbhPQjWYtLnpWWnFAaIGmQuec7aSMyud5aM97tyjkhK/18cMgyO3IEbhLypiG2aKFBVEDYa7DWQLmResHrZxZSloMHZBZlDdpjnszD2+j90qsQuIEiBb+Xfh8nNaexRT332f6agrKo1fL0mkcdkVM1o5s18QVaXYunln0TDBUD9Senvzn+EumHJ+/7DIvetoKI/8+EwROGCRs3J1OmZjjujPlVtifJJRbdwfzDdK9+C/wN jkrgW5Vr ZqinOHjOBQe+5DO2Y9YTll6g+suBZqxP0hbE7+eq4XdOvqJ7kZoZ2Q15uICcb8qdw0B5/WULshpJq8B8iLOh4omFkg6H9Eryg1VS6D/IcfJdj1+VW7M9ZqwWi5qsKleaTB21dByd9Q860FyrMxv3oFQKSXtfCYZzR6nN7dx+ge4CJWInGdsmTHjh18AE9N9MkicoKcmYldYL3u+ANQy/qyz0DVDb45gl+ZZWj6LYnijGC7esLSSQZ4cOhZVb0m1VDdRE3PH4OcLc7fXjHLu40ricn47OUVN3+m7gfm+UmvwoBmxrQm3Nx7QO19QIYrnSdnnDocvz/xdEZ44PfFplTQG4uaAB/Ss9vjVBs/qvNbHngWsXHpiXqF0NpLkeIl04WbwMdMKbuYx9gYFj9j3ve98tbBaWMoXByhFXmaeb93WFeVY546vRRCOLpww15FPX9Hjn9CctjunffnHc7bgUuo975grFWhI6wmHhMhH/1FTFFGRAhugpp5AtgSnjn9MFgBRc1LIpO8o4j2nsDuY8+Rqbm66veh8Ibg9HEeaCqCIbg30CtYryR4lmSKeOMjyY/g8vRKIfXz7im+sM= 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: Add an iteration function that can only iterate over kernel internal-type iterators (ie. BVEC, KVEC, XARRAY) and not user-backed iterators (ie. UBUF and IOVEC). This allows for smaller iterators to be built when it is known the caller won't have a user-backed iterator. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org --- include/linux/iov_iter.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/include/linux/iov_iter.h b/include/linux/iov_iter.h index 270454a6703d..a94d605d7386 100644 --- a/include/linux/iov_iter.h +++ b/include/linux/iov_iter.h @@ -271,4 +271,35 @@ size_t iterate_and_advance(struct iov_iter *iter, size_t len, void *priv, return iterate_and_advance2(iter, len, priv, NULL, ustep, step); } +/** + * iterate_and_advance_kernel - Iterate over a kernel iterator + * @iter: The iterator to iterate over. + * @len: The amount to iterate over. + * @priv: Data for the step functions. + * @step: Processing function; given kernel addresses. + * + * Like iterate_and_advance2(), but rejected UBUF and IOVEC iterators and does + * not take a user-step function. + */ +static __always_inline +size_t iterate_and_advance_kernel(struct iov_iter *iter, size_t len, void *priv, + void *priv2, iov_step_f step) +{ + if (unlikely(iter->count < len)) + len = iter->count; + if (unlikely(!len)) + return 0; + + if (iov_iter_is_bvec(iter)) + return iterate_bvec(iter, len, priv, priv2, step); + if (iov_iter_is_kvec(iter)) + return iterate_kvec(iter, len, priv, priv2, step); + if (iov_iter_is_xarray(iter)) + return iterate_xarray(iter, len, priv, priv2, step); + if (iov_iter_is_discard(iter)) + return iterate_discard(iter, len, priv, priv2, step); + WARN_ON_ONCE(1); + return 0; +} + #endif /* _LINUX_IOV_ITER_H */ From patchwork Wed Sep 20 22:22:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393502 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 A82D6CD13CF for ; Wed, 20 Sep 2023 22:23:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2B5EF6B01AB; Wed, 20 Sep 2023 18:23:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 23F4D6B01AE; Wed, 20 Sep 2023 18:23:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0684D6B01B1; Wed, 20 Sep 2023 18:23:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E2FDF6B01AB for ; Wed, 20 Sep 2023 18:23:06 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B32D1B4288 for ; Wed, 20 Sep 2023 22:23:06 +0000 (UTC) X-FDA: 81258402372.30.8BED97E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf09.hostedemail.com (Postfix) with ESMTP id E71F2140003 for ; Wed, 20 Sep 2023 22:23:04 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GnWC1mKw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf09.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.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=1695248585; 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=NlGqpiKj7rx3Tj0axFlASO90BK9qtpX1pravzcdexCE=; b=T7NOqBDgyZDP8OgvbuAtu/ei6bsvrg1qKUtKBTL2RQmdgc882UYNQSgM7Fu9quBDVzy/YN lUTjVvrjeDrr4RJTPLZ/l0Tpk0oL/Fjz8V4i/vnPQ3w+MKfQFSnBZUaoh+fvLiw4vk7+dQ JYpTeVXsbJ/Px7PTvMOBOLXg3Tn20bI= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=GnWC1mKw; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf09.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248585; a=rsa-sha256; cv=none; b=bcddTbIcRVGSos1rktWvpAFnk245o4gWkXtaycS796KceBZZnrVgJ1UAaLuUq7bUT9YNkr JNOuY1Nv0zBwnrLpytL/s4cjSDx+0u489G3cTkAqIY3AdnDXo3jlsYPWF3QfZzMSSyeMjg LKlU5ySLZg0rFafO9BxI3gCz11ISVfI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248584; 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=NlGqpiKj7rx3Tj0axFlASO90BK9qtpX1pravzcdexCE=; b=GnWC1mKwm/dhb/cx/07d9iMW3ajzraQLwsLeEy0jXHZIRhgiloTcpFbopJbXtzrZusONKL spRbJYqBN1vlhVEf3fqpX1vB6A2suHKuOKz4oa0g0G8G9+RDXCuC8AMJROlqPH9MsXwgwk Wh1xjd4XeMxaFMgufI52SH3LzXp9Zqo= 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-526-jkOLF690N4CNCXYQpRLb4w-1; Wed, 20 Sep 2023 18:22:58 -0400 X-MC-Unique: jkOLF690N4CNCXYQpRLb4w-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3478385A5A8; Wed, 20 Sep 2023 22:22:58 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8DC06492C37; Wed, 20 Sep 2023 22:22:56 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 08/11] iov_iter, net: Move csum_and_copy_to/from_iter() to net/ Date: Wed, 20 Sep 2023 23:22:28 +0100 Message-ID: <20230920222231.686275-9-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: E71F2140003 X-Stat-Signature: u57xntoi1kkgdenw975zr8aec13yck4q X-HE-Tag: 1695248584-218949 X-HE-Meta: U2FsdGVkX1/AKBfX3GjRLNcLz11iqkF4qi3IV2aQVdZt1PlN8MNi5hd6l8gK7X5azrBMZPseOKmupuQ6si6JqkiuYu1tp4boUIg2p2344Zpm4UipCONiK1eEZ8kuKcvg5zCUiWCeUF6iFryPOkEDtMwMiBUm2Wi2R23Pz9Nv+8Eu8CjFr5J0VJBamEwAqrB1dwGuOdfPtwu76PgXknbPQsSQYruM9aK10rLVKxRH/Yu6ZNvWz9KDiD141IpHqT+oHdnGUZYmLlgWZI+vMcMqnmIopZCtT0lfJ8N/P67Brzj2/mODbts9ot44t/E4CzcojMeE269/hZFTqfIM3GgmD3USg0iuTAQBdOIvAn4cori8CqZXHl4hx+3E/a4WX3VPV/Ao9YP/iHoiR4axc+h7t7vvmBu2G/b6hbBoRJyQAw+d/wvLUrIWhsh2VMih+d2u3ax+fYFqVhBbp8D7Kyhnx9oQUTJYISVt//S3HMtd5CLj0S+PHuLLk/Zi5aZ8g2hDYX0c/yvEXX6P5s74BCGUc7slk+6g9KFn02IrL4Mr3t14yrv+GBoG2s806M4k/cX2lwF8ZsqKjB7N+AO251ErQ65F3sZw7aJdzz+v4l687f/KHc6lPuVQns2ryLj3cQlE9mRcxJQjj4juzE9raJ5QhziWdOPc2kyHCz4aYEK2J9jP0M3zgGBobq0P9l0XBeqrgjXvAg8JG1wwpbWIDrTpPWddyz3h5ZG9pV54rZlxwWAwN+6STq/I6ku4u1SiZ+S3ISiLmo9UovgU7VQ/hVwJMefSVS/lKrnQJAUWZlw63PjUu7RMas5u4EpFoNZ0XBWVnYBfacraBv/Qm5ZvHSh/C661Mcc+git6rqoEBZqpZusOC/IZvfi6Cn4BTUg0qGgIy/a9W5V7LOOC/GZdljRZUNdsSTPBuNUO5R988VpiPMBw64zJDN14q4QccG6Lo23Ek1COtdzyeV1J9Qg3Md0 6+pDeakO 8wUY7tcvli96ESGfZ6uh8lhji/qlbBX6+WqmY65VakdfahmfIc0kus7hhVAIoFsrqc84uk9AWkFYUCXRHalDgq2eXrQbdfW5OVs9QSWUrf84FQ6/S9vKbrgkvFBbSx+8POR40GA/yoOkHhsTCo5JvT030dpNTePCqpCyHnNYcouRQzJPYd6I5iIAMRr8WbheImWN+Y2q8FK2KYFFQxUpxCfzOMIejrNXk4LkS 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: Move csum_and_copy_to/from_iter() to net code now that the iteration framework can be #included. Signed-off-by: David Howells --- include/linux/skbuff.h | 25 ++++++++++++ include/linux/uio.h | 18 --------- lib/iov_iter.c | 89 ------------------------------------------ net/core/datagram.c | 50 +++++++++++++++++++++++- net/core/skbuff.c | 33 ++++++++++++++++ 5 files changed, 107 insertions(+), 108 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 4174c4b82d13..d0656cc11c16 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -3679,6 +3679,31 @@ static inline int __must_check skb_put_padto(struct sk_buff *skb, unsigned int l return __skb_put_padto(skb, len, true); } +static inline __wsum csum_and_memcpy(void *to, const void *from, size_t len, + __wsum sum, size_t off) +{ + __wsum next = csum_partial_copy_nocheck(from, to, len); + return csum_block_add(sum, next, off); +} + +struct csum_state { + __wsum csum; + size_t off; +}; + +size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); + +static __always_inline __must_check +bool csum_and_copy_from_iter_full(void *addr, size_t bytes, + __wsum *csum, struct iov_iter *i) +{ + size_t copied = csum_and_copy_from_iter(addr, bytes, csum, i); + if (likely(copied == bytes)) + return true; + iov_iter_revert(i, copied); + return false; +} + static inline int skb_add_data(struct sk_buff *skb, struct iov_iter *from, int copy) { diff --git a/include/linux/uio.h b/include/linux/uio.h index e2a248dad80b..0cf9937f98d3 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -341,24 +341,6 @@ iov_iter_npages_cap(struct iov_iter *i, int maxpages, size_t max_bytes) return npages; } -struct csum_state { - __wsum csum; - size_t off; -}; - -size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csstate, struct iov_iter *i); -size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); - -static __always_inline __must_check -bool csum_and_copy_from_iter_full(void *addr, size_t bytes, - __wsum *csum, struct iov_iter *i) -{ - size_t copied = csum_and_copy_from_iter(addr, bytes, csum, i); - if (likely(copied == bytes)) - return true; - iov_iter_revert(i, copied); - return false; -} size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, struct iov_iter *i); diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 943aa3cfd7b3..fef934a8745d 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -179,13 +178,6 @@ void iov_iter_init(struct iov_iter *i, unsigned int direction, } EXPORT_SYMBOL(iov_iter_init); -static __wsum csum_and_memcpy(void *to, const void *from, size_t len, - __wsum sum, size_t off) -{ - __wsum next = csum_partial_copy_nocheck(from, to, len); - return csum_block_add(sum, next, off); -} - size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i) { if (WARN_ON_ONCE(i->data_source)) @@ -1101,87 +1093,6 @@ ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, } EXPORT_SYMBOL(iov_iter_get_pages_alloc2); -static __always_inline -size_t copy_from_user_iter_csum(void __user *iter_from, size_t progress, - size_t len, void *to, void *priv2) -{ - __wsum next, *csum = priv2; - - next = csum_and_copy_from_user(iter_from, to + progress, len); - *csum = csum_block_add(*csum, next, progress); - return next ? 0 : len; -} - -static __always_inline -size_t memcpy_from_iter_csum(void *iter_from, size_t progress, - size_t len, void *to, void *priv2) -{ - __wsum *csum = priv2; - - *csum = csum_and_memcpy(to + progress, iter_from, len, *csum, progress); - return 0; -} - -size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, - struct iov_iter *i) -{ - if (WARN_ON_ONCE(!i->data_source)) - return 0; - return iterate_and_advance2(i, bytes, addr, csum, - copy_from_user_iter_csum, - memcpy_from_iter_csum); -} -EXPORT_SYMBOL(csum_and_copy_from_iter); - -static __always_inline -size_t copy_to_user_iter_csum(void __user *iter_to, size_t progress, - size_t len, void *from, void *priv2) -{ - __wsum next, *csum = priv2; - - next = csum_and_copy_to_user(from + progress, iter_to, len); - *csum = csum_block_add(*csum, next, progress); - return next ? 0 : len; -} - -static __always_inline -size_t memcpy_to_iter_csum(void *iter_to, size_t progress, - size_t len, void *from, void *priv2) -{ - __wsum *csum = priv2; - - *csum = csum_and_memcpy(iter_to, from + progress, len, *csum, progress); - return 0; -} - -size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, - struct iov_iter *i) -{ - struct csum_state *csstate = _csstate; - __wsum sum; - - if (WARN_ON_ONCE(i->data_source)) - return 0; - if (unlikely(iov_iter_is_discard(i))) { - // can't use csum_memcpy() for that one - data is not copied - csstate->csum = csum_block_add(csstate->csum, - csum_partial(addr, bytes, 0), - csstate->off); - csstate->off += bytes; - return bytes; - } - - sum = csum_shift(csstate->csum, csstate->off); - - bytes = iterate_and_advance2(i, bytes, (void *)addr, &sum, - copy_to_user_iter_csum, - memcpy_to_iter_csum); - csstate->csum = csum_shift(sum, csstate->off); - csstate->off += bytes; - return bytes; -} -EXPORT_SYMBOL(csum_and_copy_to_iter); - size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, struct iov_iter *i) { diff --git a/net/core/datagram.c b/net/core/datagram.c index 176eb5834746..37c89d0933b7 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -50,7 +50,7 @@ #include #include #include -#include +#include #include #include @@ -716,6 +716,54 @@ int zerocopy_sg_from_iter(struct sk_buff *skb, struct iov_iter *from) } EXPORT_SYMBOL(zerocopy_sg_from_iter); +static __always_inline +size_t copy_to_user_iter_csum(void __user *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + __wsum next, *csum = priv2; + + next = csum_and_copy_to_user(from + progress, iter_to, len); + *csum = csum_block_add(*csum, next, progress); + return next ? 0 : len; +} + +static __always_inline +size_t memcpy_to_iter_csum(void *iter_to, size_t progress, + size_t len, void *from, void *priv2) +{ + __wsum *csum = priv2; + + *csum = csum_and_memcpy(iter_to, from + progress, len, *csum, progress); + return 0; +} + +static size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, + struct iov_iter *i) +{ + struct csum_state *csstate = _csstate; + __wsum sum; + + if (WARN_ON_ONCE(i->data_source)) + return 0; + if (unlikely(iov_iter_is_discard(i))) { + // can't use csum_memcpy() for that one - data is not copied + csstate->csum = csum_block_add(csstate->csum, + csum_partial(addr, bytes, 0), + csstate->off); + csstate->off += bytes; + return bytes; + } + + sum = csum_shift(csstate->csum, csstate->off); + + bytes = iterate_and_advance2(i, bytes, (void *)addr, &sum, + copy_to_user_iter_csum, + memcpy_to_iter_csum); + csstate->csum = csum_shift(sum, csstate->off); + csstate->off += bytes; + return bytes; +} + /** * skb_copy_and_csum_datagram - Copy datagram to an iovec iterator * and update a checksum. diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 4eaf7ed0d1f4..5dbdfce2d05f 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include @@ -6931,3 +6932,35 @@ ssize_t skb_splice_from_iter(struct sk_buff *skb, struct iov_iter *iter, return spliced ?: ret; } EXPORT_SYMBOL(skb_splice_from_iter); + +static __always_inline +size_t memcpy_from_iter_csum(void *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + __wsum *csum = priv2; + + *csum = csum_and_memcpy(to + progress, iter_from, len, *csum, progress); + return 0; +} + +static __always_inline +size_t copy_from_user_iter_csum(void __user *iter_from, size_t progress, + size_t len, void *to, void *priv2) +{ + __wsum next, *csum = priv2; + + next = csum_and_copy_from_user(iter_from, to + progress, len); + *csum = csum_block_add(*csum, next, progress); + return next ? 0 : len; +} + +size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, + struct iov_iter *i) +{ + if (WARN_ON_ONCE(!i->data_source)) + return 0; + return iterate_and_advance2(i, bytes, addr, csum, + copy_from_user_iter_csum, + memcpy_from_iter_csum); +} +EXPORT_SYMBOL(csum_and_copy_from_iter); From patchwork Wed Sep 20 22:22:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393503 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 34B87CD13D3 for ; Wed, 20 Sep 2023 22:23:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EC5C16B01B1; Wed, 20 Sep 2023 18:23:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E72826B01B3; Wed, 20 Sep 2023 18:23:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CECB36B01F0; Wed, 20 Sep 2023 18:23:09 -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 B9F2A6B01B1 for ; Wed, 20 Sep 2023 18:23:09 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 845791607E5 for ; Wed, 20 Sep 2023 22:23:09 +0000 (UTC) X-FDA: 81258402498.11.65BF7A2 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf02.hostedemail.com (Postfix) with ESMTP id E0A048000E for ; Wed, 20 Sep 2023 22:23:06 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=NwONeS52; spf=pass (imf02.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248586; 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=i+29vAFZrXF9naWng0ipN/2z31gEil+IMifE0VymLF4=; b=iPQISxqfHMBDGmq2xh7KE5AKkjYoEJA7UeL98xKk5KDJ6SNQlqhhuvlAtkOQvsZ6P/rU2D XGuXK0+yOQMvZIaoqhw9/GY/hzjIrfUnastw5nJJFjTn7yOGKEgjuRL7p9VaXZw7agjsvN RUByxQMIVnvLaa02M9DThkNFCax1sSk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248586; a=rsa-sha256; cv=none; b=prnon9X3r+3qtBXC0WQVRmcoSWfcNjS0r+stD7ZIzcLSGJ+wO0hZEDtUyPd56oJ8Ja2Dan +Ny/E20fxOgHhosIuXp/vbtiCvsLOJfSwkuxkVV9+fZmkRE6clXQCXK50TyEq3UEL9qBX7 Xlvr4k/+AhbA6I0n/xyLj5KKeFsQCfo= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=NwONeS52; spf=pass (imf02.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248586; 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=i+29vAFZrXF9naWng0ipN/2z31gEil+IMifE0VymLF4=; b=NwONeS52XCpnMFjeVSyTcMvg7i0sydtRUmnxLMae40ZjigVsF9KQNHEv2d1xW555SBy/tf usxOkfo6cV/uAkr1irIDQKDJGjbYbBT/Y63afPzcNd9X5aK3BMxbjG9I9dIEkJnBdsqDAk 3IavTyFwdioofV8c5r1v1tiD0AFQbcg= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-594-8JTl3Nq0NjWy4HtzvZJD0A-1; Wed, 20 Sep 2023 18:23:01 -0400 X-MC-Unique: 8JTl3Nq0NjWy4HtzvZJD0A-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DABB028EC111; Wed, 20 Sep 2023 22:23:00 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id CCB8EC15BB8; Wed, 20 Sep 2023 22:22:58 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Subject: [PATCH v5 09/11] iov_iter, net: Fold in csum_and_memcpy() Date: Wed, 20 Sep 2023 23:22:29 +0100 Message-ID: <20230920222231.686275-10-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Rspamd-Queue-Id: E0A048000E X-Rspam-User: X-Stat-Signature: wq8iioxzrmfuspn5tmizm1zswt7brdcf X-Rspamd-Server: rspam03 X-HE-Tag: 1695248586-872390 X-HE-Meta: U2FsdGVkX1+jSWgzzbxoglS1+kAbQxv+JBMGNEpUHVh2GQl7spo0Z1gpp/tezsTqSirfG1DJB3GfeZdrhFGmuctMyYxxUhFm0bnk9dKeDDWGkeXoaevK1aO+LgnZ10MzWkeqRgvYwdMLkN9eKZh1DNIf37CJG21nxBec+cHk12emIxQwuF4SX8TZIvUYJaktMpuume/UZAofUpMu3szq2fCzNS4y6/hUOABW29uGjZo6VlaYLJP5ucXsUVniXsu3OT2SBe0u6sZLJr91/yqlZElADsE4oSqjFGqpyGO+quwv5aH8Q2rf4iK3TzaX021SbNkQyrqmGCvS0cvtZpVnc0ZLl+YrFNfan86vEWX3KYO3l6nixbc57rJSFmnRVTSR0mVRcxvyW/1CCNdo97IRfWKdtbJ84vpFoek44C4ObJZRegd0izhQDauZ/ybDsBaBriNLEFsRdG6jlWaFW41dJuhWOTVzztzo4ex5pld2VKCyTJg0KZpWrHyElePvdEhXWveezVUUWrPk3E66mzjMWd08nNUUEg689edN2WTIjvux2nf74U6KaJ/rCz0ip/OqpBUXgdj4kGSM8hxDSraXwQyzpbIYuqqpftLUFyPgOCM2vSVCDSh7cH1EcJY7HZchdy+pbtuqbw0nMlIL8eA8Vs68thgLsWDth/8SfpIrh1bA+hcfrsXBbUu6kzydUhtN4vENG7Z65AWAIuur1jh17P/SJmwqXv9o2GyjZtJ90UBJfcEM2VIqLDMxI3+1aaZbl7wX0K/DVagUQwzlgJvN3xrjnlFD4Rl89BOOoo84JQv+jz8ssG2BP8blu3e2NxnJvZAFvEjEG9ZGHvfwU/Q5y8+rIReKrZ/DXbz6p6LwV2wzxhWInudJi8RsRmdDTtX9yITLwonFcXK/wNexKmy6PJ8uWNcm+XJfrcimPMqrJEQ0FrfmCZifC31JHkbzb0Z1N3I/WHSlztjB47S82TW eOOtJdaE 9mMdoo3xAeh1fdRYpBvInQdrFt3Vdu4Wk6mh+fU9oCqmbvBCOzKSTfd0EYqLQRjOJPLxI99HY9mqVjsdoRvLxTceLWtMGnhGK5bS88FG61PlE6k/h/nAPGgW3DKmbz9nTNNrwAiNtD1rCxk3viAh/1YAfkyupSqB+5AlbCCgPJM/0l194lODF9OoBJ6vAZEhCXhfU9qLBeMC6H5ID9VMgvPQS1bdR4fyyrEfGpC9O4z5RoJYiC6Ci2y2OacQi6yzTGlv6ruuEfd3ojqlua7vyrPXms6asU18UWM30grjWdM///l4pkUDvbZeSFOpJasIQOmVChNBoX+bqQC/4fHsBz1vtipEchKLgIExK9nY9T0CMkQJTwe7U7A9NRmJIxtqWnvM3lsMYL1almZBk7DPNEqaqjw2M6BGeawQ6T8aCX1IHRAv28bAmFJWAywwJJPjPgroQMqBelN4yGLxnmMmorynvF19XjWwQ792oHMXqmmkOe5Pk+Z33NW2tIT9CKWqM4aWyqalzJ3Egr+ksmzJ6EQ1a0r/EwF8CDbNg++ndpPLbuIJ/tOUTLUZ2NfEY9RBptJhe7znaUuPEClMDf839j339LPKDg7H5S5gT8COrYdScPpqGxV5zmbxjd8+bHtX9zYvAcsFQWBvJ8hu1bE7aWypYoCfxv5OdUOuA 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: Fold csum_and_memcpy() in to its callers. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: "David S. Miller" cc: Eric Dumazet cc: Jakub Kicinski cc: Paolo Abeni cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org cc: netdev@vger.kernel.org --- include/linux/skbuff.h | 7 ------- net/core/datagram.c | 3 ++- net/core/skbuff.c | 3 ++- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index d0656cc11c16..c81ef5d76953 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -3679,13 +3679,6 @@ static inline int __must_check skb_put_padto(struct sk_buff *skb, unsigned int l return __skb_put_padto(skb, len, true); } -static inline __wsum csum_and_memcpy(void *to, const void *from, size_t len, - __wsum sum, size_t off) -{ - __wsum next = csum_partial_copy_nocheck(from, to, len); - return csum_block_add(sum, next, off); -} - struct csum_state { __wsum csum; size_t off; diff --git a/net/core/datagram.c b/net/core/datagram.c index 37c89d0933b7..452620dd41e4 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -732,8 +732,9 @@ size_t memcpy_to_iter_csum(void *iter_to, size_t progress, size_t len, void *from, void *priv2) { __wsum *csum = priv2; + __wsum next = csum_partial_copy_nocheck(from, iter_to, len); - *csum = csum_and_memcpy(iter_to, from + progress, len, *csum, progress); + *csum = csum_block_add(*csum, next, progress); return 0; } diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 5dbdfce2d05f..3efed86321db 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -6938,8 +6938,9 @@ size_t memcpy_from_iter_csum(void *iter_from, size_t progress, size_t len, void *to, void *priv2) { __wsum *csum = priv2; + __wsum next = csum_partial_copy_nocheck(iter_from, to + progress, len); - *csum = csum_and_memcpy(to + progress, iter_from, len, *csum, progress); + *csum = csum_block_add(*csum, next, progress); return 0; } From patchwork Wed Sep 20 22:22:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393504 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 8DF9DCD13CF for ; Wed, 20 Sep 2023 22:23:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CCA986B01B3; Wed, 20 Sep 2023 18:23:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C796C6B01F1; Wed, 20 Sep 2023 18:23:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AA5326B01F2; Wed, 20 Sep 2023 18:23:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 8A4516B01B3 for ; Wed, 20 Sep 2023 18:23:11 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 5876F120E09 for ; Wed, 20 Sep 2023 22:23:11 +0000 (UTC) X-FDA: 81258402582.28.74F791E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf27.hostedemail.com (Postfix) with ESMTP id A03CA40029 for ; Wed, 20 Sep 2023 22:23:09 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="MGK5r/Fw"; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.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=1695248589; 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=OEnm3txfdKWMLGG8rrdFEcQBV2WWgkp8Kq4P7DhBB1I=; b=0WdpmyNy3cow8wgstzdBq/IfpZE+rIOx2nZSC5jNDFTe9yaKDHgR9O8u2osxT308ITV5Ki UwFO9yTLhI9QoSw3SB8dKt6c8ZwuNqwTkKTu2Qi64foLyC/DLOsjpjwh14rK1VoqL6+SJ5 +epz926btba3VVDRSVnjgh8LL/edQ9I= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="MGK5r/Fw"; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248589; a=rsa-sha256; cv=none; b=obk/YXzdUgQziCRw2jqw7/TRmsZRRDHsdrPSEwmR4b9X/YytEns1ZgDz9PEPd9jQr8zu4/ 17Dx4TuYWjHuLhzkoyk5U82G9RFwzfTMbyhlaYG5rUTIAgYcY9jrIm41YbbAT2rGj2A4TI G2j5F/hAmyQJkdJmKqF+CkB0nguxNMM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248589; 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=OEnm3txfdKWMLGG8rrdFEcQBV2WWgkp8Kq4P7DhBB1I=; b=MGK5r/Fw68pF3tmnHeiuODdfFY4v8Qc2RuYie/dq+j5+Xra1OtBtqfeQjzRGbjARWqvEt2 NJsx76nZXxf8D2Q30KsKrNvD8SCrn3ATBO8egSKK3+JOq8b8biQlnrOPIwlH/XhSRGRJZt CgQky2vM5boKmmIpGEFSi4r9rPkvRC4= 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-148-qZGJ1yNoPOih4A5wVhP7UQ-1; Wed, 20 Sep 2023 18:23:04 -0400 X-MC-Unique: qZGJ1yNoPOih4A5wVhP7UQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9CC29800883; Wed, 20 Sep 2023 22:23:03 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 941A0492C37; Wed, 20 Sep 2023 22:23:01 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Subject: [PATCH v5 10/11] iov_iter, net: Merge csum_and_copy_from_iter{,_full}() together Date: Wed, 20 Sep 2023 23:22:30 +0100 Message-ID: <20230920222231.686275-11-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Rspamd-Queue-Id: A03CA40029 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: up5yo8yo8asjyzxszzm7rckig6bt8yuk X-HE-Tag: 1695248589-592748 X-HE-Meta: U2FsdGVkX1+cN7o8H8AqTwOMse5dsSDxJsj4qjTYgeZnwapsD8IfKrU2IO9166e7M4m5Zp1Z5vzbW8XZ9w4UOMkXaagkWKHrql+1R8m22ofBvnD4kbGzbjQ9VOk3pJc+vV2Mj1pDxEYzDDHhXBbiffMWNuUx6fDjuvoVyysPTn17du85YS4xtA8y9DUbz4syyQbTyQ35hongvU7dnkgwk3gsp1kBVTnhhxJFnkzUr6KHSrgc4jGC4wQNJTQelBkf6BeKE+3khMNDoYh5BosmBjy56LL5p2aIo6wBcaZxP8wmjMYO+ckI9o4GvD9dTmcE77MgrbZKEf4yQs3tTBNblc9ju59GZb+8RcFG0sJfKA02baJJmuIq5AVpxKyj+fYo9jKD4I7Tz3vDqm0M+S7aUtG3tZELC+sRbz3U+x7EVvhFUIvKZ5cLml4ZIEmnpX1XcvW6TORj1NtQ1ZBq01gPNWA9RB4hrZ3HOVEEou/sHIe7uwHwyHiFaxrviJAyCIK31qmuGZ5wqyZIzdT+PPzBj2NXGKH6YZ5uZSjXIPDi0sw2uc4pcHLiMfOOf6zfxf27Cf/IxUiYn9+7Uq3CbqvqcLUgdNGEG4auiXkVaylUIswfwepK70YjITfnDZV9JRjnHqBY7MfATcSYamQ9pHOKOKVpaZuFhn3W9U5pR8f2RzcuPVZEx4UH+zl62iz8UyFyEKgsHWzgvp1xy2BzFGR4iFGGSRNy/dl9UV9NUpDRm/+ZHO0suZxworoBVm4GPSDvVKMCOCuxhgEVXASSQGfJy2WwPnJ/SQjDQGUCakez1VxFLQNrvH7+ceGpT1HeMExY5O9hf9RL+r3vgS0czqVQYR1sQEz1gznYWcfujfHCBKdqW42IDiS9udLUuMwuwyCn3xZ4b+spu+WPmaq9xAlqqIvS6OpsQk5X5COZuI+5TGalhORSrnjGvzTpXfoe1wOdfTsbmo5pl2kUV/yfWb2 x8b1bxZp HGIDebZDtuB3+s/mZxQQeXGmA00qjwfsLzlnuqhXnxfdOu63K6BxQtpMRc4j4wCnCqoi34k3OBxLUmVkMVNjP0lINNcM+A6XXzrBtdWxGXajghFCu76E1QMb4/bF571qx1r4m+G2dRdeWz3EiqLZYMwDzQGcrdvA4dbW4qV7n9Omh+Pn1x7wWiplrBarlsBxoNuBNkwai+qKQH1HQtBUJ6jyIKAnVD4FegeZoC9Fp/mG3BPOX1Mfs0gB/ITro21r8Ekbh1ZbNdQdyseqZfP9mOTj+EL+t5jRrBwjGS+JHmLqgiCDfnjz2vCGe3QfAUnfcCBZTW/XhA52F2IPSDM+8/NNK6I/DwKKSoRlZNcvKQtH9CINsaC7J12cP3qG50VxJFO75QvpAPqsM1YZxzsU7Y/HshfcwQ5m+puMoC8LhInT/+H2oj8aMSw9CWKoQ/c8R5lP2NZsMEZ/aasqUiBUb6exWXV/EfEIoj5PiAuSIKJAPmUEhk/IkCiJUVd66c7uHYdvULJGKTh3OkcH60Mh+hv0FMrxjnScjwIRZL9nZK2T1NqJmJxrUjVIDPkCOZX13jQlMaiBde7Mv9VptXT1kXG761aaYgZerI0XCqK/iQiUY3pfFmO4AzJy+OtQC1SHx5jx2L0M/7D7u+UJ72yTuRu00oeQhWqKtXV+H 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: Move csum_and_copy_from_iter_full() out of line and then merge csum_and_copy_from_iter() into its only caller. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: "David S. Miller" cc: Eric Dumazet cc: Jakub Kicinski cc: Paolo Abeni cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org cc: netdev@vger.kernel.org --- include/linux/skbuff.h | 19 ++----------------- net/core/datagram.c | 5 +++++ net/core/skbuff.c | 20 +++++++++++++------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index c81ef5d76953..be402f55f6d6 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -3679,23 +3679,8 @@ static inline int __must_check skb_put_padto(struct sk_buff *skb, unsigned int l return __skb_put_padto(skb, len, true); } -struct csum_state { - __wsum csum; - size_t off; -}; - -size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); - -static __always_inline __must_check -bool csum_and_copy_from_iter_full(void *addr, size_t bytes, - __wsum *csum, struct iov_iter *i) -{ - size_t copied = csum_and_copy_from_iter(addr, bytes, csum, i); - if (likely(copied == bytes)) - return true; - iov_iter_revert(i, copied); - return false; -} +bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i) + __must_check; static inline int skb_add_data(struct sk_buff *skb, struct iov_iter *from, int copy) diff --git a/net/core/datagram.c b/net/core/datagram.c index 452620dd41e4..722311eeee18 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -738,6 +738,11 @@ size_t memcpy_to_iter_csum(void *iter_to, size_t progress, return 0; } +struct csum_state { + __wsum csum; + size_t off; +}; + static size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, struct iov_iter *i) { diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3efed86321db..2bfa6a7ba244 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -6955,13 +6955,19 @@ size_t copy_from_user_iter_csum(void __user *iter_from, size_t progress, return next ? 0 : len; } -size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, - struct iov_iter *i) +bool csum_and_copy_from_iter_full(void *addr, size_t bytes, + __wsum *csum, struct iov_iter *i) { + size_t copied; + if (WARN_ON_ONCE(!i->data_source)) - return 0; - return iterate_and_advance2(i, bytes, addr, csum, - copy_from_user_iter_csum, - memcpy_from_iter_csum); + return false; + copied = iterate_and_advance2(i, bytes, addr, csum, + copy_from_user_iter_csum, + memcpy_from_iter_csum); + if (likely(copied == bytes)) + return true; + iov_iter_revert(i, copied); + return false; } -EXPORT_SYMBOL(csum_and_copy_from_iter); +EXPORT_SYMBOL(csum_and_copy_from_iter_full); From patchwork Wed Sep 20 22:22:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Howells X-Patchwork-Id: 13393505 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 E1571CD13D3 for ; Wed, 20 Sep 2023 22:23:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E7E56B01F2; Wed, 20 Sep 2023 18:23:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 798876B01F3; Wed, 20 Sep 2023 18:23:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 613276B01F4; Wed, 20 Sep 2023 18:23:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 4BD436B01F2 for ; Wed, 20 Sep 2023 18:23:14 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 295CC140CE3 for ; Wed, 20 Sep 2023 22:23:14 +0000 (UTC) X-FDA: 81258402708.12.9B782CB Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf27.hostedemail.com (Postfix) with ESMTP id 4E62840029 for ; Wed, 20 Sep 2023 22:23:12 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="WWOW/mwY"; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695248592; 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=qT59ImjpXymvQ6tFUMHWEUo8+jWIxsSglDsUCxtrSao=; b=YypUS4AKZJ50if+Sd+5Kgb8hsnx8WrFc319nVcuJcZ9/5xiOz2uxCxAruphEY7AIoD/VJJ B5FLLpDgd5j8WR22sFM5k7LOW6a6GIyrkgcYfmJ2tpcwdfTVc0+41HIPz/woH0AaRmU3Bi t3qUlJQMX8rVPlEDNN4iDuXXvavVOsM= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="WWOW/mwY"; spf=pass (imf27.hostedemail.com: domain of dhowells@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhowells@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695248592; a=rsa-sha256; cv=none; b=ae+3AjruftSFsM8kvMhzcMYCh4swe8QRJqwfiDihsUIZOcmupVzovxBMA3At7o8v36REQa /ma5gUEzXwdMG5qkhn5TJeHrZ3uQwg87hfNvVIRuO1yHArY0IFURfzj1nmyDVV4cAb9xqh ZBGnzxI6Nb4YH4nVvJMJ32hm8pgyyzQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695248591; 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=qT59ImjpXymvQ6tFUMHWEUo8+jWIxsSglDsUCxtrSao=; b=WWOW/mwYQR/DCRrRodyOThwIcyAm7lLVxChswFtQlRCdXwsQo0os8InlsUatnXvVoPwPTu in8FcRNwvSMx/SlgMeOvyI8cfS3O41RtWXbovEvmGKrCezK5hq72HM4DRJ1MVVHvVi53i+ oZDyfoJ/FOeesJ779F+zAY+C2Hj0rTE= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-647-5dIXQ-LFOyWTHqsMcxPB4w-1; Wed, 20 Sep 2023 18:23:07 -0400 X-MC-Unique: 5dIXQ-LFOyWTHqsMcxPB4w-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4AC303C0D183; Wed, 20 Sep 2023 22:23:06 +0000 (UTC) Received: from warthog.procyon.org.com (unknown [10.42.28.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4231E40C6EBF; Wed, 20 Sep 2023 22:23:04 +0000 (UTC) From: David Howells To: Jens Axboe Cc: David Howells , Al Viro , Linus Torvalds , Christoph Hellwig , Christian Brauner , David Laight , Matthew Wilcox , Jeff Layton , linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Subject: [PATCH v5 11/11] iov_iter, net: Move hash_and_copy_to_iter() to net/ Date: Wed, 20 Sep 2023 23:22:31 +0100 Message-ID: <20230920222231.686275-12-dhowells@redhat.com> In-Reply-To: <20230920222231.686275-1-dhowells@redhat.com> References: <20230920222231.686275-1-dhowells@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Rspamd-Queue-Id: 4E62840029 X-Rspam-User: X-Stat-Signature: mag8rymqn8aprgc1ppxjodcbrk5ukce5 X-Rspamd-Server: rspam01 X-HE-Tag: 1695248592-627212 X-HE-Meta: U2FsdGVkX19FbohhTSFPfUxkNb6x6pgHpjqME+rcUzQ1iokL8+ujpsvQD7r4iebtxh5oa8U63/6E52R09yiTrA3HX+C+Ddx9oIG+mDjOpwVVkGaBGh99cdWmzPO8TuqZsK3UL8T/QlEEBNnxX+sHEF1UzoGPl3aJgq6MZV4KLM4MYJkJZH0U9y0eedAVCP/PfrvYcDGP/dQ9+zGtg0j84y3mRm/lVJYMpIY9+5PCpBw1DiNdDsl957uiwjnBniTXk4gU/dF9Bd3SvZ5XsgSLLwx1d6GWz9afBFJHdMWTvdPUBdvoYIrOk8bLL6KsASdFqwq+17Bm9qRHN+165iJB/eO7qOWHKYS4JPcDWeQ5Bp/iBOPx7PjMMLvdmjGnGxqplKTgP1TimCfiChnWTF4eM+69JNbKVjMopV88HQ/ZWMN7bWCv9iSv0VYTEnbopsDIYwSSYDPJVoMhVOPfoSrMMusztbwaUkj1snl/qwfdxTOsFlNCzmKhM+3Gr+DHtFg3jRGT6laTLWOqAQMgNbfcdv8mKthQtuHxdixtyQy62CSYohrH8lsmq5tbD+2cX/3EWXzzniZVtN5DJKTzZvELYlMGyLcTp+f36R8wHG2H/gjwIOrurV2O1HPzQN/IqpM+7pQxpV2fF0Dx9CqvSUZeKXDkDFUqgpqcL4hN11V9Nwn9LuAXiVKxb/BdM3AdVOb6xvt4MSHCmvQ7dTRiWmoc4gr/QhW9ln9o6gpmG3tiZ8lA2F/vVd4jJ/Veb354V0DPpzSUvPd92IEP3a+twWeF3ioo0l0IonyVleZWMsw5QARa3BEBPrvVBrpltnnyk+R/4pZmd7R8Ududz4ShZ0koglzTYdr+6z2ZsiEmZ+gRqfLLsscRo9fZWWslh+gGD70Nd6YhQehnteqanhMIFojf4dYs0vGq6qOXwZO812CZ8JG92Ll9x6DJm2pSmTrgtZOJA1V0A/uS7fRy7FK6AA8 mozLGvsa YZrXP6PAFONicgK/bvL0FMZCQwb5pWIiMM5pci1XSOnPcGbgrHhXr3n9a04sIl/fF5to2J9qel3f7oeRAkQTG3Jp/JGUoV9iJaYBwYjy23T0fUQ08VaeCKzkjDcnjG6HAhbCEZOA6l9KAx55R+rRZPlhReE2NOR6bd7xTArlfVTBjozRrc5gPWwK7EMabZZcfu5NN3O9GKG/6EsTmCzXLqMHI1Ts4Rf0loy3dCUhyw0h8XxBQLkkqSIMYUp3xPZCcT7k5uiP5qFfaYdvATdT+hD78GGOJHNJtjRVWFvemvZJMtN1T8ymI7iys+8mb2VqEyfwlUg7N/f1tMYqwKD5ARArIZZHN6I8Q/0Z94gsp4LLhPU88xULy+S8bgfiCDTYmiqL73p0rIY+gps9TKuHoDqlmieBfT6xiSmbxCB84K474TQerPh7qoh84TdLYpV5cOeZ5W4phO1SXvcdhAM6Rafj8CY9BUPe11roH1StOFbzMPN9ZiwJkMV8HmvG9NtC4X6RUZBon0RZz7u0EsKRw8HK3CddA/xep5uwnOW4X465QiZPWAV7iTNDB3vgkUG5VrKepjOT28GK25lWodOKNyq0BSUkluDGhfrDlJlIPYPi/d5kG5eQokPG+cvbNFiZzbDfDRPjDAv7Z/xM+OxqlYh1lsY/QcvLDSZ64 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: Move hash_and_copy_to_iter() to be with its only caller in networking code. Signed-off-by: David Howells cc: Alexander Viro cc: Jens Axboe cc: Christoph Hellwig cc: Christian Brauner cc: Matthew Wilcox cc: Linus Torvalds cc: David Laight cc: "David S. Miller" cc: Eric Dumazet cc: Jakub Kicinski cc: Paolo Abeni cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org cc: netdev@vger.kernel.org --- include/linux/uio.h | 3 --- lib/iov_iter.c | 20 -------------------- net/core/datagram.c | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/include/linux/uio.h b/include/linux/uio.h index 0cf9937f98d3..442d0d238207 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h @@ -341,9 +341,6 @@ iov_iter_npages_cap(struct iov_iter *i, int maxpages, size_t max_bytes) return npages; } -size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, - struct iov_iter *i); - struct iovec *iovec_from_user(const struct iovec __user *uvector, unsigned long nr_segs, unsigned long fast_segs, struct iovec *fast_iov, bool compat); diff --git a/lib/iov_iter.c b/lib/iov_iter.c index fef934a8745d..2547c96d56c7 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -1,5 +1,4 @@ // SPDX-License-Identifier: GPL-2.0-only -#include #include #include #include @@ -1093,25 +1092,6 @@ ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, } EXPORT_SYMBOL(iov_iter_get_pages_alloc2); -size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, - struct iov_iter *i) -{ -#ifdef CONFIG_CRYPTO_HASH - struct ahash_request *hash = hashp; - struct scatterlist sg; - size_t copied; - - copied = copy_to_iter(addr, bytes, i); - sg_init_one(&sg, addr, copied); - ahash_request_set_crypt(hash, &sg, NULL, copied); - crypto_ahash_update(hash); - return copied; -#else - return 0; -#endif -} -EXPORT_SYMBOL(hash_and_copy_to_iter); - static int iov_npages(const struct iov_iter *i, int maxpages) { size_t skip = i->iov_offset, size = i->count; diff --git a/net/core/datagram.c b/net/core/datagram.c index 722311eeee18..103d46fa0eeb 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -61,6 +61,7 @@ #include #include #include +#include /* * Is a socket 'connection oriented' ? @@ -489,6 +490,24 @@ static int __skb_datagram_iter(const struct sk_buff *skb, int offset, return 0; } +static size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, + struct iov_iter *i) +{ +#ifdef CONFIG_CRYPTO_HASH + struct ahash_request *hash = hashp; + struct scatterlist sg; + size_t copied; + + copied = copy_to_iter(addr, bytes, i); + sg_init_one(&sg, addr, copied); + ahash_request_set_crypt(hash, &sg, NULL, copied); + crypto_ahash_update(hash); + return copied; +#else + return 0; +#endif +} + /** * skb_copy_and_hash_datagram_iter - Copy datagram to an iovec iterator * and update a hash.