Skip to content

Commit f3fc8f0

Browse files
Christoph HellwigTrond Myklebust
authored andcommitted
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>
1 parent 7db6e66 commit f3fc8f0

1 file changed

Lines changed: 68 additions & 83 deletions

File tree

fs/nfs/nfs4client.c

Lines changed: 68 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -895,55 +895,40 @@ nfs4_find_client_sessionid(struct net *net, const struct sockaddr *addr,
895895
* Set up an NFS4 client
896896
*/
897897
static int nfs4_set_client(struct nfs_server *server,
898-
const char *hostname,
899-
const struct sockaddr_storage *addr,
900-
const size_t addrlen,
901-
const char *ip_addr,
902-
int proto, const struct rpc_timeout *timeparms,
903-
u32 minorversion, unsigned int nconnect,
904-
unsigned int max_connect,
905-
struct net *net,
906-
struct xprtsec_parms *xprtsec)
898+
struct nfs_client_initdata *cl_init)
907899
{
908-
struct nfs_client_initdata cl_init = {
909-
.hostname = hostname,
910-
.addr = addr,
911-
.addrlen = addrlen,
912-
.ip_addr = ip_addr,
913-
.nfs_mod = &nfs_v4,
914-
.proto = proto,
915-
.minorversion = minorversion,
916-
.net = net,
917-
.timeparms = timeparms,
918-
.cred = server->cred,
919-
.xprtsec = *xprtsec,
920-
};
921900
struct nfs_client *clp;
922901

923-
if (minorversion == 0)
924-
__set_bit(NFS_CS_REUSEPORT, &cl_init.init_flags);
925-
else
926-
cl_init.max_connect = max_connect;
927-
switch (proto) {
902+
cl_init->nfs_mod = &nfs_v4;
903+
cl_init->cred = server->cred;
904+
905+
if (cl_init->minorversion == 0) {
906+
__set_bit(NFS_CS_REUSEPORT, &cl_init->init_flags);
907+
cl_init->max_connect = 0;
908+
}
909+
910+
switch (cl_init->proto) {
928911
case XPRT_TRANSPORT_RDMA:
929912
case XPRT_TRANSPORT_TCP:
930913
case XPRT_TRANSPORT_TCP_TLS:
931-
cl_init.nconnect = nconnect;
914+
break;
915+
default:
916+
cl_init->nconnect = 0;
932917
}
933918

934919
if (server->flags & NFS_MOUNT_NORESVPORT)
935-
__set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags);
920+
__set_bit(NFS_CS_NORESVPORT, &cl_init->init_flags);
936921
if (server->options & NFS_OPTION_MIGRATION)
937-
__set_bit(NFS_CS_MIGRATION, &cl_init.init_flags);
922+
__set_bit(NFS_CS_MIGRATION, &cl_init->init_flags);
938923
if (test_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status))
939-
__set_bit(NFS_CS_TSM_POSSIBLE, &cl_init.init_flags);
940-
server->port = rpc_get_port((struct sockaddr *)addr);
924+
__set_bit(NFS_CS_TSM_POSSIBLE, &cl_init->init_flags);
925+
server->port = rpc_get_port((struct sockaddr *)cl_init->addr);
941926

942927
if (server->flags & NFS_MOUNT_NETUNREACH_FATAL)
943-
__set_bit(NFS_CS_NETUNREACH_FATAL, &cl_init.init_flags);
928+
__set_bit(NFS_CS_NETUNREACH_FATAL, &cl_init->init_flags);
944929

945930
/* Allocate or find a client reference we can use */
946-
clp = nfs_get_client(&cl_init);
931+
clp = nfs_get_client(cl_init);
947932
if (IS_ERR(clp))
948933
return PTR_ERR(clp);
949934

@@ -1156,6 +1141,19 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc)
11561141
{
11571142
struct nfs_fs_context *ctx = nfs_fc2context(fc);
11581143
struct rpc_timeout timeparms;
1144+
struct nfs_client_initdata cl_init = {
1145+
.hostname = ctx->nfs_server.hostname,
1146+
.addr = &ctx->nfs_server._address,
1147+
.addrlen = ctx->nfs_server.addrlen,
1148+
.ip_addr = ctx->client_address,
1149+
.proto = ctx->nfs_server.protocol,
1150+
.minorversion = ctx->minorversion,
1151+
.net = fc->net_ns,
1152+
.timeparms = &timeparms,
1153+
.xprtsec = ctx->xprtsec,
1154+
.nconnect = ctx->nfs_server.nconnect,
1155+
.max_connect = ctx->nfs_server.max_connect,
1156+
};
11591157
int error;
11601158

11611159
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)
11751173
ctx->selected_flavor = RPC_AUTH_UNIX;
11761174

11771175
/* Get a client record */
1178-
error = nfs4_set_client(server,
1179-
ctx->nfs_server.hostname,
1180-
&ctx->nfs_server._address,
1181-
ctx->nfs_server.addrlen,
1182-
ctx->client_address,
1183-
ctx->nfs_server.protocol,
1184-
&timeparms,
1185-
ctx->minorversion,
1186-
ctx->nfs_server.nconnect,
1187-
ctx->nfs_server.max_connect,
1188-
fc->net_ns,
1189-
&ctx->xprtsec);
1176+
error = nfs4_set_client(server, &cl_init);
11901177
if (error < 0)
11911178
return error;
11921179

