|
@@ -606,12 +606,22 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv,
|
|
|
dprintk("%s: DS %s: trying address %s\n",
|
|
|
__func__, ds->ds_remotestr, da->da_remotestr);
|
|
|
|
|
|
- clp = get_v3_ds_connect(mds_srv->nfs_client,
|
|
|
+ if (!IS_ERR(clp)) {
|
|
|
+ struct xprt_create xprt_args = {
|
|
|
+ .ident = XPRT_TRANSPORT_TCP,
|
|
|
+ .net = clp->cl_net,
|
|
|
+ .dstaddr = (struct sockaddr *)&da->da_addr,
|
|
|
+ .addrlen = da->da_addrlen,
|
|
|
+ .servername = clp->cl_hostname,
|
|
|
+ };
|
|
|
+ /* Add this address as an alias */
|
|
|
+ rpc_clnt_add_xprt(clp->cl_rpcclient, &xprt_args,
|
|
|
+ rpc_clnt_test_and_add_xprt, NULL);
|
|
|
+ } else
|
|
|
+ clp = get_v3_ds_connect(mds_srv->nfs_client,
|
|
|
(struct sockaddr *)&da->da_addr,
|
|
|
da->da_addrlen, IPPROTO_TCP,
|
|
|
timeo, retrans, au_flavor);
|
|
|
- if (!IS_ERR(clp))
|
|
|
- break;
|
|
|
}
|
|
|
|
|
|
if (IS_ERR(clp)) {
|