public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: linux-fsdevel@vger.kernel.org
Cc: linux-xfs@vger.kernel.org, Christoph Hellwig <hch@infradead.org>,
	"Darrick J . Wong" <djwong@kernel.org>
Subject: [PATCH 07/10] dax: advance the iomap_iter on dedupe range
Date: Wed, 12 Feb 2025 08:57:09 -0500	[thread overview]
Message-ID: <20250212135712.506987-8-bfoster@redhat.com> (raw)
In-Reply-To: <20250212135712.506987-1-bfoster@redhat.com>

Advance the iter on successful dedupe. Dedupe range uses two iters
and iterates so long as both have outstanding work, so
correspondingly this needs to advance both on each iteration. Since
dax_range_compare_iter() now returns status instead of a byte count,
update the variable name in the caller as well.

Signed-off-by: Brian Foster <bfoster@redhat.com>
---
 fs/dax.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/fs/dax.c b/fs/dax.c
index d0430ded4b83..3de9120edf32 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -2006,12 +2006,13 @@ vm_fault_t dax_finish_sync_fault(struct vm_fault *vmf, unsigned int order,
 }
 EXPORT_SYMBOL_GPL(dax_finish_sync_fault);
 
-static loff_t dax_range_compare_iter(struct iomap_iter *it_src,
+static int dax_range_compare_iter(struct iomap_iter *it_src,
 		struct iomap_iter *it_dest, u64 len, bool *same)
 {
 	const struct iomap *smap = &it_src->iomap;
 	const struct iomap *dmap = &it_dest->iomap;
 	loff_t pos1 = it_src->pos, pos2 = it_dest->pos;
+	u64 dest_len;
 	void *saddr, *daddr;
 	int id, ret;
 
@@ -2019,7 +2020,7 @@ static loff_t dax_range_compare_iter(struct iomap_iter *it_src,
 
 	if (smap->type == IOMAP_HOLE && dmap->type == IOMAP_HOLE) {
 		*same = true;
-		return len;
+		goto advance;
 	}
 
 	if (smap->type == IOMAP_HOLE || dmap->type == IOMAP_HOLE) {
@@ -2042,7 +2043,13 @@ static loff_t dax_range_compare_iter(struct iomap_iter *it_src,
 	if (!*same)
 		len = 0;
 	dax_read_unlock(id);
-	return len;
+
+advance:
+	dest_len = len;
+	ret = iomap_iter_advance(it_src, &len);
+	if (!ret)
+		ret = iomap_iter_advance(it_dest, &dest_len);
+	return ret;
 
 out_unlock:
 	dax_read_unlock(id);
@@ -2065,15 +2072,15 @@ int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
 		.len		= len,
 		.flags		= IOMAP_DAX,
 	};
-	int ret, compared = 0;
+	int ret, status;
 
 	while ((ret = iomap_iter(&src_iter, ops)) > 0 &&
 	       (ret = iomap_iter(&dst_iter, ops)) > 0) {
-		compared = dax_range_compare_iter(&src_iter, &dst_iter,
+		status = dax_range_compare_iter(&src_iter, &dst_iter,
 				min(src_iter.len, dst_iter.len), same);
-		if (compared < 0)
+		if (status < 0)
 			return ret;
-		src_iter.processed = dst_iter.processed = compared;
+		src_iter.processed = dst_iter.processed = status;
 	}
 	return ret;
 }
-- 
2.48.1


  parent reply	other threads:[~2025-02-12 13:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-12 13:57 [PATCH 00/10] iomap: incremental advance conversion -- phase 2 Brian Foster
2025-02-12 13:57 ` [PATCH 01/10] iomap: advance the iter directly on buffered read Brian Foster
2025-02-13  6:50   ` Christoph Hellwig
2025-02-13 15:24     ` Brian Foster
2025-02-12 13:57 ` [PATCH 02/10] iomap: advance the iter on direct I/O Brian Foster
2025-02-13  6:51   ` Christoph Hellwig
2025-02-13 15:25     ` Brian Foster
2025-02-12 13:57 ` [PATCH 03/10] iomap: convert misc simple ops to incremental advance Brian Foster
2025-02-13  6:54   ` Christoph Hellwig
2025-02-13 15:26     ` Brian Foster
2025-02-12 13:57 ` [PATCH 04/10] dax: advance the iomap_iter in the read/write path Brian Foster
2025-02-13  6:55   ` Christoph Hellwig
2025-02-13 15:27     ` Brian Foster
2025-02-12 13:57 ` [PATCH 05/10] dax: advance the iomap_iter on zero range Brian Foster
2025-02-13  6:57   ` Christoph Hellwig
2025-02-13 15:27     ` Brian Foster
2025-02-12 13:57 ` [PATCH 06/10] dax: advance the iomap_iter on unshare range Brian Foster
2025-02-12 13:57 ` Brian Foster [this message]
2025-02-12 13:57 ` [PATCH 08/10] dax: advance the iomap_iter on pte and pmd faults Brian Foster
2025-02-12 13:57 ` [PATCH 09/10] iomap: remove unnecessary advance from iomap_iter() Brian Foster
2025-02-13  6:59   ` Christoph Hellwig
2025-02-13 15:27     ` Brian Foster
2025-02-12 13:57 ` [PATCH 10/10] iomap: rename iomap_iter processed field to status Brian Foster
2025-02-13  7:00   ` Christoph Hellwig

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=20250212135712.506987-8-bfoster@redhat.com \
    --to=bfoster@redhat.com \
    --cc=djwong@kernel.org \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox