All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Joanne Koong <joannelkoong@gmail.com>
Cc: brauner@kernel.org, hch@lst.de, willy@infradead.org,
	hsiangkao@linux.alibaba.com, linux-fsdevel@vger.kernel.org,
	linux-xfs@vger.kernel.org, Carlos Maiolino <cem@kernel.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 02/18] xfs: convert iomap ops to ->iomap_next()
Date: Thu, 2 Jul 2026 18:41:21 -0700	[thread overview]
Message-ID: <20260703014121.GQ9392@frogsfrogsfrogs> (raw)
In-Reply-To: <CAJnrk1bj4pLpAzLhehrbDJuKWa=WMq-3XOAm9dhsEVDF9WCBPQ@mail.gmail.com>

On Thu, Jul 02, 2026 at 06:21:00PM -0700, Joanne Koong wrote:
> On Thu, Jul 2, 2026 at 4:59 PM Joanne Koong <joannelkoong@gmail.com> wrote:
> >
> > On Thu, Jul 2, 2026 at 9:43 AM Darrick J. Wong <djwong@kernel.org> wrote:
> > >
> > > On Tue, Jun 30, 2026 at 05:09:17PM -0700, Joanne Koong wrote:
> > > > Convert xfs iomap_ops to the new ->iomap_next() callback. This uses the
> > > > iomap_process() helper, which finishes the previous mapping if needed
> > > > and produces the next one. No functional changes are intended.
> > > >
> > > > Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
> > > > ---
> > > >  fs/xfs/xfs_file.c  |  4 +-
> > > >  fs/xfs/xfs_iomap.c | 96 +++++++++++++++++++++++++++++++++++++++++-----
> > > >  2 files changed, 88 insertions(+), 12 deletions(-)
> > > >
> > > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> > > > index 845a97c9b063..7f8bef1a9954 100644
> > > > --- a/fs/xfs/xfs_file.c
> > > > +++ b/fs/xfs/xfs_file.c
> > > > @@ -857,9 +857,9 @@ xfs_file_dio_write_atomic(
> > > >                       NULL, 0);
> > > >
> > > >       /*
> > > > -      * The retry mechanism is based on the ->iomap_begin method returning
> > > > +      * The retry mechanism is based on the ->iomap_next method returning
> > > >        * -ENOPROTOOPT, which would be when the REQ_ATOMIC-based write is not
> > > > -      * possible. The REQ_ATOMIC-based method typically not be possible if
> > > > +      * possible. The REQ_ATOMIC-based method is typically not possible if
> > > >        * the write spans multiple extents or the disk blocks are misaligned.
> > > >        */
> > > >       if (ret == -ENOPROTOOPT && dops == &xfs_direct_write_iomap_ops) {
> > > > diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> > > > index 225c3de88d03..4fa1a5c985db 100644
> > > > --- a/fs/xfs/xfs_iomap.c
> > > > +++ b/fs/xfs/xfs_iomap.c
> > > > @@ -1037,8 +1037,18 @@ xfs_direct_write_iomap_begin(
> > > >       return error;
> > > >  }
> > > >
> > > > +static int
> > > > +xfs_direct_write_iomap_next(
> > > > +     const struct iomap_iter *iter,
> > > > +     struct iomap            *iomap,
> > > > +     struct iomap            *srcmap)
> > >
> > > <unvarnished brainstream ahead>
> > >
> > > Now that I see the callsites, I think the "next" name could use some
> > > bikeshedding <cough>.  The purpose of this function is either
> > >
> > > (a) to look up the first mapping to start iterating;
> > > (b) to release whatever resources were attached during the current
> > >     iteration and look up the next mapping to continue iterating; or
> > > (c) to decide that it's time to stop iterating.
> > >
> > > From that it seems obvious to me that xfs_direct_write_iomap_next yields
> > > iomaps for iteration.  In Python those are called generator functions;
> > > in Rust they're called objects that implement the Iterator trait (or
> > > iterators for short).
> > >
> > > How about s/iomap_next/iomap_iter/ ?
> > >
> > > Then this function would be called xfs_direct_write_iomap_iter, which
> > > IMO is a closer description of what the function does, which is to say
> > > iterates iomaps for direct writes.
> > >
> > > (Yes, my brain might be polluted with thinking that "iomap next" refers
> > > to a major shift, in the sense of "linux next". :P)
> >
> > Thanks for sharing your thoughts. The idea makes sense to me in theory
> > but I think in rust and python the "iter" naming is reserved for the
> > iterator object itself and the method / callback for advancing and
> > yielding the next item in the iteration is named "next" (eg
> > Iterator::next in rust and __next__() in python)? I wonder if the
> > s/_next/_iter gets confusing with multiple things in iomap already
> > called iter (eg the struct iomap_iter, the iomap_iter() function). I'm
> > not sure, I'm happy to rename this if that's the preference.
> >
> 
> Ahh okay, I think I see the point you were trying to make. The
> callsite functions are like:
> 
> ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
>                 iomap_next_fn iomap_next,
>                 const struct iomap_write_ops *write_ops, void *private);
> 
> int iomap_fsverity_write(struct file *file, loff_t pos, size_t length,
>                 const void *buf, iomap_next_fn iomap_next,
>                 const struct iomap_write_ops *write_ops);
> 
> void iomap_read_folio(iomap_next_fn iomap_next,
>                 struct iomap_read_folio_ctx *ctx, void *private);
> 
> void iomap_readahead(iomap_next_fn iomap_next,
>                 struct iomap_read_folio_ctx *ctx, void *private);
> 
> etc, so it's not clear from the "iomap_next_fn iomap_next" naming that
> it handles per-iteration logic, whereas renaming it to "iomap_iter_fn
> iomap_iter" makes it more explicit. Am I interpreting this correctly?