@@ -1246,18 +1233,28 @@ struct nfs_server *nfs4_create_server(struct fs_context *fc)
12461233
struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
12471234
{
12481235
struct nfs_fs_context *ctx = nfs_fc2context(fc);
1249-
struct nfs_client *parent_client;
1250-
struct nfs_server *server, *parent_server;
1251-
int proto, error;
1236+
struct nfs_server *parent_server = NFS_SB(ctx->clone_data.sb);
1237+
struct nfs_client *parent_client = parent_server->nfs_client;
1238+
struct nfs_client_initdata cl_init = {
1239+
.hostname = ctx->nfs_server.hostname,
1240+
.addr = &ctx->nfs_server._address,
1241+
.addrlen = ctx->nfs_server.addrlen,
1242+
.ip_addr = parent_client->cl_ipaddr,
1243+
.minorversion = parent_client->cl_mvops->minor_version,
1244+
.net = parent_client->cl_net,
1245+
.timeparms = parent_server->client->cl_timeout,
1246+
.xprtsec = parent_client->cl_xprtsec,
1247+
.nconnect = parent_client->cl_nconnect,
1248+
.max_connect = parent_client->cl_max_connect,
1249+
};
1250+
struct nfs_server *server;
12521251
bool auth_probe;
1252+
int error;
12531253

12541254
server = nfs_alloc_server();
12551255
if (!server)
12561256
return ERR_PTR(-ENOMEM);
12571257

1258-
parent_server = NFS_SB(ctx->clone_data.sb);
1259-
parent_client = parent_server->nfs_client;
1260-
12611258
server->cred = get_cred(parent_server->cred);
12621259

12631260
/* Initialise the client representation from the parent server */
@@ -1266,38 +1263,17 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
12661263
/* Get a client representation */
12671264
#if IS_ENABLED(CONFIG_SUNRPC_XPRT_RDMA)
12681265
rpc_set_port(&ctx->nfs_server.address, NFS_RDMA_PORT);
1269-
error = nfs4_set_client(server,
1270-
ctx->nfs_server.hostname,
1271-
&ctx->nfs_server._address,
1272-
ctx->nfs_server.addrlen,
1273-
parent_client->cl_ipaddr,
1274-
XPRT_TRANSPORT_RDMA,
1275-
parent_server->client->cl_timeout,
1276-
parent_client->cl_mvops->minor_version,
1277-
parent_client->cl_nconnect,
1278-
parent_client->cl_max_connect,
1279-
parent_client->cl_net,
1280-
&parent_client->cl_xprtsec);
1266+
cl_init.proto = XPRT_TRANSPORT_RDMA;
1267+
error = nfs4_set_client(server, &cl_init);
12811268
if (!error)
12821269
goto init_server;
12831270
#endif /* IS_ENABLED(CONFIG_SUNRPC_XPRT_RDMA) */
12841271

1285-
proto = XPRT_TRANSPORT_TCP;
1272+
cl_init.proto = XPRT_TRANSPORT_TCP;
12861273
if (parent_client->cl_xprtsec.policy != RPC_XPRTSEC_NONE)
1287-
proto = XPRT_TRANSPORT_TCP_TLS;
1274+
cl_init.proto = XPRT_TRANSPORT_TCP_TLS;
12881275
rpc_set_port(&ctx->nfs_server.address, NFS_PORT);
1289-
error = nfs4_set_client(server,
1290-
ctx->nfs_server.hostname,
1291-
&ctx->nfs_server._address,
1292-
ctx->nfs_server.addrlen,
1293-
parent_client->cl_ipaddr,
1294-
proto,
1295-
parent_server->client->cl_timeout,
1296-
parent_client->cl_mvops->minor_version,
1297-
parent_client->cl_nconnect,
1298-
parent_client->cl_max_connect,
1299-
parent_client->cl_net,
1300-
&parent_client->cl_xprtsec);
1276+
error = nfs4_set_client(server, &cl_init);
13011277
if (error < 0)
13021278
goto error;
13031279

@@ -1353,6 +1329,19 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname,
13531329
char buf[INET6_ADDRSTRLEN + 1];
13541330
struct sockaddr_storage address;
13551331
struct sockaddr *localaddr = (struct sockaddr *)&address;
1332+
struct nfs_client_initdata cl_init = {
1333+
.hostname = hostname,
1334+
.addr = sap,
1335+
.addrlen = salen,
1336+
.ip_addr = buf,
1337+
.proto = clp->cl_proto,
1338+
.minorversion = clp->cl_minorversion,
1339+
.net = net,
1340+
.timeparms = clnt->cl_timeout,
1341+
.xprtsec = clp->cl_xprtsec,
1342+
.nconnect = clp->cl_nconnect,
1343+
.max_connect = clp->cl_max_connect,
1344+
};
13561345
int error;
13571346

13581347
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,
13681357

13691358
nfs_server_remove_lists(server);
13701359
set_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status);
1371-
error = nfs4_set_client(server, hostname, sap, salen, buf,
1372-
clp->cl_proto, clnt->cl_timeout,
1373-
clp->cl_minorversion,
1374-
clp->cl_nconnect, clp->cl_max_connect,
1375-
net, &clp->cl_xprtsec);
1360+
error = nfs4_set_client(server, &cl_init);
13761361
clear_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status);
13771362
if (error != 0) {
13781363
nfs_server_insert_lists(server);

0 commit comments

Comments
 (0)