public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
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: Tue, 28 Jan 2025 12:59:09 -0500	[thread overview]
Message-ID: <Z5ka7TYWr7Y9TrYO@bfoster> (raw)
In-Reply-To: <Z5htdTPrS58_QKsc@infradead.org>

On Mon, Jan 27, 2025 at 09:39:01PM -0800, Christoph Hellwig wrote:
> On Wed, Jan 22, 2025 at 08:34:33AM -0500, Brian Foster wrote:
> > +	size_t bytes = iomap_length(iter);
> 
> > +		bytes = min_t(u64, SIZE_MAX, bytes);
> 
> bytes needs to be a u64 for the min logic to work on 32-bit systems.
> 

Err.. I think there's another bug here. I changed iomap_iter_advance()
to return s64 so it could return length or an error, but never changed
bytes over from size_t.

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.

Another option could be to rework advance back to something like:

	int iomap_iter_advance(..., u64 *count);

... but where it returns 0 or -EIO and advances/updates *count directly.
That would mean I'd have to tweak some of the loop factoring and lift
out the error passthru assignment logic from iomap_iter(). The latter
doesn't seem like a big deal. It's mostly pointless after these changes.
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..

Brian


  parent reply	other threads:[~2025-01-28 17:57 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 [this message]
2025-01-29  5:56       ` Christoph Hellwig
2025-01-29 16:40         ` Brian Foster
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=Z5ka7TYWr7Y9TrYO@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