fsdax: dedupe: iter two files at the same time
[linux-2.6-microblaze.git] / fs / dax.c
index fa547ce..8fb928c 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1965,15 +1965,15 @@ int dax_dedupe_file_range_compare(struct inode *src, loff_t srcoff,
                .len            = len,
                .flags          = IOMAP_DAX,
        };
-       int ret;
+       int ret, compared = 0;
 
-       while ((ret = iomap_iter(&src_iter, ops)) > 0) {
-               while ((ret = iomap_iter(&dst_iter, ops)) > 0) {
-                       dst_iter.processed = dax_range_compare_iter(&src_iter,
-                                               &dst_iter, len, same);
-               }
-               if (ret <= 0)
-                       src_iter.processed = ret;
+       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);
+               if (compared < 0)
+                       return ret;
+               src_iter.processed = dst_iter.processed = compared;
        }
        return ret;
 }