pnfs: Fix TLS logic in _nfs4_pnfs_v4_ds_connect()

Don't try to add an RDMA transport to a client that is already marked as
being a TCP/TLS transport.

Fixes: a35518cae4 ("NFSv4.1/pnfs: fix NFS with TLS in pnfs")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
Trond Myklebust 2025-10-18 20:10:34 -04:00 committed by Anna Schumaker
parent 7aca00d950
commit 28e19737e1
1 changed files with 17 additions and 17 deletions

View File

@ -884,7 +884,10 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
u32 minor_version) u32 minor_version)
{ {
struct nfs_client *clp = ERR_PTR(-EIO); struct nfs_client *clp = ERR_PTR(-EIO);
struct nfs_client *mds_clp = mds_srv->nfs_client;
enum xprtsec_policies xprtsec_policy = mds_clp->cl_xprtsec.policy;
struct nfs4_pnfs_ds_addr *da; struct nfs4_pnfs_ds_addr *da;
int ds_proto;
int status = 0; int status = 0;
dprintk("--> %s DS %s\n", __func__, ds->ds_remotestr); dprintk("--> %s DS %s\n", __func__, ds->ds_remotestr);
@ -912,12 +915,8 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
.data = &xprtdata, .data = &xprtdata,
}; };
if (da->da_transport != clp->cl_proto && if (xprt_args.ident == XPRT_TRANSPORT_TCP &&
clp->cl_proto != XPRT_TRANSPORT_TCP_TLS) clp->cl_proto == XPRT_TRANSPORT_TCP_TLS) {
continue;
if (da->da_transport == XPRT_TRANSPORT_TCP &&
mds_srv->nfs_client->cl_proto ==
XPRT_TRANSPORT_TCP_TLS) {
struct sockaddr *addr = struct sockaddr *addr =
(struct sockaddr *)&da->da_addr; (struct sockaddr *)&da->da_addr;
struct sockaddr_in *sin = struct sockaddr_in *sin =
@ -948,7 +947,10 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
xprt_args.ident = XPRT_TRANSPORT_TCP_TLS; xprt_args.ident = XPRT_TRANSPORT_TCP_TLS;
xprt_args.servername = servername; xprt_args.servername = servername;
} }
if (da->da_addr.ss_family != clp->cl_addr.ss_family) if (xprt_args.ident != clp->cl_proto)
continue;
if (xprt_args.dstaddr->sa_family !=
clp->cl_addr.ss_family)
continue; continue;
/** /**
@ -962,15 +964,14 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
if (xprtdata.cred) if (xprtdata.cred)
put_cred(xprtdata.cred); put_cred(xprtdata.cred);
} else { } else {
if (da->da_transport == XPRT_TRANSPORT_TCP && ds_proto = da->da_transport;
mds_srv->nfs_client->cl_proto == if (ds_proto == XPRT_TRANSPORT_TCP &&
XPRT_TRANSPORT_TCP_TLS) xprtsec_policy != RPC_XPRTSEC_NONE)
da->da_transport = XPRT_TRANSPORT_TCP_TLS; ds_proto = XPRT_TRANSPORT_TCP_TLS;
clp = nfs4_set_ds_client(mds_srv,
&da->da_addr, clp = nfs4_set_ds_client(mds_srv, &da->da_addr,
da->da_addrlen, da->da_addrlen, ds_proto,
da->da_transport, timeo, timeo, retrans, minor_version);
retrans, minor_version);
if (IS_ERR(clp)) if (IS_ERR(clp))
continue; continue;
@ -981,7 +982,6 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
clp = ERR_PTR(-EIO); clp = ERR_PTR(-EIO);
continue; continue;
} }
} }
} }