]> git.baikalelectronics.ru Git - kernel.git/commitdiff
NFSv4.1: use EXCHGID4_FLAG_USE_PNFS_DS for DS server
authorOlga Kornievskaia <kolga@netapp.com>
Thu, 13 Jul 2023 17:02:38 +0000 (13:02 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Oct 2023 12:56:31 +0000 (14:56 +0200)
[ Upstream commit 51d674a5e4889f1c8e223ac131cf218e1631e423 ]

After receiving the location(s) of the DS server(s) in the
GETDEVINCEINFO, create the request for the clientid to such
server and indicate that the client is connecting to a DS.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Stable-dep-of: 806a3bc421a1 ("NFSv4.1: fix pnfs MDS=DS session trunking")
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4client.c
fs/nfs/nfs4proc.c

index d3051b051a5640d98827f1fb246fb65dd8499086..d3e2b0867dc114dd6afa6ce7ec072a08f14f02c4 100644 (file)
@@ -231,6 +231,8 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)
        __set_bit(NFS_CS_DISCRTRY, &clp->cl_flags);
        __set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags);
 
+       if (test_bit(NFS_CS_DS, &cl_init->init_flags))
+               __set_bit(NFS_CS_DS, &clp->cl_flags);
        /*
         * Set up the connection to the server before we add add to the
         * global list.
@@ -993,6 +995,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
        if (mds_srv->flags & NFS_MOUNT_NORESVPORT)
                __set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags);
 
+       __set_bit(NFS_CS_DS, &cl_init.init_flags);
        /*
         * Set an authflavor equual to the MDS value. Use the MDS nfs_client
         * cl_ipaddr so as to use the same EXCHANGE_ID co_ownerid as the MDS
index 2dec0fed1ba1685ef133903a09d235eb584be985..acb1346da13e964c8fcd9f1e1eff31aa3ae9abc7 100644 (file)
@@ -8794,6 +8794,8 @@ nfs4_run_exchange_id(struct nfs_client *clp, const struct cred *cred,
 #ifdef CONFIG_NFS_V4_1_MIGRATION
        calldata->args.flags |= EXCHGID4_FLAG_SUPP_MOVED_MIGR;
 #endif
+       if (test_bit(NFS_CS_DS, &clp->cl_flags))
+               calldata->args.flags |= EXCHGID4_FLAG_USE_PNFS_DS;
        msg.rpc_argp = &calldata->args;
        msg.rpc_resp = &calldata->res;
        task_setup_data.callback_data = calldata;
@@ -8871,6 +8873,8 @@ static int _nfs4_proc_exchange_id(struct nfs_client *clp, const struct cred *cre
        /* Save the EXCHANGE_ID verifier session trunk tests */
        memcpy(clp->cl_confirm.data, argp->verifier.data,
               sizeof(clp->cl_confirm.data));
+       if (resp->flags & EXCHGID4_FLAG_USE_PNFS_DS)
+               set_bit(NFS_CS_DS, &clp->cl_flags);
 out:
        trace_nfs4_exchange_id(clp, status);
        rpc_put_task(task);