Patch "pNFS/flexfiles: Fix layoutstat periodic reporting" has been added to the 4.7-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
pNFS/flexfiles: Fix layoutstat periodic reporting
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pnfs-flexfiles-fix-layoutstat-periodic-reporting.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1c8d477a77e2d1d3504419e7f2e02e6422becf9aMon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Sun, 14 Aug 2016 12:47:49 -0400
Subject: pNFS/flexfiles: Fix layoutstat periodic reporting
From: Trond Myklebust <[email protected]>
commit 1c8d477a77e2d1d3504419e7f2e02e6422becf9a upstream.
Putting the periodicity timer in the mirror instances is causing non-scalable reporting behaviour and missed reporting intervals. When you recall layouts and/or implement client side mirroring, it leads to consecutive reports with only a few ms between RPC calls.
--- fs/nfs/flexfilelayout/flexfilelayout.c | 8 ++++---- fs/nfs/flexfilelayout/flexfilelayout.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-)
fs/nfs/flexfilelayout/flexfilelayout.c +4 -4
@@ -37,6 +37,7 @@ ff_layout_alloc_layout_hdr(struct inodeif (ffl) {INIT_LIST_HEAD (&ffl->error_list);INIT_LIST_HEAD (&ffl->mirrors); + ffl->last_report_time =ktime_get ();return &ffl->generic_hdr; }else return NULL ;
@@ -640,19 +641,18 @@ nfs4_ff_layoutstat_start_io(struct nfs4_ {static const ktime_t notime = {0 };s64 report_interval =FF_LAYOUTSTATS_REPORT_INTERVAL ; +struct nfs4_flexfile_layout *ffl =FF_LAYOUT_FROM_HDR (mirror->layout);nfs4_ff_start_busy_timer (&layoutstat->busy_timer, now);if (ktime_equal (mirror->start_time, notime)) mirror->start_time = now; -if (ktime_equal (mirror->last_report_time, notime)) - mirror->last_report_time = now;if (mirror->report_interval !=0 ) report_interval = (s64 )mirror->report_interval *1000LL ;else if (layoutstats_timer !=0 ) report_interval = (s64 )layoutstats_timer *1000LL ; -if (ktime_to_ms (ktime_sub (now, mirror->last_report_time)) >= +if (ktime_to_ms (ktime_sub (now, ffl->last_report_time)) >= report_interval) { - mirror->last_report_time = now; + ffl->last_report_time = now;return true; }
fs/nfs/flexfilelayout/flexfilelayout.h +1 -1
@@ -84,7 +84,6 @@ struct nfs4_ff_layout_mirror {struct nfs4_ff_layoutstat read_stat;struct nfs4_ff_layoutstat write_stat;ktime_t start_time; -ktime_t last_report_time;u32 report_interval; };
@@ -101,6 +100,7 @@ struct nfs4_flexfile_layout {struct pnfs_ds_commit_info commit_info;struct list_head mirrors;struct list_head error_list;/* nfs4_ff_layout_ds_err */ +ktime_t last_report_time;/* Layoutstat report times */ }; static inline struct nfs4_flexfile_layout *
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/nfs-pnfs-do-not-clobber-existing-pgio_done_cb-in-nfs4_proc_read_setup.patch queue-4.7/pnfs-flexfiles-fix-layoutcommit-after-a-commit-to-ds.patch queue-4.7/pnfs-flexfiles-fix-layoutstat-periodic-reporting.patch queue-4.7/pnfs-files-fix-layoutcommit-after-a-commit-to-ds.patch queue-4.7/sunrpc-silence-warn_on-when-nfsv4.1-over-rdma-is-in-use.patch