From: Doug Oucharek Date: Thu, 26 May 2016 18:26:17 +0000 (-0700) Subject: LU-7214 lnet: Allow min stats to be reset in peers and nis X-Git-Tag: 2.9.57~34 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=dbd5ed1f9d53429dff4264a9d158adc986c5f710;p=fs%2Flustre-release.git LU-7214 lnet: Allow min stats to be reset in peers and nis Allow writes to the peers and nis LNet procfs files to reset the mininum stat columns. Signed-off-by: Doug Oucharek Change-Id: Ic7aa647a154a424b35be1598266887d27efb4ab3 Reviewed-on: https://review.whamcloud.com/20470 Tested-by: Jenkins Reviewed-by: Olaf Weber Tested-by: Maloo Reviewed-by: Amir Shehata Reviewed-by: Oleg Drokin --- diff --git a/lnet/lnet/router_proc.c b/lnet/lnet/router_proc.c index 953130f..f9d8d36 100644 --- a/lnet/lnet/router_proc.c +++ b/lnet/lnet/router_proc.c @@ -405,7 +405,7 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer, { const int tmpsiz = 256; struct lnet_peer_table *ptable; - char *tmpstr; + char *tmpstr = NULL; char *s; int cpt = LNET_PROC_CPT_GET(*ppos); int ver = LNET_PROC_VER_GET(*ppos); @@ -414,12 +414,33 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer, int rc = 0; int len; - CLASSERT(LNET_PROC_HASH_BITS >= LNET_PEER_HASH_BITS); - LASSERT(!write); + if (write) { + int i; + struct lnet_peer_ni *peer; + + cfs_percpt_for_each(ptable, i, the_lnet.ln_peer_tables) { + lnet_net_lock(i); + for (hash = 0; hash < LNET_PEER_HASH_SIZE; hash++) { + list_for_each_entry(peer, + &ptable->pt_hash[hash], + lpni_hashlist) { + peer->lpni_mintxcredits = + peer->lpni_txcredits; + peer->lpni_minrtrcredits = + peer->lpni_rtrcredits; + } + } + lnet_net_unlock(i); + } + *ppos += *lenp; + return 0; + } if (*lenp == 0) return 0; + CLASSERT(LNET_PROC_HASH_BITS >= LNET_PEER_HASH_BITS); + if (cpt >= LNET_CPT_NUMBER) { *lenp = 0; return 0; @@ -443,6 +464,7 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer, struct lnet_peer_ni *peer; struct list_head *p; int skip; + again: p = NULL; peer = NULL; @@ -640,16 +662,50 @@ proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int tmpsiz = 128 * LNET_CPT_NUMBER; - int rc = 0; - char *tmpstr; - char *s; - int len; - - LASSERT(!write); + int rc = 0; + char *tmpstr; + char *s; + int len; if (*lenp == 0) return 0; + if (write) { + /* Just reset the min stat. */ + struct lnet_ni *ni; + struct lnet_net *net; + + lnet_net_lock(0); + + list_for_each_entry(net, &the_lnet.ln_nets, net_list) { + list_for_each_entry(ni, &net->net_ni_list, ni_netlist) { + struct lnet_tx_queue *tq; + int i; + int j; + + cfs_percpt_for_each(tq, i, ni->ni_tx_queues) { + for (j = 0; ni->ni_cpts != NULL && + j < ni->ni_ncpts; j++) { + if (i == ni->ni_cpts[j]) + break; + } + + if (j == ni->ni_ncpts) + continue; + + if (i != 0) + lnet_net_lock(i); + tq->tq_credits_min = tq->tq_credits; + if (i != 0) + lnet_net_unlock(i); + } + } + } + lnet_net_unlock(0); + *ppos += *lenp; + return 0; + } + LIBCFS_ALLOC(tmpstr, tmpsiz); if (tmpstr == NULL) return -ENOMEM; @@ -875,7 +931,7 @@ static struct ctl_table lnet_table[] = { { INIT_CTL_NAME .procname = "peers", - .mode = 0444, + .mode = 0644, .proc_handler = &proc_lnet_peers, }, { @@ -887,7 +943,7 @@ static struct ctl_table lnet_table[] = { { INIT_CTL_NAME .procname = "nis", - .mode = 0444, + .mode = 0644, .proc_handler = &proc_lnet_nis, }, {