NFS: Add a mount option to specify number of TCP connections to use
authorTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 27 Apr 2017 03:30:48 +0000 (23:30 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 6 Jul 2019 18:54:50 +0000 (14:54 -0400)
Allow the user to specify that the client should use multiple connections
to the server. For the moment, this functionality will be limited to
TCP and to NFSv4.x (x>0).

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/internal.h
fs/nfs/super.c

index 498fab72f70bc8b4d3033126bbe1eaa2635e6db1..bba09dace5d64e8adcbe2f6f8f76bb9ac2031744 100644 (file)
@@ -123,6 +123,7 @@ struct nfs_parsed_mount_data {
                char                    *export_path;
                int                     port;
                unsigned short          protocol;
+               unsigned short          nconnect;
        } nfs_server;
 
        void                    *lsm_opts;
index f88ddac2dcdf3454d4df613f7fd675c8ca57fc37..68ad0b8bcabdf93f852c2001f4a976c184e9221d 100644 (file)
@@ -77,6 +77,8 @@
 #define NFS_DEFAULT_VERSION 2
 #endif
 
+#define NFS_MAX_CONNECTIONS 16
+
 enum {
        /* Mount options that take no arguments */
        Opt_soft, Opt_softerr, Opt_hard,
@@ -108,6 +110,7 @@ enum {
        Opt_nfsvers,
        Opt_sec, Opt_proto, Opt_mountproto, Opt_mounthost,
        Opt_addr, Opt_mountaddr, Opt_clientaddr,
+       Opt_nconnect,
        Opt_lookupcache,
        Opt_fscache_uniq,
        Opt_local_lock,
@@ -181,6 +184,8 @@ static const match_table_t nfs_mount_option_tokens = {
        { Opt_mounthost, "mounthost=%s" },
        { Opt_mountaddr, "mountaddr=%s" },
 
+       { Opt_nconnect, "nconnect=%s" },
+
        { Opt_lookupcache, "lookupcache=%s" },
        { Opt_fscache_uniq, "fsc=%s" },
        { Opt_local_lock, "local_lock=%s" },
@@ -1549,6 +1554,11 @@ static int nfs_parse_mount_options(char *raw,
                        if (mnt->mount_server.addrlen == 0)
                                goto out_invalid_address;
                        break;
+               case Opt_nconnect:
+                       if (nfs_get_option_ul_bound(args, &option, 1, NFS_MAX_CONNECTIONS))
+                               goto out_invalid_value;
+                       mnt->nfs_server.nconnect = option;
+                       break;
                case Opt_lookupcache:
                        string = match_strdup(args);
                        if (string == NULL)