From: Ritesh Harjani <ritesh.list@gmail.com> To: Shiyang Ruan <ruansy.fnst@fujitsu.com> Cc: jack@suse.cz, darrick.wong@oracle.com, linux-nvdimm@lists.01.org, david@fromorbit.com, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, ocfs2-devel@oss.oracle.com, viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, dan.j.williams@intel.com, linux-btrfs@vger.kernel.org Subject: Re: [Ocfs2-devel] [PATCH v3 07/10] iomap: Introduce iomap_apply2() for operations on two files Date: Thu, 1 Apr 2021 12:42:30 +0530 [thread overview] Message-ID: <20210401071230.wbrawpzk3opzmntv@riteshh-domain> (raw) In-Reply-To: <20210319015237.993880-8-ruansy.fnst@fujitsu.com> On 21/03/19 09:52AM, Shiyang Ruan wrote: > Some operations, such as comparing a range of data in two files under > fsdax mode, requires nested iomap_open()/iomap_end() on two file. Thus, > we introduce iomap_apply2() to accept arguments from two files and > iomap_actor2_t for actions on two files. > > Signed-off-by: Shiyang Ruan <ruansy.fnst@fujitsu.com> > --- > fs/iomap/apply.c | 56 +++++++++++++++++++++++++++++++++++++++++++ > include/linux/iomap.h | 7 +++++- > 2 files changed, 62 insertions(+), 1 deletion(-) > > diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c > index 26ab6563181f..fbc38ce3d5b6 100644 > --- a/fs/iomap/apply.c > +++ b/fs/iomap/apply.c > @@ -97,3 +97,59 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags, > > return written ? written : ret; > } > + > +loff_t > +iomap_apply2(struct inode *ino1, loff_t pos1, struct inode *ino2, loff_t pos2, > + loff_t length, unsigned int flags, const struct iomap_ops *ops, > + void *data, iomap_actor2_t actor) > +{ > + struct iomap smap = { .type = IOMAP_HOLE }; > + struct iomap dmap = { .type = IOMAP_HOLE }; > + loff_t written = 0, ret, ret2 = 0; > + loff_t len1 = length, len2, min_len; > + > + ret = ops->iomap_begin(ino1, pos1, len1, flags, &smap, NULL); > + if (ret) > + goto out_src; if above call fails we need not call ->iomap_end() on smap. > + if (WARN_ON(smap.offset > pos1)) { > + written = -EIO; > + goto out_src; > + } > + if (WARN_ON(smap.length == 0)) { > + written = -EIO; > + goto out_src; > + } > + len2 = min_t(loff_t, len1, smap.length); > + > + ret = ops->iomap_begin(ino2, pos2, len2, flags, &dmap, NULL); > + if (ret) > + goto out_dest; ditto > + if (WARN_ON(dmap.offset > pos2)) { > + written = -EIO; > + goto out_dest; > + } > + if (WARN_ON(dmap.length == 0)) { > + written = -EIO; > + goto out_dest; > + } > + min_len = min_t(loff_t, len2, dmap.length); > + > + written = actor(ino1, pos1, ino2, pos2, min_len, data, &smap, &dmap); > + > +out_dest: > + if (ops->iomap_end) > + ret2 = ops->iomap_end(ino2, pos2, len2, > + written > 0 ? written : 0, flags, &dmap); > +out_src: > + if (ops->iomap_end) > + ret = ops->iomap_end(ino1, pos1, len1, > + written > 0 ? written : 0, flags, &smap); > + I guess, this maynot be a problem, but I still think we should be consistent w.r.t len argument we are passing in ->iomap_end() for both type of iomap_apply* family of functions. IIUC, we used to call ->iomap_end() with the length argument filled by the filesystem from ->iomap_begin() call. whereas above breaks that behavior. Although I don't think this is FATAL, but still it is better to be consistent with the APIs. Thoughts? > + if (ret) > + return written ? written : ret; > + > + if (ret2) > + return written ? written : ret2; > + > + return written; > +} if (written) return written; return ret ? ret : ret2; Is above a simpler version? -ritesh _______________________________________________ Ocfs2-devel mailing list Ocfs2-devel@oss.oracle.com https://oss.oracle.com/mailman/listinfo/ocfs2-devel
next prev parent reply other threads:[~2021-04-12 15:20 UTC|newest] Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-19 1:52 [Ocfs2-devel] [PATCH v3 00/10] fsdax, xfs: Add reflink&dedupe support for fsdax Shiyang Ruan 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 01/10] fsdax: Factor helpers to simplify dax fault code Shiyang Ruan 2021-03-23 15:33 ` Ritesh Harjani 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 02/10] fsdax: Factor helper: dax_fault_actor() Shiyang Ruan 2021-03-23 15:48 ` Ritesh Harjani 2021-03-31 3:57 ` ruansy.fnst 2021-04-02 7:47 ` Christoph Hellwig 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 03/10] fsdax: Output address in dax_iomap_pfn() and rename it Shiyang Ruan 2021-03-23 15:54 ` Ritesh Harjani 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 04/10] fsdax: Introduce dax_iomap_cow_copy() Shiyang Ruan 2021-03-23 16:08 ` Ritesh Harjani 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 05/10] fsdax: Replace mmap entry in case of CoW Shiyang Ruan 2021-04-01 6:39 ` Ritesh Harjani 2021-04-01 7:03 ` ruansy.fnst 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 06/10] fsdax: Add dax_iomap_cow_copy() for dax_iomap_zero Shiyang Ruan 2021-04-01 6:45 ` Ritesh Harjani 2021-04-01 7:00 ` ruansy.fnst 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 07/10] iomap: Introduce iomap_apply2() for operations on two files Shiyang Ruan 2021-04-01 7:12 ` Ritesh Harjani [this message] 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 08/10] fsdax: Dedup file range to use a compare function Shiyang Ruan 2021-04-01 11:11 ` Ritesh Harjani 2021-04-08 3:21 ` ruansy.fnst 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 09/10] fs/xfs: Handle CoW for fsdax write() path Shiyang Ruan 2021-03-19 1:52 ` [Ocfs2-devel] [PATCH v3 10/10] fs/xfs: Add dedupe support for fsdax Shiyang Ruan 2021-03-23 15:27 ` [Ocfs2-devel] [PATCH v3 00/10] fsdax, xfs: Add reflink&dedupe " Ritesh Harjani 2021-04-02 7:49 ` Christoph Hellwig 2021-04-02 8:18 ` ruansy.fnst
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210401071230.wbrawpzk3opzmntv@riteshh-domain \ --to=ritesh.list@gmail.com \ --cc=dan.j.williams@intel.com \ --cc=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=jack@suse.cz \ --cc=linux-btrfs@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-xfs@vger.kernel.org \ --cc=ocfs2-devel@oss.oracle.com \ --cc=ruansy.fnst@fujitsu.com \ --cc=viro@zeniv.linux.org.uk \ --subject='Re: [Ocfs2-devel] [PATCH v3 07/10] iomap: Introduce iomap_apply2() for operations on two files' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).