Commit bbf58bf3 authored by Trond Myklebust's avatar Trond Myklebust

NFSv4.2/pnfs: Make the layoutstats timer configurable

Allow advanced users to set the layoutstats timer in order to lengthen
or shorten the period between layoutstat transmissions to the server.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 266d12d4
...@@ -2279,6 +2279,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2279,6 +2279,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
The default parameter value of '0' causes the kernel The default parameter value of '0' causes the kernel
not to attempt recovery of lost locks. not to attempt recovery of lost locks.
nfs4.layoutstats_timer =
[NFSv4.2] Change the rate at which the kernel sends
layoutstats to the pNFS metadata server.
Setting this to value to 0 causes the kernel to use
whatever value is the default set by the layout
driver. A non-zero value sets the minimum interval
in seconds between layoutstats transmissions.
nfsd.nfs4_disable_idmapping= nfsd.nfs4_disable_idmapping=
[NFSv4] When set to the default of '1', the NFSv4 [NFSv4] When set to the default of '1', the NFSv4
server will return only numeric uids and gids to server will return only numeric uids and gids to
......
...@@ -533,14 +533,17 @@ nfs4_ff_layoutstat_start_io(struct nfs4_ff_layout_mirror *mirror, ...@@ -533,14 +533,17 @@ nfs4_ff_layoutstat_start_io(struct nfs4_ff_layout_mirror *mirror,
ktime_t now) ktime_t now)
{ {
static const ktime_t notime = {0}; static const ktime_t notime = {0};
s64 report_interval = FF_LAYOUTSTATS_REPORT_INTERVAL;
nfs4_ff_start_busy_timer(&layoutstat->busy_timer, now); nfs4_ff_start_busy_timer(&layoutstat->busy_timer, now);
if (ktime_equal(mirror->start_time, notime)) if (ktime_equal(mirror->start_time, notime))
mirror->start_time = now; mirror->start_time = now;
if (ktime_equal(mirror->last_report_time, notime)) if (ktime_equal(mirror->last_report_time, notime))
mirror->last_report_time = now; mirror->last_report_time = now;
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, mirror->last_report_time)) >=
FF_LAYOUTSTATS_REPORT_INTERVAL) { report_interval) {
mirror->last_report_time = now; mirror->last_report_time = now;
return true; return true;
} }
......
...@@ -2285,3 +2285,7 @@ pnfs_report_layoutstat(struct inode *inode, gfp_t gfp_flags) ...@@ -2285,3 +2285,7 @@ pnfs_report_layoutstat(struct inode *inode, gfp_t gfp_flags)
} }
EXPORT_SYMBOL_GPL(pnfs_report_layoutstat); EXPORT_SYMBOL_GPL(pnfs_report_layoutstat);
#endif #endif
unsigned int layoutstats_timer;
module_param(layoutstats_timer, uint, 0644);
EXPORT_SYMBOL_GPL(layoutstats_timer);
...@@ -528,12 +528,15 @@ pnfs_use_threshold(struct nfs4_threshold **dst, struct nfs4_threshold *src, ...@@ -528,12 +528,15 @@ pnfs_use_threshold(struct nfs4_threshold **dst, struct nfs4_threshold *src,
nfss->pnfs_curr_ld->id == src->l_type); nfss->pnfs_curr_ld->id == src->l_type);
} }
extern unsigned int layoutstats_timer;
#ifdef NFS_DEBUG #ifdef NFS_DEBUG
void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id); void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id);
#else #else
static inline void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id) static inline void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id)
{ {
} }
#endif /* NFS_DEBUG */ #endif /* NFS_DEBUG */
#else /* CONFIG_NFS_V4_1 */ #else /* CONFIG_NFS_V4_1 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment