From: Brian Foster <bfoster@redhat.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2 6/7] iomap: advance the iter directly on unshare range
Date: Wed, 29 Jan 2025 11:40:13 -0500 [thread overview]
Message-ID: <Z5pZ7d3hhvP6S-Qj@bfoster> (raw)
In-Reply-To: <Z5nC-n2EsEQcmm6X@infradead.org>
On Tue, Jan 28, 2025 at 09:56:10PM -0800, Christoph Hellwig wrote:
> On Tue, Jan 28, 2025 at 12:59:09PM -0500, Brian Foster wrote:
> > But that raises another question. I'd want bytes to be s64 here to
> > support the current factoring, but iomap_length() returns a u64. In
> > poking around a bit I _think_ this is practically safe because the high
> > level operations are bound by loff_t (int64_t), so IIUC that means we
> > shouldn't actually see a length that doesn't fit in s64.
> >
> > That said, that still seems a bit grotty. Perhaps one option could be to
> > tweak iomap_length() to return something like this:
> >
> > min_t(u64, SSIZE_MAX, end);
> >
> > ... to at least makes things explicit.
>
> Yeah. I'm actually not sure why went want to support 64-bit ranges.
> I don't even remember if this comes from Dave's really first version
> or was my idea, but in hindsight just sticking to ssize_t bounds
> would have been smarter.
>
Ok, thanks.
> > I'd guess the (i.e. iomap_file_unshare()) loop logic would look more
> > like:
> >
> > do {
> > ...
> > ret = iomap_iter_advance(iter, &bytes);
> > } while (!ret && bytes > 0);
> >
> > return ret;
> >
> > Hmm.. now that I write it out that doesn't seem so bad. It does clean up
> > the return path a bit. I think I'll play around with that, but let me
> > know if there are other thoughts or ideas..
>
> Given that all the kernel read/write code mixes up bytes and negative
> return values I think doing that in iomap is also fine. But you are
> deeper into the code right now, and if you think splitting the errno
> and bytes is cleaner that sounds perfectly fine to me as well. In
> general not overloading a single return value with two things tends
> to lead to cleaner code.
>
Eh, I like the factoring that the combined return allows better, but I
don't want to get too clever and introduce type issues and whatnot in
the middle of these patches if I can help it. From what I see so far the
change to split out the error return uglifies things slightly in
iomap_iter(), but the flipside is that with the error check lifted out
the advance call from iomap_iter() can go away completely once
everything is switched over.
So if we do go with the int return for now (still testing), I might
revisit a change back to a combined s64 return (perhaps along with the
iomap_length() tweak above) in the future as a standalone cleanup when
this is all more settled and I have more mental bandwidth to think about
it. Thanks for the input.
> Although the above sniplet (I´m not sure how representative it is
> anyway) would be a bit nicer as the slightly more verbose version
> below:
>
> do {
> ...
> ret = iomap_iter_advance(iter, &bytes);
> if (ret)
> return ret;
> } while (bytes > 0);
>
Ack.
Brian
next prev parent reply other threads:[~2025-01-29 16:38 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-22 13:34 [PATCH v2 0/7] iomap: incremental per-operation iter advance Brian Foster
2025-01-22 13:34 ` [PATCH v2 1/7] iomap: split out iomap check and reset logic from " Brian Foster
2025-01-22 13:34 ` [PATCH v2 2/7] iomap: factor out iomap length helper Brian Foster
2025-01-28 5:26 ` Christoph Hellwig
2025-01-28 13:53 ` Brian Foster
2025-01-22 13:34 ` [PATCH v2 3/7] iomap: refactor iter and advance continuation logic Brian Foster
2025-01-28 5:34 ` Christoph Hellwig
2025-01-28 13:55 ` Brian Foster
2025-01-29 5:50 ` Christoph Hellwig
2025-01-22 13:34 ` [PATCH v2 4/7] iomap: support incremental iomap_iter advances Brian Foster
2025-01-28 5:35 ` Christoph Hellwig
2025-01-22 13:34 ` [PATCH v2 5/7] iomap: advance the iter directly on buffered writes Brian Foster
2025-01-28 5:36 ` Christoph Hellwig
2025-01-22 13:34 ` [PATCH v2 6/7] iomap: advance the iter directly on unshare range Brian Foster
2025-01-28 5:39 ` Christoph Hellwig
2025-01-28 13:57 ` Brian Foster
2025-01-29 5:58 ` Christoph Hellwig
2025-01-28 17:59 ` Brian Foster
2025-01-29 5:56 ` Christoph Hellwig
2025-01-29 16:40 ` Brian Foster [this message]
2025-01-22 13:34 ` [PATCH v2 7/7] iomap: advance the iter directly on zero range Brian Foster
2025-01-28 5:40 ` Christoph Hellwig
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=Z5pZ7d3hhvP6S-Qj@bfoster \
--to=bfoster@redhat.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox