|
@@ -18,6 +18,7 @@
|
|
#include <linux/sunrpc/types.h>
|
|
#include <linux/sunrpc/types.h>
|
|
#include <linux/sunrpc/sched.h>
|
|
#include <linux/sunrpc/sched.h>
|
|
#include <linux/sunrpc/stats.h>
|
|
#include <linux/sunrpc/stats.h>
|
|
|
|
+#include <linux/sunrpc/svc_xprt.h>
|
|
|
|
|
|
/*
|
|
/*
|
|
* Declare the debug flags here
|
|
* Declare the debug flags here
|
|
@@ -55,6 +56,30 @@ rpc_unregister_sysctl(void)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int proc_do_xprt(ctl_table *table, int write, struct file *file,
|
|
|
|
+ void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
|
+{
|
|
|
|
+ char tmpbuf[256];
|
|
|
|
+ int len;
|
|
|
|
+ if ((*ppos && !write) || !*lenp) {
|
|
|
|
+ *lenp = 0;
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ if (write)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ else {
|
|
|
|
+ len = svc_print_xprts(tmpbuf, sizeof(tmpbuf));
|
|
|
|
+ if (!access_ok(VERIFY_WRITE, buffer, len))
|
|
|
|
+ return -EFAULT;
|
|
|
|
+
|
|
|
|
+ if (__copy_to_user(buffer, tmpbuf, len))
|
|
|
|
+ return -EFAULT;
|
|
|
|
+ }
|
|
|
|
+ *lenp -= len;
|
|
|
|
+ *ppos += len;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static int
|
|
static int
|
|
proc_dodebug(ctl_table *table, int write, struct file *file,
|
|
proc_dodebug(ctl_table *table, int write, struct file *file,
|
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
@@ -147,6 +172,12 @@ static ctl_table debug_table[] = {
|
|
.mode = 0644,
|
|
.mode = 0644,
|
|
.proc_handler = &proc_dodebug
|
|
.proc_handler = &proc_dodebug
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ .procname = "transports",
|
|
|
|
+ .maxlen = 256,
|
|
|
|
+ .mode = 0444,
|
|
|
|
+ .proc_handler = &proc_do_xprt,
|
|
|
|
+ },
|
|
{ .ctl_name = 0 }
|
|
{ .ctl_name = 0 }
|
|
};
|
|
};
|
|
|
|
|