* nfs: wrong function to increment NFSIOS_READPAGES/WRITEPAGES stat counters?
@ 2015-03-24 12:53 Nicolas Iooss
2015-04-16 10:48 ` [PATCH] Revert "nfs: replace nfs_add_stats with nfs_inc_stats when add one" Nicolas Iooss
0 siblings, 1 reply; 2+ messages in thread
From: Nicolas Iooss @ 2015-03-24 12:53 UTC (permalink / raw)
To: Li RongQing, Trond Myklebust, Anna Schumaker
Cc: linux-nfs, linux-kernel@vger.kernel.org
Hello,
Since commit 5a254d08b086 ("nfs: replace nfs_add_stats with
nfs_inc_stats when add one") [1], nfs_readpage and nfs_do_writepage use
nfs_inc_stats to increment NFSIOS_READPAGES and NFSIOS_WRITEPAGES
instead of nfs_add_stats.
However nfs_inc_stats is not similar as nfs_add_stats with parameter 1
because these functions work on distinct stats:
nfs_inc_stats increments stats from "enum nfs_stat_eventcounters" (in
server->io_stats->events) and nfs_add_stats those from "enum
nfs_stat_bytecounters" (in server->io_stats->bytes), according to their
implementations in fs/nfs/iostat.h [2].
If I understand the code correctly, "nfs_inc_stats(inode,
NFSIOS_READPAGES);" is in fact executed as "nfs_inc_stats(inode,
NFSIOS_VFSACCESS);" and "nfs_inc_stats(inode, NFSIOS_WRITEPAGES);" as
"nfs_inc_stats(inode, NFSIOS_VFSUPDATEPAGE);".
As this looks like a bug to me, I am reporting it in hope it could be
fixed, for example by reverting 5a254d08b086. Of course, I may be
wrong, in which case an explanation about what I missed in my analysis
would be appreciated.
By the way, I found this while trying to compile LLVMLinux on current
master branch of Linux. clang reported the following warnings:
fs/nfs/read.c:287:23: warning: implicit conversion from enumeration type
'enum nfs_stat_bytecounters' to different enumeration type 'enum
nfs_stat_eventcounters' [-Wenum-conversion]
nfs_inc_stats(inode, NFSIOS_READPAGES);
~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~
fs/nfs/write.c:583:23: warning: implicit conversion from enumeration
type 'enum nfs_stat_bytecounters' to different enumeration type 'enum
nfs_stat_eventcounters' [-Wenum-conversion]
nfs_inc_stats(inode, NFSIOS_WRITEPAGES);
~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~
Thanks,
Nicolas
[1]
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5a254d08b086d80cbead2ebcee6d2a4b3a15587a
[2]
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/nfs/iostat.h?id=90a5a895cc8b284ac522757a01de15e36710c2b9
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH] Revert "nfs: replace nfs_add_stats with nfs_inc_stats when add one"
2015-03-24 12:53 nfs: wrong function to increment NFSIOS_READPAGES/WRITEPAGES stat counters? Nicolas Iooss
@ 2015-04-16 10:48 ` Nicolas Iooss
0 siblings, 0 replies; 2+ messages in thread
From: Nicolas Iooss @ 2015-04-16 10:48 UTC (permalink / raw)
To: roy.qing.li, trond.myklebust, anna.schumaker, linux-nfs
Cc: linux-kernel, Nicolas Iooss
This reverts commit 5a254d08b086d80cbead2ebcee6d2a4b3a15587a.
Since commit 5a254d08b086 ("nfs: replace nfs_add_stats with
nfs_inc_stats when add one"), nfs_readpage and nfs_do_writepage use
nfs_inc_stats to increment NFSIOS_READPAGES and NFSIOS_WRITEPAGES
instead of nfs_add_stats.
However nfs_inc_stats does not do the same thing as nfs_add_stats with
value 1 because these functions work on distinct stats:
nfs_inc_stats increments stats from "enum nfs_stat_eventcounters" (in
server->io_stats->events) and nfs_add_stats those from "enum
nfs_stat_bytecounters" (in server->io_stats->bytes).
Signed-off-by: Nicolas Iooss <nicolas.iooss_linux@m4x.org>
---
As I haven't got any reply from the message I sent a few weeks ago, I
am now sending a patch.
More details about the reason of this revert can be found in my
previous e-mail, https://lkml.org/lkml/2015/3/24/226.
fs/nfs/read.c | 2 +-
fs/nfs/write.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 568ecf0a880f..848d8b1db4ce 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -284,7 +284,7 @@ int nfs_readpage(struct file *file, struct page *page)
dprintk("NFS: nfs_readpage (%p %ld@%lu)\n",
page, PAGE_CACHE_SIZE, page_file_index(page));
nfs_inc_stats(inode, NFSIOS_VFSREADPAGE);
- nfs_inc_stats(inode, NFSIOS_READPAGES);
+ nfs_add_stats(inode, NFSIOS_READPAGES, 1);
/*
* Try to flush any pending writes to the file..
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 759931088094..fae7f97ad34d 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -580,7 +580,7 @@ static int nfs_do_writepage(struct page *page, struct writeback_control *wbc, st
int ret;
nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGE);
- nfs_inc_stats(inode, NFSIOS_WRITEPAGES);
+ nfs_add_stats(inode, NFSIOS_WRITEPAGES, 1);
nfs_pageio_cond_complete(pgio, page_file_index(page));
ret = nfs_page_async_flush(pgio, page, wbc->sync_mode == WB_SYNC_NONE);
--
2.3.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-04-16 10:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-24 12:53 nfs: wrong function to increment NFSIOS_READPAGES/WRITEPAGES stat counters? Nicolas Iooss
2015-04-16 10:48 ` [PATCH] Revert "nfs: replace nfs_add_stats with nfs_inc_stats when add one" Nicolas Iooss
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).