]> git.baikalelectronics.ru Git - kernel.git/commitdiff
NFSv4/pNFS: Use connections to a DS that are all of the same protocol family
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 6 Nov 2020 21:58:53 +0000 (16:58 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 2 Dec 2020 19:05:53 +0000 (14:05 -0500)
If the pNFS metadata server advertises multiple addresses for the same
data server, we should try to connect to just one protocol family and
transport type on the assumption that homogeneity will improve performance.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/pnfs_nfs.c

index 679767ac258d0c2ed703df26b8a0dffa0faf25a2..ee6d003db844c4174369fe3c7a02dbed7ed82493 100644 (file)
@@ -860,6 +860,9 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv,
                                .addrlen = da->da_addrlen,
                                .servername = clp->cl_hostname,
                        };
+
+                       if (da->da_addr.ss_family != clp->cl_addr.ss_family)
+                               continue;
                        /* Add this address as an alias */
                        rpc_clnt_add_xprt(clp->cl_rpcclient, &xprt_args,
                                        rpc_clnt_test_and_add_xprt, NULL);
@@ -913,17 +916,19 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
                        };
                        struct nfs4_add_xprt_data xprtdata = {
                                .clp = clp,
-                               .cred = nfs4_get_clid_cred(clp),
                        };
                        struct rpc_add_xprt_test rpcdata = {
                                .add_xprt_test = clp->cl_mvops->session_trunk,
                                .data = &xprtdata,
                        };
 
+                       if (da->da_addr.ss_family != clp->cl_addr.ss_family)
+                               continue;
                        /**
                        * Test this address for session trunking and
                        * add as an alias
                        */
+                       xprtdata.cred = nfs4_get_clid_cred(clp),
                        rpc_clnt_add_xprt(clp->cl_rpcclient, &xprt_args,
                                          rpc_clnt_setup_test_and_add_xprt,
                                          &rpcdata);