]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop some 6.18 patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Jul 2026 13:22:58 +0000 (15:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Jul 2026 13:22:58 +0000 (15:22 +0200)
queue-6.18/filemap-add-helper-to-look-up-dirty-folios-in-a-rang.patch [deleted file]
queue-6.18/iomap-fix-incorrect-did_zero-setting-in-iomap_zero_i.patch [deleted file]
queue-6.18/iomap-optional-zero-range-dirty-folio-processing.patch [deleted file]
queue-6.18/iomap-remove-pos-len-bug_on-to-after-folio-lookup.patch [deleted file]
queue-6.18/iomap-simplify-iomap_iter_advance.patch [deleted file]
queue-6.18/series

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 (file)
index 872fd03..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-From aec6e23a1a570aabdd254804b6985f1679aff1bf Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 3 Oct 2025 09:46:35 -0400
-Subject: filemap: add helper to look up dirty folios in a range
-
-From: Brian Foster <bfoster@redhat.com>
-
-[ 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 <bfoster@redhat.com>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
-Reviewed-by: Darrick J. Wong <djwong@kernel.org>
-Signed-off-by: Christian Brauner <brauner@kernel.org>
-Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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 (file)
index fb76455..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From dc1bc967ff7cbb370829ef90f2cba281e33b99f9 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Tue, 14 Jul 2026 16:23:23 +0800
-Subject: iomap: fix incorrect did_zero setting in iomap_zero_iter()
-
-From: Zhang Yi <yi.zhang@huawei.com>
-
-[ 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 <yi.zhang@huawei.com>
-Link: https://patch.msgid.link/20260714082325.325163-4-yi.zhang@huaweicloud.com
-Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
-Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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 (file)
index b4d78ae..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-From 888665737ba5355d21889fb98178599eaffcda8b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 3 Oct 2025 09:46:37 -0400
-Subject: iomap: optional zero range dirty folio processing
-
-From: Brian Foster <bfoster@redhat.com>
-
-[ 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 <bfoster@redhat.com>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
-Reviewed-by: Darrick J. Wong <djwong@kernel.org>
-Signed-off-by: Christian Brauner <brauner@kernel.org>
-Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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 <linux/types.h>
- #include <linux/mm_types.h>
- #include <linux/blkdev.h>
-+#include <linux/pagevec.h>
- 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 (file)
index 4ddc2a3..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From 4d107f5c44def02149e841a1ec3d01fecaf1601d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 3 Oct 2025 09:46:36 -0400
-Subject: iomap: remove pos+len BUG_ON() to after folio lookup
-
-From: Brian Foster <bfoster@redhat.com>
-
-[ 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 <bfoster@redhat.com>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
-Reviewed-by: Darrick J. Wong <djwong@kernel.org>
-Signed-off-by: Christian Brauner <brauner@kernel.org>
-Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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 (file)
index da7efe5..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-From bd84ab5a21131b9541edf97d08e897fb7557d6aa Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 19 Sep 2025 14:42:50 -0700
-Subject: iomap: simplify iomap_iter_advance()
-
-From: Joanne Koong <joannelkoong@gmail.com>
-
-[ 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 <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>
-Stable-dep-of: 7a6fd6b21d7e ("iomap: fix incorrect did_zero setting in iomap_zero_iter()")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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
-
index 6802c9ce1090074669af5a8e00038c949902d37e..997f528a4f2969c1e2c92cd20187bf2e67229076 100644 (file)
@@ -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