All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: linux-fsdevel@vger.kernel.org
Cc: dhowells@redhat.com, Jeff Layton <jlayton@redhat.com>,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Anna Schumaker <anna.schumaker@netapp.com>,
	Steve French <sfrench@samba.org>,
	Dominique Martinet <asmadeus@codewreck.org>,
	Mike Marshall <hubcap@omnibond.com>,
	David Wysochanski <dwysocha@redhat.com>,
	Shyam Prasad N <nspmangalore@gmail.com>,
	Miklos Szeredi <miklos@szeredi.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	linux-cachefs@redhat.com, linux-afs@lists.infradead.org,
	linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org,
	ceph-devel@vger.kernel.org, v9fs-developer@lists.sourceforge.net,
	devel@lists.orangefs.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: [RFC PATCH 03/12] netfs: Remove netfs_read_subrequest::transferred
Date: Wed, 21 Jul 2021 14:45:11 +0100	[thread overview]
Message-ID: <162687511125.276387.15493860267582539643.stgit@warthog.procyon.org.uk> (raw)
In-Reply-To: <162687506932.276387.14456718890524355509.stgit@warthog.procyon.org.uk>

Remove netfs_read_subrequest::transferred as it's redundant as the count on
the iterator added to the subrequest can be used instead.

Signed-off-by: David Howells <dhowells@redhat.com>
---

 fs/afs/file.c                |    4 ++--
 fs/netfs/read_helper.c       |   26 ++++----------------------
 include/linux/netfs.h        |    1 -
 include/trace/events/netfs.h |   12 ++++++------
 4 files changed, 12 insertions(+), 31 deletions(-)

diff --git a/fs/afs/file.c b/fs/afs/file.c
index ca529f23515a..82e945dbe379 100644
--- a/fs/afs/file.c
+++ b/fs/afs/file.c
@@ -315,8 +315,8 @@ static void afs_req_issue_op(struct netfs_read_subrequest *subreq)
 		return netfs_subreq_terminated(subreq, -ENOMEM, false);
 
 	fsreq->subreq	= subreq;
-	fsreq->pos	= subreq->start + subreq->transferred;
-	fsreq->len	= subreq->len   - subreq->transferred;
+	fsreq->pos	= subreq->start + subreq->len - iov_iter_count(&subreq->iter);
+	fsreq->len	= iov_iter_count(&subreq->iter);
 	fsreq->key	= subreq->rreq->netfs_priv;
 	fsreq->vnode	= vnode;
 	fsreq->iter	= &subreq->iter;
