/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
*
- * Copyright (c) 2011, 2015, Intel Corporation.
+ * Copyright (c) 2011, 2017, Intel Corporation.
*
* This file is part of Lustre, https://wiki.hpdd.intel.com/
*
*/
#define DEBUG_SUBSYSTEM S_LNET
+
+#include <linux/uaccess.h>
+
+#include <libcfs/linux/linux-misc.h>
#include <libcfs/libcfs.h>
#include <lnet/lib-lnet.h>
/* This is really lnet_proc.c. You might need to update sanity test 215
* if any file format is changed. */
-static struct ctl_table_header *lnet_table_header = NULL;
-
#define LNET_LOFFT_BITS (sizeof(loff_t) * 8)
/*
* NB: max allowed LNET_CPT_BITS is 8 on 64-bit system and 2 on 32-bit system
{
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);
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;
struct lnet_peer_ni *peer;
struct list_head *p;
int skip;
+
again:
p = NULL;
peer = NULL;
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;
{
INIT_CTL_NAME
.procname = "peers",
- .mode = 0444,
+ .mode = 0644,
.proc_handler = &proc_lnet_peers,
},
{
{
INIT_CTL_NAME
.procname = "nis",
- .mode = 0444,
+ .mode = 0644,
.proc_handler = &proc_lnet_nis,
},
{
{ 0 }
};
-static struct ctl_table top_table[] = {
- {
- INIT_CTL_NAME
- .procname = "lnet",
- .mode = 0555,
- .data = NULL,
- .maxlen = 0,
- .child = lnet_table,
- },
- { 0 }
-};
-
-void
-lnet_proc_init(void)
-{
-#ifdef CONFIG_SYSCTL
- if (lnet_table_header == NULL)
- lnet_table_header = register_sysctl_table(top_table);
-#endif
-}
-
-void
-lnet_proc_fini(void)
+void lnet_router_debugfs_init(void)
{
-#ifdef CONFIG_SYSCTL
- if (lnet_table_header != NULL)
- unregister_sysctl_table(lnet_table_header);
-
- lnet_table_header = NULL;
-#endif
+ lnet_insert_debugfs(lnet_table, NULL);
}