|
@@ -39,6 +39,7 @@ enum {
|
|
|
NFSD_Versions,
|
|
|
NFSD_Ports,
|
|
|
NFSD_MaxBlkSize,
|
|
|
+ NFSD_MaxConnections,
|
|
|
NFSD_SupportedEnctypes,
|
|
|
/*
|
|
|
* The below MUST come last. Otherwise we leave a hole in nfsd_files[]
|
|
@@ -62,6 +63,7 @@ static ssize_t write_pool_threads(struct file *file, char *buf, size_t size);
|
|
|
static ssize_t write_versions(struct file *file, char *buf, size_t size);
|
|
|
static ssize_t write_ports(struct file *file, char *buf, size_t size);
|
|
|
static ssize_t write_maxblksize(struct file *file, char *buf, size_t size);
|
|
|
+static ssize_t write_maxconn(struct file *file, char *buf, size_t size);
|
|
|
#ifdef CONFIG_NFSD_V4
|
|
|
static ssize_t write_leasetime(struct file *file, char *buf, size_t size);
|
|
|
static ssize_t write_gracetime(struct file *file, char *buf, size_t size);
|
|
@@ -77,6 +79,7 @@ static ssize_t (*write_op[])(struct file *, char *, size_t) = {
|
|
|
[NFSD_Versions] = write_versions,
|
|
|
[NFSD_Ports] = write_ports,
|
|
|
[NFSD_MaxBlkSize] = write_maxblksize,
|
|
|
+ [NFSD_MaxConnections] = write_maxconn,
|
|
|
#ifdef CONFIG_NFSD_V4
|
|
|
[NFSD_Leasetime] = write_leasetime,
|
|
|
[NFSD_Gracetime] = write_gracetime,
|
|
@@ -886,6 +889,44 @@ static ssize_t write_maxblksize(struct file *file, char *buf, size_t size)
|
|
|
nfsd_max_blksize);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * write_maxconn - Set or report the current max number of connections
|
|
|
+ *
|
|
|
+ * Input:
|
|
|
+ * buf: ignored
|
|
|
+ * size: zero
|
|
|
+ * OR
|
|
|
+ *
|
|
|
+ * Input:
|
|
|
+ * buf: C string containing an unsigned
|
|
|
+ * integer value representing the new
|
|
|
+ * number of max connections
|
|
|
+ * size: non-zero length of C string in @buf
|
|
|
+ * Output:
|
|
|
+ * On success: passed-in buffer filled with '\n'-terminated C string
|
|
|
+ * containing numeric value of max_connections setting
|
|
|
+ * for this net namespace;
|
|
|
+ * return code is the size in bytes of the string
|
|
|
+ * On error: return code is zero or a negative errno value
|
|
|
+ */
|
|
|
+static ssize_t write_maxconn(struct file *file, char *buf, size_t size)
|
|
|
+{
|
|
|
+ char *mesg = buf;
|
|
|
+ struct net *net = file->f_dentry->d_sb->s_fs_info;
|
|
|
+ struct nfsd_net *nn = net_generic(net, nfsd_net_id);
|
|
|
+ unsigned int maxconn = nn->max_connections;
|
|
|
+
|
|
|
+ if (size > 0) {
|
|
|
+ int rv = get_uint(&mesg, &maxconn);
|
|
|
+
|
|
|
+ if (rv)
|
|
|
+ return rv;
|
|
|
+ nn->max_connections = maxconn;
|
|
|
+ }
|
|
|
+
|
|
|
+ return scnprintf(buf, SIMPLE_TRANSACTION_LIMIT, "%u\n", maxconn);
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_NFSD_V4
|
|
|
static ssize_t __nfsd4_write_time(struct file *file, char *buf, size_t size,
|
|
|
time_t *time, struct nfsd_net *nn)
|
|
@@ -1061,6 +1102,7 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent)
|
|
|
[NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR},
|
|
|
[NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO},
|
|
|
[NFSD_MaxBlkSize] = {"max_block_size", &transaction_ops, S_IWUSR|S_IRUGO},
|
|
|
+ [NFSD_MaxConnections] = {"max_connections", &transaction_ops, S_IWUSR|S_IRUGO},
|
|
|
#if defined(CONFIG_SUNRPC_GSS) || defined(CONFIG_SUNRPC_GSS_MODULE)
|
|
|
[NFSD_SupportedEnctypes] = {"supported_krb5_enctypes", &supported_enctypes_ops, S_IRUGO},
|
|
|
#endif /* CONFIG_SUNRPC_GSS or CONFIG_SUNRPC_GSS_MODULE */
|