From: Greg Kroah-Hartman Date: Thu, 30 Jul 2026 13:22:58 +0000 (+0200) Subject: drop some 6.18 patches X-Git-Tag: v6.6.148~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dadc865b5525a421c1b32f5a52d293a4f73357e5;p=thirdparty%2Fkernel%2Fstable-queue.git drop some 6.18 patches --- diff --git a/queue-6.18/filemap-add-helper-to-look-up-dirty-folios-in-a-rang.patch b/queue-6.18/filemap-add-helper-to-look-up-dirty-folios-in-a-rang.patch deleted file mode 100644 index 872fd03eae..0000000000 --- a/queue-6.18/filemap-add-helper-to-look-up-dirty-folios-in-a-rang.patch +++ /dev/null @@ -1,116 +0,0 @@ -From aec6e23a1a570aabdd254804b6985f1679aff1bf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 3 Oct 2025 09:46:35 -0400 -Subject: filemap: add helper to look up dirty folios in a range - -From: Brian Foster - -[ Upstream commit f8d98072feee32722086ddae4f288b6c45ae4330 ] - -Add a new filemap_get_folios_dirty() helper to look up existing dirty -folios in a range and add them to a folio_batch. This is to support -optimization of certain iomap operations that only care about dirty -folios in a target range. For example, zero range only zeroes the subset -of dirty pages over unwritten mappings, seek hole/data may use similar -logic in the future, etc. - -Note that the helper is intended for use under internal fs locks. -Therefore it trylocks folios in order to filter out clean folios. -This loosely follows the logic from filemap_range_has_writeback(). - -Signed-off-by: Brian Foster -Reviewed-by: Christoph Hellwig -Reviewed-by: Darrick J. Wong -Signed-off-by: Christian Brauner -Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()") -Signed-off-by: Sasha Levin ---- - include/linux/pagemap.h | 2 ++ - mm/filemap.c | 58 +++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 60 insertions(+) - -diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h -index 09b581c1d878d3..7274a86b487170 100644 ---- a/include/linux/pagemap.h -+++ b/include/linux/pagemap.h -@@ -977,6 +977,8 @@ unsigned filemap_get_folios_contig(struct address_space *mapping, - pgoff_t *start, pgoff_t end, struct folio_batch *fbatch); - unsigned filemap_get_folios_tag(struct address_space *mapping, pgoff_t *start, - pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch); -+unsigned filemap_get_folios_dirty(struct address_space *mapping, -+ pgoff_t *start, pgoff_t end, struct folio_batch *fbatch); - - struct folio *read_cache_folio(struct address_space *, pgoff_t index, - filler_t *filler, struct file *file); -diff --git a/mm/filemap.c b/mm/filemap.c -index 7c26e3735f1bb4..7c599eedf4da6c 100644 ---- a/mm/filemap.c -+++ b/mm/filemap.c -@@ -2372,6 +2372,64 @@ unsigned filemap_get_folios_tag(struct address_space *mapping, pgoff_t *start, - } - EXPORT_SYMBOL(filemap_get_folios_tag); - -+/** -+ * filemap_get_folios_dirty - Get a batch of dirty folios -+ * @mapping: The address_space to search -+ * @start: The starting folio index -+ * @end: The final folio index (inclusive) -+ * @fbatch: The batch to fill -+ * -+ * filemap_get_folios_dirty() works exactly like filemap_get_folios(), except -+ * the returned folios are presumed to be dirty or undergoing writeback. Dirty -+ * state is presumed because we don't block on folio lock nor want to miss -+ * folios. Callers that need to can recheck state upon locking the folio. -+ * -+ * This may not return all dirty folios if the batch gets filled up. -+ * -+ * Return: The number of folios found. -+ * Also update @start to be positioned for traversal of the next folio. -+ */ -+unsigned filemap_get_folios_dirty(struct address_space *mapping, pgoff_t *start, -+ pgoff_t end, struct folio_batch *fbatch) -+{ -+ XA_STATE(xas, &mapping->i_pages, *start); -+ struct folio *folio; -+ -+ rcu_read_lock(); -+ while ((folio = find_get_entry(&xas, end, XA_PRESENT)) != NULL) { -+ if (xa_is_value(folio)) -+ continue; -+ if (folio_trylock(folio)) { -+ bool clean = !folio_test_dirty(folio) && -+ !folio_test_writeback(folio); -+ folio_unlock(folio); -+ if (clean) { -+ folio_put(folio); -+ continue; -+ } -+ } -+ if (!folio_batch_add(fbatch, folio)) { -+ unsigned long nr = folio_nr_pages(folio); -+ *start = folio->index + nr; -+ goto out; -+ } -+ } -+ /* -+ * We come here when there is no folio beyond @end. We take care to not -+ * overflow the index @start as it confuses some of the callers. This -+ * breaks the iteration when there is a folio at index -1 but that is -+ * already broke anyway. -+ */ -+ if (end == (pgoff_t)-1) -+ *start = (pgoff_t)-1; -+ else -+ *start = end + 1; -+out: -+ rcu_read_unlock(); -+ -+ return folio_batch_count(fbatch); -+} -+ - /* - * CD/DVDs are error prone. When a medium error occurs, the driver may fail - * a _large_ part of the i/o request. Imagine the worst scenario: --- -2.53.0 - diff --git a/queue-6.18/iomap-fix-incorrect-did_zero-setting-in-iomap_zero_i.patch b/queue-6.18/iomap-fix-incorrect-did_zero-setting-in-iomap_zero_i.patch deleted file mode 100644 index fb76455634..0000000000 --- a/queue-6.18/iomap-fix-incorrect-did_zero-setting-in-iomap_zero_i.patch +++ /dev/null @@ -1,78 +0,0 @@ -From dc1bc967ff7cbb370829ef90f2cba281e33b99f9 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 14 Jul 2026 16:23:23 +0800 -Subject: iomap: fix incorrect did_zero setting in iomap_zero_iter() - -From: Zhang Yi - -[ Upstream commit 7a6fd6b21d7e1737b40de1a210acf9e6a1e4d59e ] - -The did_zero output parameter was unconditionally set after the loop, -which is incorrect. It should only be set when the zeroing operation -actually completes, not when IOMAP_F_STALE is set or when -IOMAP_F_FOLIO_BATCH is set but !folio causes the loop to break early, -or when iomap_iter_advance() returns an error. - -This causes did_zero to be incorrectly set when zeroing a clean -unwritten extent because the loop exits early without actually zeroing -any data. - -Fix it by using a local variable to track whether any folio was actually -zeroed, and only set did_zero after the loop if zeroing happened. - -Fixes: 98eb8d95025b ("iomap: set did_zero to true when zeroing successfully") -Signed-off-by: Zhang Yi -Link: https://patch.msgid.link/20260714082325.325163-4-yi.zhang@huaweicloud.com -Reviewed-by: "Darrick J. Wong" -Reviewed-by: Christoph Hellwig -Signed-off-by: Christian Brauner (Amutable) -Signed-off-by: Sasha Levin ---- - fs/iomap/buffered-io.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c -index d856093db9d278..43c69b606e20fb 100644 ---- a/fs/iomap/buffered-io.c -+++ b/fs/iomap/buffered-io.c -@@ -1458,6 +1458,7 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - const struct iomap_write_ops *write_ops) - { - u64 bytes = iomap_length(iter); -+ bool zeroed = false; - int status; - - do { -@@ -1476,6 +1477,8 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - /* a NULL folio means we're done with a folio batch */ - if (!folio) { - status = iomap_iter_advance_full(iter); -+ if (status) -+ return status; - break; - } - -@@ -1486,6 +1489,7 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - bytes); - - folio_zero_range(folio, offset, bytes); -+ zeroed = true; - folio_mark_accessed(folio); - - ret = iomap_write_end(iter, bytes, bytes, folio); -@@ -1495,10 +1499,10 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - - status = iomap_iter_advance(iter, bytes); - if (status) -- break; -+ return status; - } while ((bytes = iomap_length(iter)) > 0); - -- if (did_zero) -+ if (did_zero && zeroed) - *did_zero = true; - return status; - } --- -2.53.0 - diff --git a/queue-6.18/iomap-optional-zero-range-dirty-folio-processing.patch b/queue-6.18/iomap-optional-zero-range-dirty-folio-processing.patch deleted file mode 100644 index b4d78aecd3..0000000000 --- a/queue-6.18/iomap-optional-zero-range-dirty-folio-processing.patch +++ /dev/null @@ -1,241 +0,0 @@ -From 888665737ba5355d21889fb98178599eaffcda8b Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 3 Oct 2025 09:46:37 -0400 -Subject: iomap: optional zero range dirty folio processing - -From: Brian Foster - -[ Upstream commit 395ed1ef0012e1bb1e4050e84ba0173b3623112a ] - -The only way zero range can currently process unwritten mappings -with dirty pagecache is to check whether the range is dirty before -mapping lookup and then flush when at least one underlying mapping -is unwritten. This ordering is required to prevent iomap lookup from -racing with folio writeback and reclaim. - -Since zero range can skip ranges of unwritten mappings that are -clean in cache, this operation can be improved by allowing the -filesystem to provide a set of dirty folios that require zeroing. In -turn, rather than flush or iterate file offsets, zero range can -iterate on folios in the batch and advance over clean or uncached -ranges in between. - -Add a folio_batch in struct iomap and provide a helper for -filesystems to populate the batch at lookup time. Update the folio -lookup path to return the next folio in the batch, if provided, and -advance the iter if the folio starts beyond the current offset. - -Signed-off-by: Brian Foster -Reviewed-by: Christoph Hellwig -Reviewed-by: Darrick J. Wong -Signed-off-by: Christian Brauner -Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()") -Signed-off-by: Sasha Levin ---- - fs/iomap/buffered-io.c | 90 +++++++++++++++++++++++++++++++++++++++--- - fs/iomap/iter.c | 6 +++ - include/linux/iomap.h | 4 ++ - 3 files changed, 95 insertions(+), 5 deletions(-) - -diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c -index 66d16483df4441..d856093db9d278 100644 ---- a/fs/iomap/buffered-io.c -+++ b/fs/iomap/buffered-io.c -@@ -790,6 +790,28 @@ static struct folio *__iomap_get_folio(struct iomap_iter *iter, - if (!mapping_large_folio_support(iter->inode->i_mapping)) - len = min_t(size_t, len, PAGE_SIZE - offset_in_page(pos)); - -+ if (iter->fbatch) { -+ struct folio *folio = folio_batch_next(iter->fbatch); -+ -+ if (!folio) -+ return NULL; -+ -+ /* -+ * The folio mapping generally shouldn't have changed based on -+ * fs locks, but be consistent with filemap lookup and retry -+ * the iter if it does. -+ */ -+ folio_lock(folio); -+ if (unlikely(folio->mapping != iter->inode->i_mapping)) { -+ iter->iomap.flags |= IOMAP_F_STALE; -+ folio_unlock(folio); -+ return NULL; -+ } -+ -+ folio_get(folio); -+ return folio; -+ } -+ - if (write_ops && write_ops->get_folio) - return write_ops->get_folio(iter, pos, len); - return iomap_get_folio(iter, pos, len); -@@ -850,6 +872,8 @@ static int iomap_write_begin(struct iomap_iter *iter, - int status = 0; - - len = min_not_zero(len, *plen); -+ *foliop = NULL; -+ *plen = 0; - - if (fatal_signal_pending(current)) - return -EINTR; -@@ -858,6 +882,15 @@ static int iomap_write_begin(struct iomap_iter *iter, - if (IS_ERR(folio)) - return PTR_ERR(folio); - -+ /* -+ * No folio means we're done with a batch. We still have range to -+ * process so return and let the caller iterate and refill the batch. -+ */ -+ if (!folio) { -+ WARN_ON_ONCE(!iter->fbatch); -+ return 0; -+ } -+ - /* - * Now we have a locked folio, before we do anything with it we need to - * check that the iomap we have cached is not stale. The inode extent -@@ -878,6 +911,22 @@ static int iomap_write_begin(struct iomap_iter *iter, - } - } - -+ /* -+ * The folios in a batch may not be contiguous. If we've skipped -+ * forward, advance the iter to the pos of the current folio. If the -+ * folio starts beyond the end of the mapping, it may have been trimmed -+ * since the lookup for whatever reason. Return a NULL folio to -+ * terminate the op. -+ */ -+ if (folio_pos(folio) > iter->pos) { -+ len = min_t(u64, folio_pos(folio) - iter->pos, -+ iomap_length(iter)); -+ status = iomap_iter_advance(iter, len); -+ len = iomap_length(iter); -+ if (status || !len) -+ goto out_unlock; -+ } -+ - pos = iomap_trim_folio_range(iter, folio, poffset, &len); - - if (srcmap->type == IOMAP_INLINE) -@@ -1424,6 +1473,12 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - if (iter->iomap.flags & IOMAP_F_STALE) - break; - -+ /* a NULL folio means we're done with a folio batch */ -+ if (!folio) { -+ status = iomap_iter_advance_full(iter); -+ break; -+ } -+ - /* warn about zeroing folios beyond eof that won't write back */ - WARN_ON_ONCE(folio_pos(folio) > iter->inode->i_size); - -@@ -1448,6 +1503,26 @@ static int iomap_zero_iter(struct iomap_iter *iter, bool *did_zero, - return status; - } - -+loff_t -+iomap_fill_dirty_folios( -+ struct iomap_iter *iter, -+ loff_t offset, -+ loff_t length) -+{ -+ struct address_space *mapping = iter->inode->i_mapping; -+ pgoff_t start = offset >> PAGE_SHIFT; -+ pgoff_t end = (offset + length - 1) >> PAGE_SHIFT; -+ -+ iter->fbatch = kmalloc(sizeof(struct folio_batch), GFP_KERNEL); -+ if (!iter->fbatch) -+ return offset + length; -+ folio_batch_init(iter->fbatch); -+ -+ filemap_get_folios_dirty(mapping, &start, end, iter->fbatch); -+ return (start << PAGE_SHIFT); -+} -+EXPORT_SYMBOL_GPL(iomap_fill_dirty_folios); -+ - int - iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero, - const struct iomap_ops *ops, -@@ -1477,7 +1552,7 @@ iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero, - * flushing on partial eof zeroing, special case it to zero the - * unaligned start portion if already dirty in pagecache. - */ -- if (off && -+ if (!iter.fbatch && off && - filemap_range_needs_writeback(mapping, pos, pos + plen - 1)) { - iter.len = plen; - while ((ret = iomap_iter(&iter, ops)) > 0) -@@ -1494,13 +1569,18 @@ iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, bool *did_zero, - * if dirty and the fs returns a mapping that might convert on - * writeback. - */ -- range_dirty = filemap_range_needs_writeback(inode->i_mapping, -- iter.pos, iter.pos + iter.len - 1); -+ range_dirty = filemap_range_needs_writeback(mapping, iter.pos, -+ iter.pos + iter.len - 1); - while ((ret = iomap_iter(&iter, ops)) > 0) { - const struct iomap *srcmap = iomap_iter_srcmap(&iter); - -- if (srcmap->type == IOMAP_HOLE || -- srcmap->type == IOMAP_UNWRITTEN) { -+ if (WARN_ON_ONCE(iter.fbatch && -+ srcmap->type != IOMAP_UNWRITTEN)) -+ return -EIO; -+ -+ if (!iter.fbatch && -+ (srcmap->type == IOMAP_HOLE || -+ srcmap->type == IOMAP_UNWRITTEN)) { - s64 status; - - if (range_dirty) { -diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c -index 91d2024e00da4e..8692e5e41c6df6 100644 ---- a/fs/iomap/iter.c -+++ b/fs/iomap/iter.c -@@ -8,6 +8,12 @@ - - static inline void iomap_iter_reset_iomap(struct iomap_iter *iter) - { -+ if (iter->fbatch) { -+ folio_batch_release(iter->fbatch); -+ kfree(iter->fbatch); -+ iter->fbatch = NULL; -+ } -+ - iter->status = 0; - memset(&iter->iomap, 0, sizeof(iter->iomap)); - memset(&iter->srcmap, 0, sizeof(iter->srcmap)); -diff --git a/include/linux/iomap.h b/include/linux/iomap.h -index 4469b2318b08e5..53428ce1262f4e 100644 ---- a/include/linux/iomap.h -+++ b/include/linux/iomap.h -@@ -9,6 +9,7 @@ - #include - #include - #include -+#include - - struct address_space; - struct fiemap_extent_info; -@@ -241,6 +242,7 @@ struct iomap_iter { - unsigned flags; - struct iomap iomap; - struct iomap srcmap; -+ struct folio_batch *fbatch; - void *private; - }; - -@@ -347,6 +349,8 @@ bool iomap_dirty_folio(struct address_space *mapping, struct folio *folio); - int iomap_file_unshare(struct inode *inode, loff_t pos, loff_t len, - const struct iomap_ops *ops, - const struct iomap_write_ops *write_ops); -+loff_t iomap_fill_dirty_folios(struct iomap_iter *iter, loff_t offset, -+ loff_t length); - int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len, - bool *did_zero, const struct iomap_ops *ops, - const struct iomap_write_ops *write_ops, void *private); --- -2.53.0 - diff --git a/queue-6.18/iomap-remove-pos-len-bug_on-to-after-folio-lookup.patch b/queue-6.18/iomap-remove-pos-len-bug_on-to-after-folio-lookup.patch deleted file mode 100644 index 4ddc2a3276..0000000000 --- a/queue-6.18/iomap-remove-pos-len-bug_on-to-after-folio-lookup.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 4d107f5c44def02149e841a1ec3d01fecaf1601d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 3 Oct 2025 09:46:36 -0400 -Subject: iomap: remove pos+len BUG_ON() to after folio lookup - -From: Brian Foster - -[ Upstream commit 49590716be886cc3cbbac10964eac551cfe570b2 ] - -The bug checks at the top of iomap_write_begin() assume the pos/len -reflect exactly the next range to process. This may no longer be the -case once the get folio path is able to process a folio batch from -the filesystem. On top of that, len is already trimmed to within the -iomap/srcmap by iomap_length(), so these checks aren't terribly -useful. Remove the unnecessary BUG_ON() checks. - -Signed-off-by: Brian Foster -Reviewed-by: Christoph Hellwig -Reviewed-by: Darrick J. Wong -Signed-off-by: Christian Brauner -Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()") -Signed-off-by: Sasha Levin ---- - fs/iomap/buffered-io.c | 5 +---- - 1 file changed, 1 insertion(+), 4 deletions(-) - -diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c -index db7d448e282cab..66d16483df4441 100644 ---- a/fs/iomap/buffered-io.c -+++ b/fs/iomap/buffered-io.c -@@ -844,15 +844,12 @@ static int iomap_write_begin(struct iomap_iter *iter, - size_t *poffset, u64 *plen) - { - const struct iomap *srcmap = iomap_iter_srcmap(iter); -- loff_t pos = iter->pos; -+ loff_t pos; - u64 len = min_t(u64, SIZE_MAX, iomap_length(iter)); - struct folio *folio; - int status = 0; - - len = min_not_zero(len, *plen); -- BUG_ON(pos + len > iter->iomap.offset + iter->iomap.length); -- if (srcmap != &iter->iomap) -- BUG_ON(pos + len > srcmap->offset + srcmap->length); - - if (fatal_signal_pending(current)) - return -EINTR; --- -2.53.0 - diff --git a/queue-6.18/iomap-simplify-iomap_iter_advance.patch b/queue-6.18/iomap-simplify-iomap_iter_advance.patch deleted file mode 100644 index da7efe57c4..0000000000 --- a/queue-6.18/iomap-simplify-iomap_iter_advance.patch +++ /dev/null @@ -1,320 +0,0 @@ -From bd84ab5a21131b9541edf97d08e897fb7557d6aa Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 19 Sep 2025 14:42:50 -0700 -Subject: iomap: simplify iomap_iter_advance() - -From: Joanne Koong - -[ Upstream commit ca82a7ea2299b4586af1f77daee66ee781202320 ] - -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 -Reviewed-by: Brian Foster -Reviewed-by: Christoph Hellwig -Signed-off-by: Christian Brauner -Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()") -Signed-off-by: Sasha Levin ---- - fs/dax.c | 30 ++++++++++++------------------ - fs/iomap/buffered-io.c | 18 +++++++++--------- - fs/iomap/direct-io.c | 6 +++--- - fs/iomap/iter.c | 14 +++++--------- - fs/iomap/seek.c | 8 ++++---- - include/linux/iomap.h | 6 ++---- - 6 files changed, 35 insertions(+), 47 deletions(-) - -diff --git a/fs/dax.c b/fs/dax.c -index 516f995a988c8f..38fae11ee41912 100644 ---- 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: -diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c -index 734854f864fd1e..db7d448e282cab 100644 ---- a/fs/iomap/buffered-io.c -+++ b/fs/iomap/buffered-io.c -@@ -405,7 +405,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 */ -@@ -466,7 +466,7 @@ static int iomap_readpage_iter(struct iomap_iter *iter, - * 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, -@@ -1070,7 +1070,7 @@ static int iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i, - } - } else { - total_written += written; -- iomap_iter_advance(iter, &written); -+ iomap_iter_advance(iter, written); - } - } while (iov_iter_count(i) && iomap_length(iter)); - -@@ -1339,7 +1339,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; -@@ -1363,10 +1363,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; - } -@@ -1441,10 +1441,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; -@@ -1555,7 +1555,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, -diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c -index e73c71f39bd45f..2e86b5c5280bed 100644 ---- a/fs/iomap/direct-io.c -+++ b/fs/iomap/direct-io.c -@@ -511,7 +511,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) - /* 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; - } - -@@ -522,7 +522,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) -@@ -557,7 +557,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) -diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c -index cef77ca0c20bcc..91d2024e00da4e 100644 ---- a/fs/iomap/iter.c -+++ b/fs/iomap/iter.c -@@ -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; - } - -diff --git a/fs/iomap/seek.c b/fs/iomap/seek.c -index 56db2dd4b10ddb..6cbc587c93dab2 100644 ---- a/fs/iomap/seek.c -+++ b/fs/iomap/seek.c -@@ -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; -diff --git a/include/linux/iomap.h b/include/linux/iomap.h -index 73dceabc21c8c7..4469b2318b08e5 100644 ---- a/include/linux/iomap.h -+++ b/include/linux/iomap.h -@@ -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)); - } - - /** --- -2.53.0 - diff --git a/queue-6.18/series b/queue-6.18/series index 6802c9ce10..997f528a4f 100644 --- a/queue-6.18/series +++ b/queue-6.18/series @@ -280,11 +280,6 @@ vmxnet3-fix-bug_on-in-vmxnet3_get_hdr_len-for-geneve.patch drm-xe-i2c-allow-per-domain-unique-id.patch drm-xe-vm-fix-svm-leak-on-resv-obj-alloc-failure-in-.patch iomap-correct-the-range-of-a-partial-dirty-clear.patch -iomap-simplify-iomap_iter_advance.patch -filemap-add-helper-to-look-up-dirty-folios-in-a-rang.patch -iomap-remove-pos-len-bug_on-to-after-folio-lookup.patch -iomap-optional-zero-range-dirty-folio-processing.patch -iomap-fix-incorrect-did_zero-setting-in-iomap_zero_i.patch tipc-fix-u16-mtu-truncation-in-media-and-bearer-mtu-.patch drm-tests-shmem-set-dma-mask-to-64-bit-in-drm_gem_sh.patch bpf-tcp-fix-double-sock-release-on-batch-realloc.patch