@@ -895,55 +895,40 @@ nfs4_find_client_sessionid(struct net *net, const struct sockaddr *addr,
895895 * Set up an NFS4 client
896896 */
897897static 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)
12461233struct 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