From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1FD7C5AE59 for ; Tue, 3 Jun 2025 12:43:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 13F0D6B0406; Tue, 3 Jun 2025 08:43:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0EE996B0434; Tue, 3 Jun 2025 08:43:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F20426B0435; Tue, 3 Jun 2025 08:43:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D149B6B0433 for ; Tue, 3 Jun 2025 08:43:18 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 759A48084B for ; Tue, 3 Jun 2025 12:43:18 +0000 (UTC) X-FDA: 83514054876.13.2818E75 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by imf07.hostedemail.com (Postfix) with ESMTP id 7D99240014 for ; Tue, 3 Jun 2025 12:43:16 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NcjAXrzm; spf=pass (imf07.hostedemail.com: domain of amir73il@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=amir73il@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1748954596; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6sJx8mcfGnFO4aX8W0GB5TfU4SPvOLM9fzBj8cbSzfg=; b=FLVHavZdNlzP/PoRqKH0FG6P+XtIqMlGJ1YxOzawrqi4S6CydUp6hd6y41pBg/uCPN4X08 8JKCuKVvXYH+Ymdjo77wiVAfdV6kNhkpfMV00Ho1Iy+sZBApIH3ISxVR0Mo8rpKQmIavWC hhrfq+HJHaI7xfsVbgKNuxO+BDqp1RY= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NcjAXrzm; spf=pass (imf07.hostedemail.com: domain of amir73il@gmail.com designates 209.85.218.42 as permitted sender) smtp.mailfrom=amir73il@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1748954596; a=rsa-sha256; cv=none; b=YT1UY+bgPxvbYvFgbwgEsVDFd/CQodn4SVmvdOPsgnRQ2IINEj4vdLtorxaFoaPimeuS9h EqMagepzz4cXjK1e7Gsqd4AvOmVrcgOFuyqTVMAhbUMjJpGtBhMYZ9zCDL7hk+QKKDpKoD mfoUqK6LnTjOE64Z4EBEYTBbKRezs3g= Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-acbb85ce788so1064929266b.3 for ; Tue, 03 Jun 2025 05:43:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748954595; x=1749559395; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=6sJx8mcfGnFO4aX8W0GB5TfU4SPvOLM9fzBj8cbSzfg=; b=NcjAXrzmZJdXNiTAsiOimWQf8orL2qM70OAp+LFNOQoIb3JXDA+xFOy2mUSyKZ2i/L wXDg2USz5sIOisOveGCcGjAK2OXyQaa8H1cylUgmOoIz5TfunjZfy0R3j4yQeHbps9cj iuMBDInatCcPX+Kpq7NVyjGHBIDx3r0X/DTFjPTaWbnk/RpTMaSAvA8V5SauFbthIYKy 1WlbuiiQhpKrpXfUzjVQuoez7jJktg9I56IIrKmUbfBsyrcbNWixPIFHAE9dfoxwHpT4 c13gVJ6QHdODeiO5MRmAg1ujMi8HWbxbb/nwCPfur16H1LUA7FzvK5o9R7cA9aNI5lTG At/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748954595; x=1749559395; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6sJx8mcfGnFO4aX8W0GB5TfU4SPvOLM9fzBj8cbSzfg=; b=h514+dfUH87o6Y1ykMU5D5j63H3pq56QSxvEkeXxzNFBS1NpqiRDECP/C5bZdX8lrL cmrTtL88fHe56zHh2LOEHgnxs0ycfMr8t1ioyTb5OW0TI/LMQzj2mVpnHoaL/8/cRg74 cpQ3jMut58URd6DmRSRIQjTqUW7Y4gHBdyQ6z6f4G8H5Msg/2Ya1j3pcue5VIv3nXXoc 3krve4OhJIqIhoWs2T7TE/K6vD1HM2UjQQEQhD6LH0knAAPGKi/O7F8RYU42N677OaVp 8z7yguC24CD1oXHYNNvpXM6PncHhBmMyb6bUDLCgr5SmfMh5JkK6MSBFH1xMyIY/lbno Koug== X-Forwarded-Encrypted: i=1; AJvYcCXGMh3iVdP/eSUnWzmbjByK/bFOwRAZxH4NbLm56H/TiQG01xes3Q1ToQK1h5Kzc/QvDyJC9mAjOQ==@kvack.org X-Gm-Message-State: AOJu0Yx//7qtBvZBMzqtozOS63H1SJW6xbTcjLI2w30TfnSEvmUzvCZH nZzzyfVvKqmpD2+4/i0j4ZT0eb+aOmkEtawGe2+PgwqsFoCQSkdDfyngSinX+unaeG3ciJFbHUt BGuXlURP+2sOAN3yD0C/W116gSc4J1fE= X-Gm-Gg: ASbGnctHJwDHKNDGRikdI9LHMTwiwz039ebb7nNhaD0l/zCkE8RSASYYDb0bTrp9j9M Uf46OgehEHpc7GNgfDgqZ5Ypzrhxxc3QeZC/pBm0n0ELdCpImPI7ulnzfG+swq28q2MXFwjhBRu bTvWeZgW+SB/jA5bfc8p/1Auqsf4HGGCKo X-Google-Smtp-Source: AGHT+IF0Y8eVa/wSpXz4raSNLDvjA9m62FPSA+BLGsYc090YPQ60EU4GYYJzLpKbTnA9JxXmd1DxAASt8NsK3GIUg8M= X-Received: by 2002:a17:906:85a:b0:adb:413a:a981 with SMTP id a640c23a62f3a-adb413aaac4mr1029791066b.14.1748954594439; Tue, 03 Jun 2025 05:43:14 -0700 (PDT) MIME-Version: 1.0 References: <20250603095245.17478-1-tao.wangtao@honor.com> <20250603095245.17478-2-tao.wangtao@honor.com> <0cb2501aea054796906e2f6a23a86390@honor.com> In-Reply-To: <0cb2501aea054796906e2f6a23a86390@honor.com> From: Amir Goldstein Date: Tue, 3 Jun 2025 14:43:02 +0200 X-Gm-Features: AX0GCFuHzQzF8AX68GwDBFhePF7quh1p9www-VHHK49I3nQ44uIdAWZ_lLdxIa4 Message-ID: Subject: Re: [PATCH v4 1/4] fs: allow cross-FS copy_file_range for memory file with direct I/O To: wangtao Cc: "sumit.semwal@linaro.org" , "christian.koenig@amd.com" , "kraxel@redhat.com" , "vivek.kasireddy@intel.com" , "viro@zeniv.linux.org.uk" , "brauner@kernel.org" , "hughd@google.com" , "akpm@linux-foundation.org" , "benjamin.gaignard@collabora.com" , "Brian.Starkey@arm.com" , "jstultz@google.com" , "tjmercier@google.com" , "jack@suse.cz" , "baolin.wang@linux.alibaba.com" , "linux-media@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , "linaro-mm-sig@lists.linaro.org" , "linux-kernel@vger.kernel.org" , "linux-fsdevel@vger.kernel.org" , "linux-mm@kvack.org" , "wangbintian(BintianWang)" , yipengxiang , liulu 00013167 , hanfeng 00012985 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 7D99240014 X-Stat-Signature: 8srn1b6i89nzyfd834siauynmdjcxx13 X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1748954596-666963 X-HE-Meta: U2FsdGVkX1/H5egGJzDU1PXLwoJaSUztDXQtRdw9rYBXf3ROfSM+a6sFyUY4AlX/H8CNZQW4ba+9e5oDP9IPRHkPBJJiBaPke63kCiLgLkYOAd0NI649olAooA5mg+nnkEwniwSsTKqe+QapKLAzdXsIjB7vMNgJ35xLhsMUiGY9x2uulgbT/0FnwlBdS/Wty7dBS548E6gRAqVMv+8DSuc7sexPnrg25XHjtMuMUxus3OlVX8g25G26EpEeE2eD0YtbMpLKbSLiJIHYuRA1JrWF3o7UBWEuNWMz/0UA3B45BfFDsMjDvEASNpRRLTgI0Gdu9TjnOrb4KEWznLlFUSmqwEmmFmposkZTYYxqomlQW/tRr6RoqaMheje5Poz0jhbtBK9v3BN3SAfv89Hp1UqHqTBw2PmoXEZnRF0jmdnyORWtDmnhTP/LRHG6GVtjmm0hbkqmpGdWbaqb/puQOk5KNtpvv7v2tB1ja+N9SgdsWj5UGRKZ/bkbetMSh3aGnzA1h/Gtcx/dAOGCCAdVafMvMc2LRs0BO9o/cM1IqppQq/T7EHhaa0LR3KaGLWcTW0UAqhnOAOyBnOc3jkvFn4870L+3ASEhVMNZ4OV+Bv0hXqlk4Upcj1S58tSPUqJVKwV2hT1Zvgj9BkojCnKkI6JC6AsSqiEQgiK9WV5eb/Zp14R4Nc+FhhAu6jbYDZ3v3IZxU40dsSd8pIyvdpmLyEuJwntY2zYGssgTUhA+n60QtclXhXIS+r/yUaRndBQ8gSdKbeQujhWGiEt+ukdYqZeIjOu2gd89CMme9v1LSQAl15Ju5fnZdjLuW5hVlymI/DgDfO6vfKgh1SxiUdrNwbS8ZEEuFt8OMwBEQpkApbe1zRNAeeQwlxXEsPKOjn/i6HrI5dQxoyIau5EqpCnXFq3rkrT0NeXYgD8O6H8aC6mySLldF424DVHvpBeplnbJosWqaAiZzqbR4VPHhmj +jl/eiLq gex+IX59xkm5jFrQcATrPohoYKdtQ+BH7ZG36L5/8cSzJgvTMnJ/U2D0oqSyj2/cotNSebdMgW85XqYVpSSnqiM4IpzIFdgyVWzYLZqb7ztUX3GveFxSJ2tj5mRCwUO9vOtkBKVdCDTYqn+ZZ5FBeTFmzmE1LbqKVCQBm/35TmKoR6T9ZyUoQMtHqph3a/Qo+CMerJbhDN6IOGurHCP/4Ti/pv38fwxTJZfLeoo19QxQdK2pappofs+nnqRY7Efxt4QNmmAgsRcCxjEbUy7sVvkk34PJy5NYffLfa/nt98qfH4oLIu7osizoWeIQVOu8wbhGe6tdivfhCB0wMFJpCZrfYg5WXOwHhZHEiS5likKf4Fb8wXFSFgURjm7ebobxVXKVvopcKj3Twy4PyLOWk6VlQH4m/TqEsXvVsnKzOCUfdoWqCimtBYP3dJVIc2b6cGSdLfWyI0VptllfL6T13xfJgzlXHhtcjl+DT2JEZL8qNKE8+28vSXuhT7hkESQDlLJpEAkAFmGaGMS2WA2HiIyPJcZ32s/8BqaVXZpPJocRRMb8NEWyctp2L+owf/hZeVhuSAye4316+dLeGkmBBsMPjDHjR/BxXAlIjiJVbs9PuVGRJb3CaXbildXltp2I4Vb//oZeJOUuVO4U0HxaGsgY8pwo5irss3zflXrG5chtVabPT8tBE4J+lexbzhjCZHKvVU2tBeSbiTQt6o5MJ5BnkAI3MS2LMSCOfUy6gsnQ+RhUddUxNOAzUS+xUUpCQLkuIMCbsJs47k5iOyB5BmV/9Dk6XJwds4lNgdYkuAvGQKRpVC7ofABQeJTephponJcOOd2DVSwt3+dnueLCsBGFE/Z3PQWpESHsdzsC8ZZykLzbTnYB5GCfFQJ75pqse2KCT5gZkTxxcUcGrgRS8klU/E+sJljoGA0yYLzFKDcRWa/h7iFbKwgfkVIyp+qQpy0feLpn4MMZXXNzb9B7UPsBRdOZG q2dwFftb F7tKZ4ojkWsfLcZub4XzKQwO5Xd6FF3mdWh7RwmzYRRRk5YojK5fgvfpRlPeiDj1 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: List-Subscribe: List-Unsubscribe: On Tue, Jun 3, 2025 at 2:38=E2=80=AFPM wangtao wrot= e: > > > > > -----Original Message----- > > From: Amir Goldstein > > Sent: Tuesday, June 3, 2025 6:57 PM > > To: wangtao > > Cc: sumit.semwal@linaro.org; christian.koenig@amd.com; > > kraxel@redhat.com; vivek.kasireddy@intel.com; viro@zeniv.linux.org.uk; > > brauner@kernel.org; hughd@google.com; akpm@linux-foundation.org; > > benjamin.gaignard@collabora.com; Brian.Starkey@arm.com; > > jstultz@google.com; tjmercier@google.com; jack@suse.cz; > > baolin.wang@linux.alibaba.com; linux-media@vger.kernel.org; dri- > > devel@lists.freedesktop.org; linaro-mm-sig@lists.linaro.org; linux- > > kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; linux- > > mm@kvack.org; wangbintian(BintianWang) ; > > yipengxiang ; liulu 00013167 > > ; hanfeng 00012985 > > Subject: Re: [PATCH v4 1/4] fs: allow cross-FS copy_file_range for memo= ry > > file with direct I/O > > > > On Tue, Jun 3, 2025 at 11:53=E2=80=AFAM wangtao = wrote: > > > > > > Memory files can optimize copy performance via copy_file_range callba= cks: > > > -Compared to mmap&read: reduces GUP (get_user_pages) overhead > > > -Compared to sendfile/splice: eliminates one memory copy -Supports > > > dma-buf direct I/O zero-copy implementation > > > > > > Suggested by: Christian K=C3=B6nig Suggest= ed by: > > > Amir Goldstein > > > Signed-off-by: wangtao > > > --- > > > fs/read_write.c | 64 +++++++++++++++++++++++++++++++++++++----- > > ---- > > > include/linux/fs.h | 2 ++ > > > 2 files changed, 54 insertions(+), 12 deletions(-) > > > > > > diff --git a/fs/read_write.c b/fs/read_write.c index > > > bb0ed26a0b3a..ecb4f753c632 100644 > > > --- a/fs/read_write.c > > > +++ b/fs/read_write.c > > > @@ -1469,6 +1469,31 @@ COMPAT_SYSCALL_DEFINE4(sendfile64, int, > > out_fd, > > > int, in_fd, } #endif > > > > > > +static const struct file_operations *memory_copy_file_ops( > > > + struct file *file_in, struct file *file_out) = { > > > + if ((file_in->f_op->fop_flags & FOP_MEMORY_FILE) && > > > + (file_in->f_mode & FMODE_CAN_ODIRECT) && > > > + file_in->f_op->copy_file_range && file_out->f_op->write_i= ter) > > > + return file_in->f_op; > > > + else if ((file_out->f_op->fop_flags & FOP_MEMORY_FILE) && > > > + (file_out->f_mode & FMODE_CAN_ODIRECT) && > > > + file_in->f_op->read_iter && file_out->f_op->copy_fil= e_range) > > > + return file_out->f_op; > > > + else > > > + return NULL; > > > +} > > > + > > > +static int essential_file_rw_checks(struct file *file_in, struct fil= e > > > +*file_out) { > > > + if (!(file_in->f_mode & FMODE_READ) || > > > + !(file_out->f_mode & FMODE_WRITE) || > > > + (file_out->f_flags & O_APPEND)) > > > + return -EBADF; > > > + > > > + return 0; > > > +} > > > + > > > /* > > > * Performs necessary checks before doing a file copy > > > * > > > @@ -1484,9 +1509,16 @@ static int generic_copy_file_checks(struct fil= e > > *file_in, loff_t pos_in, > > > struct inode *inode_out =3D file_inode(file_out); > > > uint64_t count =3D *req_count; > > > loff_t size_in; > > > + bool splice =3D flags & COPY_FILE_SPLICE; > > > + const struct file_operations *mem_fops; > > > int ret; > > > > > > - ret =3D generic_file_rw_checks(file_in, file_out); > > > + /* The dma-buf file is not a regular file. */ > > > + mem_fops =3D memory_copy_file_ops(file_in, file_out); > > > + if (splice || mem_fops =3D=3D NULL) > > > > nit: use !mem_fops please > > > > Considering that the flag COPY_FILE_SPLICE is not allowed from userspac= e > > and is only called by nfsd and ksmbd I think we should assert and deny = the > > combination of mem_fops && splice because it is very much unexpected. > > > > After asserting this, it would be nicer to write as: > > if (mem_fops) > > ret =3D essential_file_rw_checks(file_in, file_out); > > else > > ret =3D generic_file_rw_checks(file_in, file_out); > > > Got it. Thanks. > > > + else > > > + ret =3D essential_file_rw_checks(file_in, file_out); > > > if (ret) > > > return ret; > > > > > > @@ -1500,8 +1532,10 @@ static int generic_copy_file_checks(struct fil= e > > *file_in, loff_t pos_in, > > > * and several different sets of file_operations, but they al= l end up > > > * using the same ->copy_file_range() function pointer. > > > */ > > > - if (flags & COPY_FILE_SPLICE) { > > > + if (splice) { > > > /* cross sb splice is allowed */ > > > + } else if (mem_fops !=3D NULL) { > > > > With the assertion that splice && mem_fops is not allowed if (splice || > > mem_fops) { > > > > would go well together because they both allow cross-fs copy not only c= ross > > sb. > > > Git it. > > > > + /* cross-fs copy is allowed for memory file. */ > > > } else if (file_out->f_op->copy_file_range) { > > > if (file_in->f_op->copy_file_range !=3D > > > file_out->f_op->copy_file_range) @@ -1554,6 > > > +1588,7 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t p= os_in, > > > ssize_t ret; > > > bool splice =3D flags & COPY_FILE_SPLICE; > > > bool samesb =3D file_inode(file_in)->i_sb =3D=3D > > > file_inode(file_out)->i_sb; > > > + const struct file_operations *mem_fops; > > > > > > if (flags & ~COPY_FILE_SPLICE) > > > return -EINVAL; > > > @@ -1574,18 +1609,27 @@ ssize_t vfs_copy_file_range(struct file *file= _in, > > loff_t pos_in, > > > if (len =3D=3D 0) > > > return 0; > > > > > > + if (splice) > > > + goto do_splice; > > > + > > > file_start_write(file_out); > > > > > > > goto do_splice needs to be after file_start_write > > > > Please wait for feedback from vfs maintainers before posting another > > version addressing my review comments. > > > Are you asking whether both the goto do_splice and the do_splice label sh= ould > be enclosed between file_start_write and file_end_write? No I was just wrong please ignore this comment. Thanks, Amir.