mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
NFS: pass struct nfs_client_initdata to nfs4_set_client
Passed the partially filled out structure to nfs4_set_client instead of 11 arguments that then get stashed into the structure. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
7db6e66663
commit
f3fc8f0649
|
|
@ -895,55 +895,40 @@ nfs4_find_client_sessionid(struct net *net, const struct sockaddr *addr,
|
|||
* Set up an NFS4 client
|
||||
*/
|
||||
static int nfs4_set_client(struct nfs_server *server,
|
||||
const char *hostname,
|
||||
const struct sockaddr_storage *addr,
|
||||
const size_t addrlen,
|
||||
const char *ip_addr,
|
||||
int proto, const struct rpc_timeout *timeparms,
|
||||
u32 minorversion, unsigned int nconnect,
|
||||
unsigned int max_connect,
|
||||
struct net *net,
|
||||
struct xprtsec_parms *xprtsec)
|
||||
struct nfs_client_initdata *cl_init)
|
||||
{
|
||||
struct nfs_client_initdata cl_init = {
|
||||
.hostname = hostname,
|
||||
.addr = addr,
|
||||
.addrlen = addrlen,
|
||||
.ip_addr = ip_addr,
|
||||
.nfs_mod = &nfs_v4,
|
||||
.proto = proto,
|
||||
.minorversion = minorversion,
|
||||
.net = net,
|
||||
.timeparms = timeparms,
|
||||
.cred = server->cred,
|
||||
.xprtsec = *xprtsec,
|
||||
};
|
||||
struct nfs_client *clp;
|
||||
|
||||
if (minorversion == 0)
|
||||
__set_bit(NFS_CS_REUSEPORT, &cl_init.init_flags);
|
||||
else
|
||||
cl_init.max_connect = max_connect;
|
||||
switch (proto) {
|
||||
cl_init->nfs_mod = &nfs_v4;
|
||||
cl_init->cred = server->cred;
|
||||
|
||||
if (cl_init->minorversion == 0) {
|
||||
__set_bit(NFS_CS_REUSEPORT, &cl_init->init_flags);
|
||||
cl_init->max_connect = 0;
|
||||
}
|
||||
|
||||
switch (cl_init->proto) {
|
||||
case XPRT_TRANSPORT_RDMA:
|
||||
case XPRT_TRANSPORT_TCP:
|
||||
case XPRT_TRANSPORT_TCP_TLS:
|
||||
cl_init.nconnect = nconnect;
|
||||
break;
|
||||
default:
|
||||
cl_init->nconnect = 0;
|
||||
}
|
||||
|
||||
if (server->flags & NFS_MOUNT_NORESVPORT)
|
||||
__set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags);
|
||||
__set_bit(NFS_CS_NORESVPORT, &cl_init->init_flags);
|
||||
if (server->options & NFS_OPTION_MIGRATION)
|
||||
__set_bit(NFS_CS_MIGRATION, &cl_init.init_flags);
|
||||
__set_bit(NFS_CS_MIGRATION, &cl_init->init_flags);
|
||||
if (test_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status))
|
||||
__set_bit(NFS_CS_TSM_POSSIBLE, &cl_init.init_flags);
|
||||
server->port = rpc_get_port((struct sockaddr *)addr);
|
||||
__set_bit(NFS_CS_TSM_POSSIBLE, &cl_init->init_flags);
|
||||
server->port = rpc_get_port((struct sockaddr *)cl_init->addr);
|
||||
|
||||
if (server->flags & NFS_MOUNT_NETUNREACH_FATAL)
|
||||
__set_bit(NFS_CS_NETUNREACH_FATAL, &cl_init.init_flags);
|
||||
__set_bit(NFS_CS_NETUNREACH_FATAL, &cl_init->init_flags);
|
||||
|
||||
/* Allocate or find a client reference we can use */
|
||||
clp = nfs_get_client(&cl_init);
|
||||
clp = nfs_get_client(cl_init);
|
||||
if (IS_ERR(clp))
|
||||
return PTR_ERR(clp);
|
||||
|
||||
|
|
@ -1156,6 +1141,19 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc)
|
|||
{
|
||||
struct nfs_fs_context *ctx = nfs_fc2context(fc);
|
||||
struct rpc_timeout timeparms;
|
||||
struct nfs_client_initdata cl_init = {
|
||||
.hostname = ctx->nfs_server.hostname,
|
||||
.addr = &ctx->nfs_server._address,
|
||||
.addrlen = ctx->nfs_server.addrlen,
|
||||
.ip_addr = ctx->client_address,
|
||||
.proto = ctx->nfs_server.protocol,
|
||||
.minorversion = ctx->minorversion,
|
||||
.net = fc->net_ns,
|
||||
.timeparms = &timeparms,
|
||||
.xprtsec = ctx->xprtsec,
|
||||
.nconnect = ctx->nfs_server.nconnect,
|
||||
.max_connect = ctx->nfs_server.max_connect,
|
||||
};
|
||||
int error;
|
||||
|
||||
nfs_init_timeout_values(&timeparms, ctx->nfs_server.protocol,
|
||||
|
|
@ -1175,18 +1173,7 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc)
|
|||
ctx->selected_flavor = RPC_AUTH_UNIX;
|
||||
|
||||
/* Get a client record */
|
||||
error = nfs4_set_client(server,
|
||||
ctx->nfs_server.hostname,
|
||||
&ctx->nfs_server._address,
|
||||
ctx->nfs_server.addrlen,
|
||||
ctx->client_address,
|
||||
ctx->nfs_server.protocol,
|
||||
&timeparms,
|
||||
ctx->minorversion,
|
||||
ctx->nfs_server.nconnect,
|
||||
ctx->nfs_server.max_connect,
|
||||
fc->net_ns,
|
||||
&ctx->xprtsec);
|
||||
error = nfs4_set_client(server, &cl_init);
|
||||
if (error < 0)
|
||||
return error;
|
||||
|
||||
|
|
@ -1246,18 +1233,28 @@ struct nfs_server *nfs4_create_server(struct fs_context *fc)
|
|||
struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
|
||||
{
|
||||
struct nfs_fs_context *ctx = nfs_fc2context(fc);
|
||||
struct nfs_client *parent_client;
|
||||
struct nfs_server *server, *parent_server;
|
||||
int proto, error;
|
||||
struct nfs_server *parent_server = NFS_SB(ctx->clone_data.sb);
|
||||
struct nfs_client *parent_client = parent_server->nfs_client;
|
||||
struct nfs_client_initdata cl_init = {
|
||||
.hostname = ctx->nfs_server.hostname,
|
||||
.addr = &ctx->nfs_server._address,
|
||||
.addrlen = ctx->nfs_server.addrlen,
|
||||
.ip_addr = parent_client->cl_ipaddr,
|
||||
.minorversion = parent_client->cl_mvops->minor_version,
|
||||
.net = parent_client->cl_net,
|
||||
.timeparms = parent_server->client->cl_timeout,
|
||||
.xprtsec = parent_client->cl_xprtsec,
|
||||
.nconnect = parent_client->cl_nconnect,
|
||||
.max_connect = parent_client->cl_max_connect,
|
||||
};
|
||||
struct nfs_server *server;
|
||||
bool auth_probe;
|
||||
int error;
|
||||
|
||||
server = nfs_alloc_server();
|
||||
if (!server)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
parent_server = NFS_SB(ctx->clone_data.sb);
|
||||
parent_client = parent_server->nfs_client;
|
||||
|
||||
server->cred = get_cred(parent_server->cred);
|
||||
|
||||
/* Initialise the client representation from the parent server */
|
||||
|
|
@ -1266,38 +1263,17 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
|
|||
/* Get a client representation */
|
||||
#if IS_ENABLED(CONFIG_SUNRPC_XPRT_RDMA)
|
||||
rpc_set_port(&ctx->nfs_server.address, NFS_RDMA_PORT);
|
||||
error = nfs4_set_client(server,
|
||||
ctx->nfs_server.hostname,
|
||||
&ctx->nfs_server._address,
|
||||
ctx->nfs_server.addrlen,
|
||||
parent_client->cl_ipaddr,
|
||||
XPRT_TRANSPORT_RDMA,
|
||||
parent_server->client->cl_timeout,
|
||||
parent_client->cl_mvops->minor_version,
|
||||
parent_client->cl_nconnect,
|
||||
parent_client->cl_max_connect,
|
||||
parent_client->cl_net,
|
||||
&parent_client->cl_xprtsec);
|
||||
cl_init.proto = XPRT_TRANSPORT_RDMA;
|
||||
error = nfs4_set_client(server, &cl_init);
|
||||
if (!error)
|
||||
goto init_server;
|
||||
#endif /* IS_ENABLED(CONFIG_SUNRPC_XPRT_RDMA) */
|
||||
|
||||
proto = XPRT_TRANSPORT_TCP;
|
||||
cl_init.proto = XPRT_TRANSPORT_TCP;
|
||||
if (parent_client->cl_xprtsec.policy != RPC_XPRTSEC_NONE)
|
||||
proto = XPRT_TRANSPORT_TCP_TLS;
|
||||
cl_init.proto = XPRT_TRANSPORT_TCP_TLS;
|
||||
rpc_set_port(&ctx->nfs_server.address, NFS_PORT);
|
||||
error = nfs4_set_client(server,
|
||||
ctx->nfs_server.hostname,
|
||||
&ctx->nfs_server._address,
|
||||
ctx->nfs_server.addrlen,
|
||||
parent_client->cl_ipaddr,
|
||||
proto,
|
||||
parent_server->client->cl_timeout,
|
||||
parent_client->cl_mvops->minor_version,
|
||||
parent_client->cl_nconnect,
|
||||
parent_client->cl_max_connect,
|
||||
parent_client->cl_net,
|
||||
&parent_client->cl_xprtsec);
|
||||
error = nfs4_set_client(server, &cl_init);
|
||||
if (error < 0)
|
||||
goto error;
|
||||
|
||||
|
|
@ -1353,6 +1329,19 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname,
|
|||
char buf[INET6_ADDRSTRLEN + 1];
|
||||
struct sockaddr_storage address;
|
||||
struct sockaddr *localaddr = (struct sockaddr *)&address;
|
||||
struct nfs_client_initdata cl_init = {
|
||||
.hostname = hostname,
|
||||
.addr = sap,
|
||||
.addrlen = salen,
|
||||
.ip_addr = buf,
|
||||
.proto = clp->cl_proto,
|
||||
.minorversion = clp->cl_minorversion,
|
||||
.net = net,
|
||||
.timeparms = clnt->cl_timeout,
|
||||
.xprtsec = clp->cl_xprtsec,
|
||||
.nconnect = clp->cl_nconnect,
|
||||
.max_connect = clp->cl_max_connect,
|
||||
};
|
||||
int error;
|
||||
|
||||
error = rpc_switch_client_transport(clnt, &xargs, clnt->cl_timeout);
|
||||
|
|
@ -1368,11 +1357,7 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname,
|
|||
|
||||
nfs_server_remove_lists(server);
|
||||
set_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status);
|
||||
error = nfs4_set_client(server, hostname, sap, salen, buf,
|
||||
clp->cl_proto, clnt->cl_timeout,
|
||||
clp->cl_minorversion,
|
||||
clp->cl_nconnect, clp->cl_max_connect,
|
||||
net, &clp->cl_xprtsec);
|
||||
error = nfs4_set_client(server, &cl_init);
|
||||
clear_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status);
|
||||
if (error != 0) {
|
||||
nfs_server_insert_lists(server);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user