From: Shiyang Ruan <ruansy.fnst@fujitsu.com> To: <linux-kernel@vger.kernel.org>, <linux-xfs@vger.kernel.org>, <linux-nvdimm@lists.01.org>, <linux-fsdevel@vger.kernel.org> Cc: <darrick.wong@oracle.com>, <dan.j.williams@intel.com>, <willy@infradead.org>, <viro@zeniv.linux.org.uk>, <david@fromorbit.com>, <hch@lst.de>, <rgoldwyn@suse.de>, "Darrick J . Wong" <djwong@kernel.org> Subject: [PATCH v5 4/7] iomap: Introduce iomap_apply2() for operations on two files Date: Tue, 11 May 2021 11:09:30 +0800 [thread overview] Message-ID: <20210511030933.3080921-5-ruansy.fnst@fujitsu.com> (raw) In-Reply-To: <20210511030933.3080921-1-ruansy.fnst@fujitsu.com> 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> Reviewed-by: Darrick J. Wong <djwong@kernel.org> --- fs/iomap/apply.c | 52 +++++++++++++++++++++++++++++++++++++++++++ include/linux/iomap.h | 7 +++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c index 26ab6563181f..0493da5286ad 100644 --- a/fs/iomap/apply.c +++ b/fs/iomap/apply.c @@ -97,3 +97,55 @@ 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; + 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_src; + 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); +out: + if (written) + return written; + return ret ?: ret2; +} diff --git a/include/linux/iomap.h b/include/linux/iomap.h index c87d0cb0de6d..95562f863ad0 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -150,10 +150,15 @@ struct iomap_ops { */ typedef loff_t (*iomap_actor_t)(struct inode *inode, loff_t pos, loff_t len, void *data, struct iomap *iomap, struct iomap *srcmap); - +typedef loff_t (*iomap_actor2_t)(struct inode *ino1, loff_t pos1, + struct inode *ino2, loff_t pos2, loff_t len, void *data, + struct iomap *smap, struct iomap *dmap); loff_t iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags, const struct iomap_ops *ops, void *data, iomap_actor_t actor); +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); ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from, const struct iomap_ops *ops); -- 2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: Shiyang Ruan <ruansy.fnst@fujitsu.com> To: <linux-kernel@vger.kernel.org>, <linux-xfs@vger.kernel.org>, <linux-nvdimm@lists.01.org>, <linux-fsdevel@vger.kernel.org> Cc: darrick.wong@oracle.com, willy@infradead.org, viro@zeniv.linux.org.uk, david@fromorbit.com, hch@lst.de, rgoldwyn@suse.de, "Darrick J . Wong" <djwong@kernel.org> Subject: [PATCH v5 4/7] iomap: Introduce iomap_apply2() for operations on two files Date: Tue, 11 May 2021 11:09:30 +0800 [thread overview] Message-ID: <20210511030933.3080921-5-ruansy.fnst@fujitsu.com> (raw) In-Reply-To: <20210511030933.3080921-1-ruansy.fnst@fujitsu.com> 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> Reviewed-by: Darrick J. Wong <djwong@kernel.org> --- fs/iomap/apply.c | 52 +++++++++++++++++++++++++++++++++++++++++++ include/linux/iomap.h | 7 +++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c index 26ab6563181f..0493da5286ad 100644 --- a/fs/iomap/apply.c +++ b/fs/iomap/apply.c @@ -97,3 +97,55 @@ 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; + 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_src; + 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); +out: + if (written) + return written; + return ret ?: ret2; +} diff --git a/include/linux/iomap.h b/include/linux/iomap.h index c87d0cb0de6d..95562f863ad0 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -150,10 +150,15 @@ struct iomap_ops { */ typedef loff_t (*iomap_actor_t)(struct inode *inode, loff_t pos, loff_t len, void *data, struct iomap *iomap, struct iomap *srcmap); - +typedef loff_t (*iomap_actor2_t)(struct inode *ino1, loff_t pos1, + struct inode *ino2, loff_t pos2, loff_t len, void *data, + struct iomap *smap, struct iomap *dmap); loff_t iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags, const struct iomap_ops *ops, void *data, iomap_actor_t actor); +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); ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from, const struct iomap_ops *ops); -- 2.31.1 _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
next prev parent reply other threads:[~2021-05-11 3:10 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-11 3:09 [PATCH v5 0/7] fsdax,xfs: Add reflink&dedupe support for fsdax Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-11 3:09 ` [PATCH v5 1/7] fsdax: Introduce dax_iomap_cow_copy() Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:08 ` Darrick J. Wong 2021-05-12 1:08 ` Darrick J. Wong 2021-05-13 7:57 ` ruansy.fnst 2021-05-13 7:57 ` ruansy.fnst 2021-05-13 15:02 ` Darrick J. Wong 2021-05-13 15:02 ` Darrick J. Wong 2021-05-11 3:09 ` [PATCH v5 2/7] fsdax: Replace mmap entry in case of CoW Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:09 ` Darrick J. Wong 2021-05-12 1:09 ` Darrick J. Wong 2021-05-11 3:09 ` [PATCH v5 3/7] fsdax: Add dax_iomap_cow_copy() for dax_iomap_zero Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:17 ` Darrick J. Wong 2021-05-12 1:17 ` Darrick J. Wong 2021-05-12 1:37 ` ruansy.fnst 2021-05-12 1:37 ` ruansy.fnst 2021-05-25 22:17 ` Darrick J. Wong 2021-05-12 2:27 ` Mika Penttilä 2021-05-12 2:27 ` Mika Penttilä 2021-05-13 7:48 ` ruansy.fnst 2021-05-13 7:48 ` ruansy.fnst 2021-05-11 3:09 ` Shiyang Ruan [this message] 2021-05-11 3:09 ` [PATCH v5 4/7] iomap: Introduce iomap_apply2() for operations on two files Shiyang Ruan 2021-05-11 3:09 ` [PATCH v5 5/7] fsdax: Dedup file range to use a compare function Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:23 ` Darrick J. Wong 2021-05-12 1:23 ` Darrick J. Wong 2021-05-14 8:35 ` ruansy.fnst 2021-05-14 8:35 ` ruansy.fnst 2021-05-14 16:03 ` Darrick J. Wong 2021-05-14 16:03 ` Darrick J. Wong 2021-05-11 3:09 ` [PATCH v5 6/7] fs/xfs: Handle CoW for fsdax write() path Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:30 ` Darrick J. Wong 2021-05-12 1:30 ` Darrick J. Wong 2021-05-11 3:09 ` [PATCH v5 7/7] fs/xfs: Add dax dedupe support Shiyang Ruan 2021-05-11 3:09 ` Shiyang Ruan 2021-05-12 1:04 ` Darrick J. Wong 2021-05-12 1:04 ` Darrick J. Wong 2021-05-12 1:26 ` ruansy.fnst 2021-05-12 1:26 ` ruansy.fnst 2021-05-11 3:57 ` [PATCH v5 0/7] fsdax,xfs: Add reflink&dedupe support for fsdax Darrick J. Wong 2021-05-11 3:57 ` Darrick J. Wong 2021-05-11 5:53 ` ruansy.fnst 2021-05-11 5:53 ` 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=20210511030933.3080921-5-ruansy.fnst@fujitsu.com \ --to=ruansy.fnst@fujitsu.com \ --cc=dan.j.williams@intel.com \ --cc=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=djwong@kernel.org \ --cc=hch@lst.de \ --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=rgoldwyn@suse.de \ --cc=viro@zeniv.linux.org.uk \ --cc=willy@infradead.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.