From: "Darrick J. Wong" <djwong@kernel.org>
To: Joanne Koong <joannelkoong@gmail.com>
Cc: Christian Brauner <brauner@kernel.org>,
hch@lst.de, linux-fsdevel@vger.kernel.org,
changfengnan@bytedance.com, kbusch@kernel.org,
Matthew Wilcox <willy@infradead.org>, Jan Kara <jack@suse.cz>,
Jonathan Corbet <corbet@lwn.net>, David Sterba <dsterba@suse.com>,
Gao Xiang <xiang@kernel.org>, Namjae Jeon <linkinjeon@kernel.org>,
Theodore Ts'o <tytso@mit.edu>, Jaegeuk Kim <jaegeuk@kernel.org>,
Miklos Szeredi <miklos@szeredi.hu>,
Andreas Gruenbacher <agruenba@redhat.com>,
Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>,
Hyunchul Lee <hyc.lee@gmail.com>,
Konstantin Komarov <almaz.alexandrovich@paragon-software.com>,
Carlos Maiolino <cem@kernel.org>,
Damien Le Moal <dlemoal@kernel.org>,
libaokun@linux.alibaba.com, bfoster@redhat.com,
linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org,
Sashiko <sashiko-bot@kernel.org>
Subject: Re: [PATCH v5 01/22] iomap: release the folio batch on iomap callback failures
Date: Wed, 29 Jul 2026 13:53:04 -0700 [thread overview]
Message-ID: <20260729205304.GA2901224@frogsfrogsfrogs> (raw)
In-Reply-To: <20260729192737.3190206-2-joannelkoong@gmail.com>
On Wed, Jul 29, 2026 at 12:27:16PM -0700, Joanne Koong wrote:
> From: Brian Foster <bfoster@redhat.com>
>
> A sashiko review of an unrelated patch points out that the folio
> batch mechanism used for iomap zero range fails to release the batch
> in a couple error scenarios. If either calls to ->iomap_end() or
> ->iomap_begin() fail, the direct return paths bypass the batch
> cleanup.
>
> The ->iomap_end() case is not a practical issue at the moment
> because there is no user of the mechanism that returns an error from
> this path. The ->iomap_begin() case is theoretically possible
> because XFS can invoke the fill helper and error out at various
> points thereafter. This subtly complicates things because XFS does
> not transfer iomap_flags to the iomap data structure in the error
> path.
>
> To deal with both of these issues, first make sure to invoke the
> cleanup helper in the error path for either fs callback. Second,
> update the helper to clear the flag unconditionally and release the
> batch so long as it is populated. This more clearly delineates the
> purpose of the flag to control the I/O path and not necessarily the
> status of the fbatch, so add a comment around this as well.
>
> Reported-by: Sashiko <sashiko-bot@kernel.org>
> Assisted-by: LLM
> Fixes: 395ed1ef0012 ("iomap: optional zero range dirty folio processing")
> Signed-off-by: Brian Foster <bfoster@redhat.com>
Seems reasonable to me,
Cc: <stable@vger.kernel.org> # v6.19
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/iomap/iter.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c
> index e4a29829591a..63617ec48250 100644
> --- a/fs/iomap/iter.c
> +++ b/fs/iomap/iter.c
> @@ -6,12 +6,18 @@
> #include <linux/iomap.h>
> #include "trace.h"
>
> +/*
> + * Release the iter folio batch. Note that the iomap flag is meant to control
> + * the I/O path for the mapping and may not be set in error situations.
> + */
> static inline void iomap_iter_clean_fbatch(struct iomap_iter *iter)
> {
> - if (iter->iomap.flags & IOMAP_F_FOLIO_BATCH) {
> + if (!iter->fbatch)
> + return;
> + iter->iomap.flags &= ~IOMAP_F_FOLIO_BATCH;
> + if (folio_batch_count(iter->fbatch)) {
> folio_batch_release(iter->fbatch);
> folio_batch_reinit(iter->fbatch);
> - iter->iomap.flags &= ~IOMAP_F_FOLIO_BATCH;
> }
> }
>
> @@ -79,7 +85,7 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
> olen),
> advanced, iter->flags, &iter->iomap);
> if (ret < 0 && !advanced)
> - return ret;
> + goto error;
> }
>
> /* detect old return semantics where this would advance */
> @@ -110,7 +116,11 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
> ret = ops->iomap_begin(iter->inode, iter->pos, iter->len, iter->flags,
> &iter->iomap, &iter->srcmap);
> if (ret < 0)
> - return ret;
> + goto error;
> iomap_iter_done(iter);
> return 1;
> +
> +error:
> + iomap_iter_clean_fbatch(iter);
> + return ret;
> }
> --
> 2.52.0
>
>
next prev parent reply other threads:[~2026-07-29 20:53 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 19:27 [PATCH v5 00/22] iomap: convert to in-iter iomap_next() model Joanne Koong
2026-07-29 19:27 ` [PATCH v5 01/22] iomap: release the folio batch on iomap callback failures Joanne Koong
2026-07-29 20:53 ` Darrick J. Wong [this message]
2026-07-29 19:27 ` [PATCH v5 02/22] iomap: split iomap_iter() logic into iomap_iter_next() Joanne Koong
2026-07-29 19:27 ` [PATCH v5 03/22] iomap: decouple simple direct I/O reads from iomap_dio_rw Joanne Koong
2026-07-29 19:27 ` [PATCH v5 04/22] iomap: use GFP_NOWAIT when application for iomap_dio_simple allocations Joanne Koong
2026-07-29 19:27 ` [PATCH v5 05/22] iomap: add ->iomap_next() Joanne Koong
2026-07-29 19:27 ` [PATCH v5 06/22] xfs: convert iomap ops to ->iomap_next() Joanne Koong
2026-07-29 19:27 ` [PATCH v5 07/22] btrfs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 08/22] ntfs3: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 09/22] ntfs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 10/22] ext4: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 11/22] erofs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 12/22] zonefs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 13/22] ext2: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 14/22] block: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 15/22] f2fs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 16/22] gfs2: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 17/22] hpfs: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 18/22] fuse: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 19/22] exfat: " Joanne Koong
2026-07-29 19:27 ` [PATCH v5 20/22] iomap: remove ->iomap_begin()/->iomap_end() legacy path Joanne Koong
2026-07-29 19:27 ` [PATCH v5 21/22] iomap: pass iomap_iter_next_fn directly instead of struct iomap_ops Joanne Koong
2026-07-29 19:27 ` [PATCH v5 22/22] Documentation: iomap: update docs to reflect iomap_iter_next model Joanne Koong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260729205304.GA2901224@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=agruenba@redhat.com \
--cc=almaz.alexandrovich@paragon-software.com \
--cc=bfoster@redhat.com \
--cc=brauner@kernel.org \
--cc=cem@kernel.org \
--cc=changfengnan@bytedance.com \
--cc=corbet@lwn.net \
--cc=dlemoal@kernel.org \
--cc=dsterba@suse.com \
--cc=hch@lst.de \
--cc=hyc.lee@gmail.com \
--cc=jack@suse.cz \
--cc=jaegeuk@kernel.org \
--cc=joannelkoong@gmail.com \
--cc=kbusch@kernel.org \
--cc=libaokun@linux.alibaba.com \
--cc=linkinjeon@kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=mikulas@artax.karlin.mff.cuni.cz \
--cc=sashiko-bot@kernel.org \
--cc=tytso@mit.edu \
--cc=willy@infradead.org \
--cc=xiang@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.