Linux network filesystem support library
 help / color / mirror / Atom feed
* [PATCH] netfs: Advance iterator correctly rather than jumping it
@ 2024-09-27  8:08 David Howells
  2024-09-27  8:11 ` Christian Brauner
  0 siblings, 1 reply; 2+ messages in thread
From: David Howells @ 2024-09-27  8:08 UTC (permalink / raw)
  To: Christian Brauner
  Cc: dhowells, Steve French, Jeff Layton, netfs, linux-fsdevel,
	linux-kernel

In netfs_write_folio(), use iov_iter_advance() to advance the folio as we
split bits of it off to subrequests rather than manually jumping the
->iov_offset value around.  This becomes more problematic when we use a
bounce buffer made out of single-page folios to cover a multipage pagecache
folio.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
---
 fs/netfs/write_issue.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/fs/netfs/write_issue.c b/fs/netfs/write_issue.c
index 0929d9fd4ce7..6293f547e4c3 100644
--- a/fs/netfs/write_issue.c
+++ b/fs/netfs/write_issue.c
@@ -317,6 +317,7 @@ static int netfs_write_folio(struct netfs_io_request *wreq,
 	struct netfs_io_stream *stream;
 	struct netfs_group *fgroup; /* TODO: Use this with ceph */
 	struct netfs_folio *finfo;
+	size_t iter_off = 0;
 	size_t fsize = folio_size(folio), flen = fsize, foff = 0;
 	loff_t fpos = folio_pos(folio), i_size;
 	bool to_eof = false, streamw = false;
@@ -472,7 +473,12 @@ static int netfs_write_folio(struct netfs_io_request *wreq,
 		if (choose_s < 0)
 			break;
 		stream = &wreq->io_streams[choose_s];
-		wreq->io_iter.iov_offset = stream->submit_off;
+
+		/* Advance the iterator(s). */
+		if (stream->submit_off > iter_off) {
+			iov_iter_advance(&wreq->io_iter, stream->submit_off - iter_off);
+			iter_off = stream->submit_off;
+		}
 
 		atomic64_set(&wreq->issued_to, fpos + stream->submit_off);
 		stream->submit_extendable_to = fsize - stream->submit_off;
@@ -487,8 +493,8 @@ static int netfs_write_folio(struct netfs_io_request *wreq,
 			debug = true;
 	}
 
-	wreq->io_iter.iov_offset = 0;
-	iov_iter_advance(&wreq->io_iter, fsize);
+	if (fsize > iter_off)
+		iov_iter_advance(&wreq->io_iter, fsize - iter_off);
 	atomic64_set(&wreq->issued_to, fpos + fsize);
 
 	if (!debug)


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] netfs: Advance iterator correctly rather than jumping it
  2024-09-27  8:08 [PATCH] netfs: Advance iterator correctly rather than jumping it David Howells
@ 2024-09-27  8:11 ` Christian Brauner
  0 siblings, 0 replies; 2+ messages in thread
From: Christian Brauner @ 2024-09-27  8:11 UTC (permalink / raw)
  To: David Howells
  Cc: Christian Brauner, Steve French, Jeff Layton, netfs,
	linux-fsdevel, linux-kernel

On Fri, 27 Sep 2024 09:08:42 +0100, David Howells wrote:
> In netfs_write_folio(), use iov_iter_advance() to advance the folio as we
> split bits of it off to subrequests rather than manually jumping the
> ->iov_offset value around.  This becomes more problematic when we use a
> bounce buffer made out of single-page folios to cover a multipage pagecache
> folio.
> 
> 
> [...]

Applied to the vfs.fixes branch of the vfs/vfs.git tree.
Patches in the vfs.fixes branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.fixes

[1/1] netfs: Advance iterator correctly rather than jumping it
      https://git.kernel.org/vfs/vfs/c/507a9ef9e851

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-09-27  8:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-27  8:08 [PATCH] netfs: Advance iterator correctly rather than jumping it David Howells
2024-09-27  8:11 ` Christian Brauner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox