NFSD_Versions,
        NFSD_Ports,
        NFSD_MaxBlkSize,
+       NFSD_MaxConnections,
        NFSD_SupportedEnctypes,
        /*
         * The below MUST come last.  Otherwise we leave a hole in nfsd_files[]
 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);
        [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,
                                                        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)
                [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 */
 
        if (nn->nfsd_serv == NULL)
                return -ENOMEM;
 
+       nn->nfsd_serv->sv_maxconn = nn->max_connections;
        error = svc_bind(nn->nfsd_serv, net);
        if (error < 0) {
                svc_destroy(nn->nfsd_serv);
        struct svc_rqst *rqstp = (struct svc_rqst *) vrqstp;
        struct svc_xprt *perm_sock = list_entry(rqstp->rq_server->sv_permsocks.next, typeof(struct svc_xprt), xpt_list);
        struct net *net = perm_sock->xpt_net;
+       struct nfsd_net *nn = net_generic(net, nfsd_net_id);
        int err;
 
        /* Lock module and set up kernel thread */
         * The main request loop
         */
        for (;;) {
+               /* Update sv_maxconn if it has changed */
+               rqstp->rq_server->sv_maxconn = nn->max_connections;
+
                /*
                 * Find a socket with data available and call its
                 * recvfrom routine.