Yes.

> I think this is a good idea. If no one has an objection, I'll make
> this change for v3.

Ok by me.  Ignore the email I just sent, please :)

--D

> Thanks,
> Joanne
> 
> >
> > >
> > > > +{
> > > > +     return iomap_process(iter, iomap, srcmap, xfs_direct_write_iomap_begin,
> > > > +                     NULL);
> > >
> > > But then "iomap_iter" sets up a new problem: should iomap_process have a
> > > new name that goes along with that?  iomap_iter is already taken for the
> > > legacy path.  If we were emulating python I'd suggest iomap_iter_yield
> > > but this is C so we get to reinvent everything from scratch so who
> > > knows.
> > >
> > > --D
> > >
> 

  reply	other threads:[~2026-07-03  1:41 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-01  0:09 [PATCH v2 00/18] iomap: convert to in-iter iomap_next() model Joanne Koong
2026-07-01  0:09 ` [PATCH v2 01/18] iomap: add ->iomap_next() and iomap_process() helper Joanne Koong
2026-07-02 14:00   ` Christoph Hellwig
2026-07-02 23:01     ` Joanne Koong
2026-07-02 16:23   ` Darrick J. Wong
2026-07-02 22:41     ` Joanne Koong
2026-07-01  0:09 ` [PATCH v2 02/18] xfs: convert iomap ops to ->iomap_next() Joanne Koong
2026-07-02 14:03   ` Christoph Hellwig
2026-07-02 16:48     ` Darrick J. Wong
2026-07-03 12:33       ` Christoph Hellwig
2026-07-03 15:50         ` Darrick J. Wong
2026-07-02 16:43   ` Darrick J. Wong
2026-07-02 23:59     ` Joanne Koong
2026-07-03  1:21       ` Joanne Koong
2026-07-03  1:41         ` Darrick J. Wong [this message]
2026-07-03 12:32         ` Christoph Hellwig
2026-07-03  1:38       ` Darrick J. Wong
2026-07-01  0:09 ` [PATCH v2 03/18] btrfs: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 04/18] ntfs3: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 05/18] ntfs: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 06/18] ext4: " Joanne Koong
2026-07-01 10:01   ` Jan Kara
2026-07-01  0:09 ` [PATCH v2 07/18] erofs: " Joanne Koong
2026-07-01  0:41   ` Gao Xiang
2026-07-01  0:09 ` [PATCH v2 08/18] zonefs: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 09/18] ext2: " Joanne Koong
2026-07-01 10:02   ` Jan Kara
2026-07-01  0:09 ` [PATCH v2 10/18] block: " Joanne Koong
2026-07-01  0:55   ` Keith Busch
2026-07-02 14:03     ` Christoph Hellwig
2026-07-03  0:06     ` Joanne Koong
2026-07-01  0:09 ` [PATCH v2 11/18] f2fs: " Joanne Koong
2026-07-01  0:09   ` [f2fs-dev] " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 12/18] gfs2: " Joanne Koong
2026-07-03 11:45   ` Andreas Gruenbacher
2026-07-04  0:07     ` Joanne Koong
2026-07-01  0:09 ` [PATCH v2 13/18] hpfs: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 14/18] fuse: " Joanne Koong
2026-07-01  0:09 ` [PATCH v2 15/18] exfat: " Joanne Koong
2026-07-03  1:41   ` Joanne Koong
2026-07-01  0:09 ` [PATCH v2 16/18] iomap: remove ->iomap_begin()/->iomap_end() legacy path Joanne Koong
2026-07-02 14:04   ` Christoph Hellwig
2026-07-02 16:51   ` Darrick J. Wong
2026-07-01  0:09 ` [PATCH v2 17/18] iomap: pass iomap_next_fn directly instead of struct iomap_ops Joanne Koong
2026-07-01  0:09   ` [f2fs-dev] " Joanne Koong
2026-07-01 10:04   ` Jan Kara
2026-07-01 10:04     ` [f2fs-dev] " Jan Kara
2026-07-02 14:07   ` Christoph Hellwig
2026-07-02 14:07     ` [f2fs-dev] " Christoph Hellwig
2026-07-02 16:51     ` Darrick J. Wong
2026-07-02 16:51       ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-07-03  1:47       ` Joanne Koong
2026-07-03  1:47         ` [f2fs-dev] " Joanne Koong
2026-07-03  2:01         ` Darrick J. Wong via Linux-f2fs-devel
2026-07-03  2:01           ` Darrick J. Wong
2026-07-03 10:37         ` Christian Brauner
2026-07-03 10:37           ` [f2fs-dev] " Christian Brauner via Linux-f2fs-devel
2026-07-02 16:58   ` Darrick J. Wong
2026-07-02 16:58     ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-07-03  0:17     ` Joanne Koong
2026-07-03  0:17       ` [f2fs-dev] " Joanne Koong
2026-07-03  1:42       ` Darrick J. Wong
2026-07-03  1:42         ` [f2fs-dev] " Darrick J. Wong via Linux-f2fs-devel
2026-07-01  0:09 ` [PATCH v2 18/18] Documentation: iomap: update docs to reflect iomap_next model Joanne Koong
2026-07-02 14:07   ` Christoph Hellwig
2026-07-02 19:26   ` Darrick J. Wong
2026-07-03  1:36     ` Joanne Koong
2026-07-03  2:00       ` Darrick J. Wong
2026-07-03 12:43         ` Christoph Hellwig
2026-07-03 16:11           ` Darrick J. Wong
2026-07-04  0:34             ` Joanne Koong
2026-07-04  4:38               ` Darrick J. Wong
2026-07-06  4:59                 ` Christoph Hellwig
2026-07-06  3:59               ` Christoph Hellwig
2026-07-06  3:56             ` Christoph Hellwig
2026-07-02 13:49 ` [PATCH v2 00/18] iomap: convert to in-iter iomap_next() model Christoph Hellwig
2026-07-03  1:08   ` 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=20260703014121.GQ9392@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=brauner@kernel.org \
    --cc=cem@kernel.org \
    --cc=hch@lst.de \
    --cc=hsiangkao@linux.alibaba.com \
    --cc=joannelkoong@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=willy@infradead.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.