]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iomap: simplify iomap_iter_advance()
authorJoanne Koong <joannelkoong@gmail.com>
Fri, 19 Sep 2025 21:42:50 +0000 (14:42 -0700)
committerChristian Brauner <brauner@kernel.org>
Mon, 20 Oct 2025 18:21:25 +0000 (20:21 +0200)
Most callers of iomap_iter_advance() do not need the remaining length
returned. Get rid of the extra iomap_length() call that
iomap_iter_advance() does.

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/dax.c
fs/iomap/buffered-io.c
fs/iomap/direct-io.c
fs/iomap/iter.c
fs/iomap/seek.c
include/linux/iomap.h

index 89f071ba7b1020aad51e6402ab60787c0963e205..c299fcb5618d3acba45a0b67b629ecf6561a8ba8 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1507,7 +1507,7 @@ static int dax_zero_iter(struct iomap_iter *iter, bool *did_zero)
 
        /* already zeroed?  we're done. */
        if (srcmap->type == IOMAP_HOLE || srcmap->type == IOMAP_UNWRITTEN)
-               return iomap_iter_advance(iter, &length);
+               return iomap_iter_advance(iter, length);
 
        /*
         * invalidate the pages whose sharing state is to be changed
@@ -1536,10 +1536,10 @@ static int dax_zero_iter(struct iomap_iter *iter, bool *did_zero)
                if (ret < 0)
                        return ret;
 
-               ret = iomap_iter_advance(iter, &length);
+               ret = iomap_iter_advance(iter, length);
                if (ret)
                        return ret;
-       } while (length > 0);
+       } while ((length = iomap_length(iter)) > 0);
 
        if (did_zero)
                *did_zero = true;
@@ -1597,7 +1597,7 @@ static int dax_iomap_iter(struct iomap_iter *iomi, struct iov_iter *iter)
 
                if (iomap->type == IOMAP_HOLE || iomap->type == IOMAP_UNWRITTEN) {
                        done = iov_iter_zero(min(length, end - pos), iter);
-                       return iomap_iter_advance(iomi, &done);
+                       return iomap_iter_advance(iomi, done);
                }
        }
 
@@ -1681,12 +1681,12 @@ static int dax_iomap_iter(struct iomap_iter *iomi, struct iov_iter *iter)
                        xfer = dax_copy_to_iter(dax_dev, pgoff, kaddr,
                                        map_len, iter);
 
-               length = xfer;
-               ret = iomap_iter_advance(iomi, &length);
+               ret = iomap_iter_advance(iomi, xfer);
                if (!ret && xfer == 0)
                        ret = -EFAULT;
                if (xfer < map_len)
                        break;
+               length = iomap_length(iomi);
        }
        dax_read_unlock(id);
 
@@ -1919,10 +1919,8 @@ static vm_fault_t dax_iomap_pte_fault(struct vm_fault *vmf, unsigned long *pfnp,
                        ret |= VM_FAULT_MAJOR;
                }
 
-               if (!(ret & VM_FAULT_ERROR)) {
-                       u64 length = PAGE_SIZE;
-                       iter.status = iomap_iter_advance(&iter, &length);
-               }
+               if (!(ret & VM_FAULT_ERROR))
+                       iter.status = iomap_iter_advance(&iter, PAGE_SIZE);
        }
 
        if (iomap_errp)
@@ -2034,10 +2032,8 @@ static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, unsigned long *pfnp,
                        continue; /* actually breaks out of the loop */
 
                ret = dax_fault_iter(vmf, &iter, pfnp, &xas, &entry, true);
-               if (ret != VM_FAULT_FALLBACK) {
-                       u64 length = PMD_SIZE;
-                       iter.status = iomap_iter_advance(&iter, &length);
-               }
+               if (ret != VM_FAULT_FALLBACK)
+                       iter.status = iomap_iter_advance(&iter, PMD_SIZE);
        }
 
 unlock_entry:
@@ -2163,7 +2159,6 @@ static int dax_range_compare_iter(struct iomap_iter *it_src,
        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;
 
@@ -2196,10 +2191,9 @@ static int dax_range_compare_iter(struct iomap_iter *it_src,
        dax_read_unlock(id);
 
 advance:
-       dest_len = len;
-       ret = iomap_iter_advance(it_src, &len);
+       ret = iomap_iter_advance(it_src, len);
        if (!ret)
-               ret = iomap_iter_advance(it_dest, &dest_len);
+               ret = iomap_iter_advance(it_dest, len);
        return ret;
 
 out_unlock:
index 8b847a1e27f13eba67eb306a1d648ea2e19e587b..6cc2ee44bbca3eb6368ed28dfb79ae940806d5cc 100644 (file)
@@ -376,7 +376,7 @@ static int iomap_readpage_iter(struct iomap_iter *iter,
                ret = iomap_read_inline_data(iter, folio);
                if (ret)
                        return ret;
-               return iomap_iter_advance(iter, &length);
+               return iomap_iter_advance(iter, length);
        }
 
        /* zero post-eof blocks as the page may be mapped */
@@ -437,7 +437,7 @@ done:
         * iteration.
         */
        length = pos - iter->pos + plen;
-       return iomap_iter_advance(iter, &length);
+       return iomap_iter_advance(iter, length);
 }
 
 static int iomap_read_folio_iter(struct iomap_iter *iter,
@@ -1041,7 +1041,7 @@ retry:
                        }
                } else {
                        total_written += written;
-                       iomap_iter_advance(iter, &written);
+                       iomap_iter_advance(iter, written);
                }
        } while (iov_iter_count(i) && iomap_length(iter));
 
@@ -1310,7 +1310,7 @@ static int iomap_unshare_iter(struct iomap_iter *iter,
        int status;
 
        if (!iomap_want_unshare_iter(iter))
-               return iomap_iter_advance(iter, &bytes);
+               return iomap_iter_advance(iter, bytes);
 
        do {
                struct folio *folio;
@@ -1334,10 +1334,10 @@ static int iomap_unshare_iter(struct iomap_iter *iter,
 
                balance_dirty_pages_ratelimited(iter->inode->i_mapping);
 
-               status = iomap_iter_advance(iter, &bytes);
+               status = iomap_iter_advance(iter, bytes);
                if (status)
                        break;
-       } while (bytes > 0);
+       } while ((bytes = iomap_length(iter)) > 0);
 
        return status;
 }
@@ -1412,10 +1412,10 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero,
                if (WARN_ON_ONCE(!ret))
                        return -EIO;
 
-               status = iomap_iter_advance(iter, &bytes);
+               status = iomap_iter_advance(iter, bytes);
                if (status)
                        break;
-       } while (bytes > 0);
+       } while ((bytes = iomap_length(iter)) > 0);
 
        if (did_zero)
                *did_zero = true;
@@ -1526,7 +1526,7 @@ static int iomap_folio_mkwrite_iter(struct iomap_iter *iter,
                folio_mark_dirty(folio);
        }
 
-       return iomap_iter_advance(iter, &length);
+       return iomap_iter_advance(iter, length);
 }
 
 vm_fault_t iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops,
index 5d5d63efbd57678f29eb309bd87fbd83633656cc..e9e5f07031609e4fe9f8211d22fd38a12347655d 100644 (file)
@@ -496,7 +496,7 @@ out:
        /* Undo iter limitation to current extent */
        iov_iter_reexpand(dio->submit.iter, orig_count - copied);
        if (copied)
-               return iomap_iter_advance(iter, &copied);
+               return iomap_iter_advance(iter, copied);
        return ret;
 }
 
@@ -507,7 +507,7 @@ static int iomap_dio_hole_iter(struct iomap_iter *iter, struct iomap_dio *dio)
        dio->size += length;
        if (!length)
                return -EFAULT;
