NFSv4 introduce max_connect mount options
[linux-2.6-microblaze.git] / fs / nfs / nfs4client.c
index 28431ac..270caa1 100644 (file)
@@ -865,6 +865,7 @@ static int nfs4_set_client(struct nfs_server *server,
                const char *ip_addr,
                int proto, const struct rpc_timeout *timeparms,
                u32 minorversion, unsigned int nconnect,
+               unsigned int max_connect,
                struct net *net)
 {
        struct nfs_client_initdata cl_init = {
@@ -883,6 +884,8 @@ static int nfs4_set_client(struct nfs_server *server,
 
        if (minorversion == 0)
                __set_bit(NFS_CS_REUSEPORT, &cl_init.init_flags);
+       else
+               cl_init.max_connect = max_connect;
        if (proto == XPRT_TRANSPORT_TCP)
                cl_init.nconnect = nconnect;
 
@@ -952,8 +955,10 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
                return ERR_PTR(-EINVAL);
        cl_init.hostname = buf;
 
-       if (mds_clp->cl_nconnect > 1 && ds_proto == XPRT_TRANSPORT_TCP)
+       if (mds_clp->cl_nconnect > 1 && ds_proto == XPRT_TRANSPORT_TCP) {
                cl_init.nconnect = mds_clp->cl_nconnect;
+               cl_init.max_connect = NFS_MAX_TRANSPORTS;
+       }
 
        if (mds_srv->flags & NFS_MOUNT_NORESVPORT)
                __set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags);
@@ -1122,6 +1127,7 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc)
                                &timeparms,
                                ctx->minorversion,
                                ctx->nfs_server.nconnect,
+                               ctx->nfs_server.max_connect,
                                fc->net_ns);
        if (error < 0)
                return error;
@@ -1211,6 +1217,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
                                parent_server->client->cl_timeout,
                                parent_client->cl_mvops->minor_version,
                                parent_client->cl_nconnect,
+                               parent_client->cl_max_connect,
                                parent_client->cl_net);
        if (!error)
                goto init_server;
@@ -1226,6 +1233,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc)
                                parent_server->client->cl_timeout,
                                parent_client->cl_mvops->minor_version,
                                parent_client->cl_nconnect,
+                               parent_client->cl_max_connect,
                                parent_client->cl_net);
        if (error < 0)
                goto error;
@@ -1323,7 +1331,7 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname,
        error = nfs4_set_client(server, hostname, sap, salen, buf,
                                clp->cl_proto, clnt->cl_timeout,
                                clp->cl_minorversion,
-                               clp->cl_nconnect, net);
+                               clp->cl_nconnect, clp->cl_max_connect, net);
        clear_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status);
        if (error != 0) {
                nfs_server_insert_lists(server);