On Wed, Mar 22, 2023 at 07:25:58AM +0000, Shiyang Ruan wrote: > In an dedupe corporation iter loop, the length of iomap_iter decreases > because it implies the remaining length after each iteration. The > compare function should use the min length of the current iters, not the > total length. > > Fixes: 0e79e3736d54 ("fsdax: dedupe: iter two files at the same time") > Signed-off-by: Shiyang Ruan <ruansy.fnst@xxxxxxxxxxx> Makese sense, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/dax.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 3e457a16c7d1..9800b93ee14d 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -2022,8 +2022,8 @@ int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff, > > while ((ret = iomap_iter(&src_iter, ops)) > 0 && > (ret = iomap_iter(&dst_iter, ops)) > 0) { > - compared = dax_range_compare_iter(&src_iter, &dst_iter, len, > - same); > + compared = dax_range_compare_iter(&src_iter, &dst_iter, > + min(src_iter.len, dst_iter.len), same); > if (compared < 0) > return ret; > src_iter.processed = dst_iter.processed = compared; > -- > 2.39.2 >