diff mbox series

[1/1] NFS: Fix /proc/PID/io read_bytes for buffered reads

Message ID 20230309185852.1151546-2-dwysocha@redhat.com (mailing list archive)
State New, archived
Headers show
Series NFS: Fix read_bytes for buffered reads | expand

Commit Message

David Wysochanski March 9, 2023, 6:58 p.m. UTC
Prior to commit 8786fde8421c ("Convert NFS from readpages to
readahead"), nfs_readpages() used the old mm interface read_cache_pages()
which called task_io_account_read() for each NFS page read.  After
this commit, nfs_readpages() is converted to nfs_readahead(), which
now uses the new mm interface readahead_page().  The new interface
requires callers to call task_io_account_read() themselves.
In addition, to nfs_readahead() task_io_account_read() should also
be called from nfs_read_folio().

Fixes: 8786fde8421c ("Convert NFS from readpages to readahead")
Link: https://lore.kernel.org/linux-nfs/CAPt2mGNEYUk5u8V4abe=5MM5msZqmvzCVrtCP4Qw1n=gCHCnww@mail.gmail.com/
Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
---
 fs/nfs/read.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Daire Byrne March 14, 2023, 8:27 p.m. UTC | #1
Thanks Dave.

I can confirm that this does indeed fix the reporting of
/proc/PID/read_bytes for us. I actually applied it (cleanly) to our
v5.18 based kernel as we use that in production on our render farm.

We use the read_bytes in our post render statistics to help track per render IO.

Tested-by: Daire Byrne <daire@dneg.com>


On Thu, 9 Mar 2023 at 19:00, Dave Wysochanski <dwysocha@redhat.com> wrote:
>
> Prior to commit 8786fde8421c ("Convert NFS from readpages to
> readahead"), nfs_readpages() used the old mm interface read_cache_pages()
> which called task_io_account_read() for each NFS page read.  After
> this commit, nfs_readpages() is converted to nfs_readahead(), which
> now uses the new mm interface readahead_page().  The new interface
> requires callers to call task_io_account_read() themselves.
> In addition, to nfs_readahead() task_io_account_read() should also
> be called from nfs_read_folio().
>
> Fixes: 8786fde8421c ("Convert NFS from readpages to readahead")
> Link: https://lore.kernel.org/linux-nfs/CAPt2mGNEYUk5u8V4abe=5MM5msZqmvzCVrtCP4Qw1n=gCHCnww@mail.gmail.com/
> Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
> ---
>  fs/nfs/read.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/fs/nfs/read.c b/fs/nfs/read.c
> index c380cff4108e..e90988591df4 100644
> --- a/fs/nfs/read.c
> +++ b/fs/nfs/read.c
> @@ -15,6 +15,7 @@
>  #include <linux/stat.h>
>  #include <linux/mm.h>
>  #include <linux/slab.h>
> +#include <linux/task_io_accounting_ops.h>
>  #include <linux/pagemap.h>
>  #include <linux/sunrpc/clnt.h>
>  #include <linux/nfs_fs.h>
> @@ -337,6 +338,7 @@ int nfs_read_folio(struct file *file, struct folio *folio)
>
>         trace_nfs_aop_readpage(inode, folio);
>         nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
> +       task_io_account_read(folio_size(folio));
>
>         /*
>          * Try to flush any pending writes to the file..
> @@ -393,6 +395,7 @@ void nfs_readahead(struct readahead_control *ractl)
>
>         trace_nfs_aop_readahead(inode, readahead_pos(ractl), nr_pages);
>         nfs_inc_stats(inode, NFSIOS_VFSREADPAGES);
> +       task_io_account_read(readahead_length(ractl));
>
>         ret = -ESTALE;
>         if (NFS_STALE(inode))
> --
> 2.31.1
>
diff mbox series

Patch

diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index c380cff4108e..e90988591df4 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -15,6 +15,7 @@ 
 #include <linux/stat.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
+#include <linux/task_io_accounting_ops.h>
 #include <linux/pagemap.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/nfs_fs.h>
@@ -337,6 +338,7 @@  int nfs_read_folio(struct file *file, struct folio *folio)
 
 	trace_nfs_aop_readpage(inode, folio);
 	nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
+	task_io_account_read(folio_size(folio));
 
 	/*
 	 * Try to flush any pending writes to the file..
@@ -393,6 +395,7 @@  void nfs_readahead(struct readahead_control *ractl)
 
 	trace_nfs_aop_readahead(inode, readahead_pos(ractl), nr_pages);
 	nfs_inc_stats(inode, NFSIOS_VFSREADPAGES);
+	task_io_account_read(readahead_length(ractl));
 
 	ret = -ESTALE;
 	if (NFS_STALE(inode))