mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
pnfs: Fix TLS logic in _nfs4_pnfs_v4_ds_connect()
[ Upstream commit28e19737e1] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f2fcc305b4
commit
b8031e779a
@@ -867,7 +867,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);
|
||||||
@@ -895,12 +898,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 =
|
||||||
@@ -931,7 +930,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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -945,15 +947,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;
|
||||||
|
|
||||||
@@ -964,7 +965,6 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
|
|||||||
clp = ERR_PTR(-EIO);
|
clp = ERR_PTR(-EIO);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user