diff options
Diffstat (limited to 'fs/nfs/pnfs_nfs.c')
-rw-r--r-- | fs/nfs/pnfs_nfs.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c index 81ac6480f9e7..4aaed890048f 100644 --- a/fs/nfs/pnfs_nfs.c +++ b/fs/nfs/pnfs_nfs.c | |||
@@ -606,12 +606,22 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv, | |||
606 | dprintk("%s: DS %s: trying address %s\n", | 606 | dprintk("%s: DS %s: trying address %s\n", |
607 | __func__, ds->ds_remotestr, da->da_remotestr); | 607 | __func__, ds->ds_remotestr, da->da_remotestr); |
608 | 608 | ||
609 | clp = get_v3_ds_connect(mds_srv->nfs_client, | 609 | if (!IS_ERR(clp)) { |
610 | struct xprt_create xprt_args = { | ||
611 | .ident = XPRT_TRANSPORT_TCP, | ||
612 | .net = clp->cl_net, | ||
613 | .dstaddr = (struct sockaddr *)&da->da_addr, | ||
614 | .addrlen = da->da_addrlen, | ||
615 | .servername = clp->cl_hostname, | ||
616 | }; | ||
617 | /* Add this address as an alias */ | ||
618 | rpc_clnt_add_xprt(clp->cl_rpcclient, &xprt_args, | ||
619 | rpc_clnt_test_and_add_xprt, NULL); | ||
620 | } else | ||
621 | clp = get_v3_ds_connect(mds_srv->nfs_client, | ||
610 | (struct sockaddr *)&da->da_addr, | 622 | (struct sockaddr *)&da->da_addr, |
611 | da->da_addrlen, IPPROTO_TCP, | 623 | da->da_addrlen, IPPROTO_TCP, |
612 | timeo, retrans, au_flavor); | 624 | timeo, retrans, au_flavor); |
613 | if (!IS_ERR(clp)) | ||
614 | break; | ||
615 | } | 625 | } |
616 | 626 | ||
617 | if (IS_ERR(clp)) { | 627 | if (IS_ERR(clp)) { |