diff --git a/fs/netfs/read_helper.c b/fs/netfs/read_helper.c
index 715f3e9c380d..5e1a9be48130 100644
--- a/fs/netfs/read_helper.c
+++ b/fs/netfs/read_helper.c
@@ -148,12 +148,7 @@ static void __netfs_put_subrequest(struct netfs_read_subrequest *subreq,
  */
 static void netfs_clear_unread(struct netfs_read_subrequest *subreq)
 {
-	struct iov_iter iter;
-
-	iov_iter_xarray(&iter, READ, &subreq->rreq->mapping->i_pages,
-			subreq->start + subreq->transferred,
-			subreq->len   - subreq->transferred);
-	iov_iter_zero(iov_iter_count(&iter), &iter);
+	iov_iter_zero(iov_iter_count(&subreq->iter), &subreq->iter);
 }
 
 static void netfs_cache_read_terminated(void *priv, ssize_t transferred_or_error,
@@ -173,14 +168,9 @@ static void netfs_read_from_cache(struct netfs_read_request *rreq,
 				  bool seek_data)
 {
 	struct netfs_cache_resources *cres = &rreq->cache_resources;
-	struct iov_iter iter;
 
 	netfs_stat(&netfs_n_rh_read);
-	iov_iter_xarray(&iter, READ, &rreq->mapping->i_pages,
-			subreq->start + subreq->transferred,
-			subreq->len   - subreq->transferred);
-
-	cres->ops->read(cres, subreq->start, &iter, seek_data,
+	cres->ops->read(cres, subreq->start, &subreq->iter, seek_data,
 			netfs_cache_read_terminated, subreq);
 }
 
@@ -419,7 +409,7 @@ static void netfs_rreq_unlock(struct netfs_read_request *rreq)
 			if (pgend < iopos + subreq->len)
 				break;
 
-			account += subreq->transferred;
+			account += subreq->len - iov_iter_count(&subreq->iter);
 			iopos += subreq->len;
 			if (!list_is_last(&subreq->rreq_link, &rreq->subrequests)) {
 				subreq = list_next_entry(subreq, rreq_link);
@@ -635,15 +625,8 @@ void netfs_subreq_terminated(struct netfs_read_subrequest *subreq,
 		goto failed;
 	}
 
-	if (WARN(transferred_or_error > subreq->len - subreq->transferred,
-		 "Subreq overread: R%x[%x] %zd > %zu - %zu",
-		 rreq->debug_id, subreq->debug_index,
-		 transferred_or_error, subreq->len, subreq->transferred))
-		transferred_or_error = subreq->len - subreq->transferred;
-
 	subreq->error = 0;
-	subreq->transferred += transferred_or_error;
-	if (subreq->transferred < subreq->len)
+	if (iov_iter_count(&subreq->iter))
 		goto incomplete;
 
 complete:
@@ -667,7 +650,6 @@ void netfs_subreq_terminated(struct netfs_read_subrequest *subreq,
 incomplete:
 	if (test_bit(NETFS_SREQ_CLEAR_TAIL, &subreq->flags)) {
 		netfs_clear_unread(subreq);
-		subreq->transferred = subreq->len;
 		goto complete;
 	}
 
diff --git a/include/linux/netfs.h b/include/linux/netfs.h
index 5e4fafcc9480..45d40c622205 100644
--- a/include/linux/netfs.h
+++ b/include/linux/netfs.h
@@ -116,7 +116,6 @@ struct netfs_read_subrequest {
 	struct iov_iter		iter;		/* Iterator for this subrequest */
 	loff_t			start;		/* Where to start the I/O */
 	size_t			len;		/* Size of the I/O */
-	size_t			transferred;	/* Amount of data transferred */
 	refcount_t		usage;
 	short			error;		/* 0 or error that occurred */
 	unsigned short		debug_index;	/* Index in list (for debugging output) */
diff --git a/include/trace/events/netfs.h b/include/trace/events/netfs.h
index 4d470bffd9f1..04ac29fc700f 100644
--- a/include/trace/events/netfs.h
+++ b/include/trace/events/netfs.h
@@ -190,7 +190,7 @@ TRACE_EVENT(netfs_sreq,
 		    __field(enum netfs_read_source,	source		)
 		    __field(enum netfs_sreq_trace,	what		)
 		    __field(size_t,			len		)
-		    __field(size_t,			transferred	)
+		    __field(size_t,			remain		)
 		    __field(loff_t,			start		)
 			     ),
 
@@ -202,7 +202,7 @@ TRACE_EVENT(netfs_sreq,
 		    __entry->source	= sreq->source;
 		    __entry->what	= what;
 		    __entry->len	= sreq->len;
-		    __entry->transferred = sreq->transferred;
+		    __entry->remain	= iov_iter_count(&sreq->iter);
 		    __entry->start	= sreq->start;
 			   ),
 
@@ -211,7 +211,7 @@ TRACE_EVENT(netfs_sreq,
 		      __print_symbolic(__entry->what, netfs_sreq_traces),
 		      __print_symbolic(__entry->source, netfs_sreq_sources),
 		      __entry->flags,
-		      __entry->start, __entry->transferred, __entry->len,
+		      __entry->start, __entry->len - __entry->remain, __entry->len,
 		      __entry->error)
 	    );
 
@@ -230,7 +230,7 @@ TRACE_EVENT(netfs_failure,
 		    __field(enum netfs_read_source,	source		)
 		    __field(enum netfs_failure,		what		)
 		    __field(size_t,			len		)
-		    __field(size_t,			transferred	)
+		    __field(size_t,			remain		)
 		    __field(loff_t,			start		)
 			     ),
 
@@ -242,7 +242,7 @@ TRACE_EVENT(netfs_failure,
 		    __entry->source	= sreq ? sreq->source : NETFS_INVALID_READ;
 		    __entry->what	= what;
 		    __entry->len	= sreq ? sreq->len : 0;
-		    __entry->transferred = sreq ? sreq->transferred : 0;
+		    __entry->remain	= sreq ? iov_iter_count(&sreq->iter) : 0;
 		    __entry->start	= sreq ? sreq->start : 0;
 			   ),
 
@@ -250,7 +250,7 @@ TRACE_EVENT(netfs_failure,
 		      __entry->rreq, __entry->index,
 		      __print_symbolic(__entry->source, netfs_sreq_sources),
 		      __entry->flags,
-		      __entry->start, __entry->transferred, __entry->len,
+		      __entry->start, __entry->len - __entry->remain, __entry->len,
 		      __print_symbolic(__entry->what, netfs_failures),
 		      __entry->error)
 	    );



  parent reply	other threads:[~2021-07-21 13:45 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-21 13:44 David Howells
2021-07-21 13:44 ` [RFC PATCH 01/12] afs: Sort out symlink reading David Howells
2021-07-21 16:20   ` Jeff Layton
2021-07-21 16:20     ` Jeff Layton
2021-07-26  9:44   ` David Howells
2021-07-21 13:44 ` [RFC PATCH 02/12] netfs: Add an iov_iter to the read subreq for the network fs/cache to use David Howells
2021-07-21 17:16   ` Jeff Layton
2021-07-21 17:16     ` Jeff Layton
2021-07-21 17:20   ` David Howells
2021-07-21 13:45 ` David Howells [this message]
2021-07-21 17:43   ` [RFC PATCH 03/12] netfs: Remove netfs_read_subrequest::transferred Jeff Layton
2021-07-21 17:43     ` Jeff Layton
2021-07-21 18:54   ` David Howells
2021-07-21 19:00     ` Jeff Layton
2021-07-21 19:00       ` Jeff Layton
2021-07-21 13:45 ` [RFC PATCH 04/12] netfs: Use a buffer in netfs_read_request and add pages to it David Howells
2021-07-21 13:45 ` [RFC PATCH 05/12] netfs: Add a netfs inode context David Howells
2021-07-21 13:46 ` [RFC PATCH 06/12] netfs: Keep lists of pending, active, dirty and flushed regions David Howells
2021-07-21 13:46 ` [RFC PATCH 07/12] netfs: Initiate write request from a dirty region David Howells
2021-07-21 13:46 ` [RFC PATCH 08/12] netfs: Keep dirty mark for pages with more than one " David Howells
2021-07-21 13:46 ` [RFC PATCH 09/12] netfs: Send write request to multiple destinations David Howells
2021-07-21 13:46 ` [RFC PATCH 10/12] netfs: Do encryption in write preparatory phase David Howells
2021-07-21 13:47 ` [RFC PATCH 11/12] netfs: Put a list of regions in /proc/fs/netfs/regions David Howells
2021-07-21 13:47 ` [RFC PATCH 12/12] netfs: Export some read-request ref functions David Howells
2021-07-21 14:00 ` [RFC PATCH 00/12] netfs: Experimental write helpers, fscrypt and compression David Howells
2021-07-21 18:42 ` [RFC PATCH 13/12] netfs: Do copy-to-cache-on-read through VM writeback David Howells

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=162687511125.276387.15493860267582539643.stgit@warthog.procyon.org.uk \
    --to=dhowells@redhat.com \
    --cc=anna.schumaker@netapp.com \
    --cc=asmadeus@codewreck.org \
    --cc=ceph-devel@vger.kernel.org \
    --cc=devel@lists.orangefs.org \
    --cc=dwysocha@redhat.com \
    --cc=hubcap@omnibond.com \
    --cc=jlayton@redhat.com \
    --cc=linux-afs@lists.infradead.org \
    --cc=linux-cachefs@redhat.com \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=nspmangalore@gmail.com \
    --cc=sfrench@samba.org \
    --cc=torvalds@linux-foundation.org \
    --cc=v9fs-developer@lists.sourceforge.net \
    --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.