-       return iomap_iter_advance(iter, &length);
+       return iomap_iter_advance(iter, length);
 }
 
 static int iomap_dio_inline_iter(struct iomap_iter *iomi, struct iomap_dio *dio)
@@ -542,7 +542,7 @@ static int iomap_dio_inline_iter(struct iomap_iter *iomi, struct iomap_dio *dio)
        dio->size += copied;
        if (!copied)
                return -EFAULT;
-       return iomap_iter_advance(iomi, &copied);
+       return iomap_iter_advance(iomi, copied);
 }
 
 static int iomap_dio_iter(struct iomap_iter *iter, struct iomap_dio *dio)
index cef77ca0c20bcc1e9b0376636445a9d17f83637b..91d2024e00da4e0d440f82426c1ae1718c104963 100644 (file)
@@ -13,17 +13,13 @@ static inline void iomap_iter_reset_iomap(struct iomap_iter *iter)
        memset(&iter->srcmap, 0, sizeof(iter->srcmap));
 }
 
-/*
- * Advance the current iterator position and output the length remaining for the
- * current mapping.
- */
-int iomap_iter_advance(struct iomap_iter *iter, u64 *count)
+/* Advance the current iterator position and decrement the remaining length */
+int iomap_iter_advance(struct iomap_iter *iter, u64 count)
 {
-       if (WARN_ON_ONCE(*count > iomap_length(iter)))
+       if (WARN_ON_ONCE(count > iomap_length(iter)))
                return -EIO;
-       iter->pos += *count;
-       iter->len -= *count;
-       *count = iomap_length(iter);
+       iter->pos += count;
+       iter->len -= count;
        return 0;
 }
 
index 56db2dd4b10ddbc760502d56b6fc893593b3a473..6cbc587c93dab27ba0d6db713d7b986c4cd35c99 100644 (file)
@@ -16,13 +16,13 @@ static int iomap_seek_hole_iter(struct iomap_iter *iter,
                *hole_pos = mapping_seek_hole_data(iter->inode->i_mapping,
                                iter->pos, iter->pos + length, SEEK_HOLE);
                if (*hole_pos == iter->pos + length)
-                       return iomap_iter_advance(iter, &length);
+                       return iomap_iter_advance(iter, length);
                return 0;
        case IOMAP_HOLE:
                *hole_pos = iter->pos;
                return 0;
        default:
-               return iomap_iter_advance(iter, &length);
+               return iomap_iter_advance(iter, length);
        }
 }
 
@@ -59,12 +59,12 @@ static int iomap_seek_data_iter(struct iomap_iter *iter,
 
        switch (iter->iomap.type) {
        case IOMAP_HOLE:
-               return iomap_iter_advance(iter, &length);
+               return iomap_iter_advance(iter, length);
        case IOMAP_UNWRITTEN:
                *hole_pos = mapping_seek_hole_data(iter->inode->i_mapping,
                                iter->pos, iter->pos + length, SEEK_DATA);
                if (*hole_pos < 0)
-                       return iomap_iter_advance(iter, &length);
+                       return iomap_iter_advance(iter, length);
                return 0;
        default:
                *hole_pos = iter->pos;
index 73dceabc21c8c7be0e01ac7ce25851dfdbb4bde3..4469b2318b08e58b6bd535f315f499a002495333 100644 (file)
@@ -245,7 +245,7 @@ struct iomap_iter {
 };
 
 int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops);
-int iomap_iter_advance(struct iomap_iter *iter, u64 *count);
+int iomap_iter_advance(struct iomap_iter *iter, u64 count);
 
 /**
  * iomap_length_trim - trimmed length of the current iomap iteration
@@ -282,9 +282,7 @@ static inline u64 iomap_length(const struct iomap_iter *iter)
  */
 static inline int iomap_iter_advance_full(struct iomap_iter *iter)
 {
-       u64 length = iomap_length(iter);
-
-       return iomap_iter_advance(iter, &length);
+       return iomap_iter_advance(iter, iomap_length(iter));
 }
 
 /**