]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
NFSv4.1 restrict GETATTR fs_location query to the main transport
authorOlga Kornievskaia <kolga@netapp.com>
Tue, 15 Feb 2022 18:26:41 +0000 (13:26 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 13 Mar 2022 16:59:34 +0000 (12:59 -0400)
In the presence of trunking transports, it's helpful to make sure
that during the migration event, the GETATTR for fs_location attribute
happens on the main transport.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/nfs4proc.c

index 8b875355824b0d115d5d568449cbf68b1de21de6..fd8eece12e9470eefefaefd4f7493c2bbfc1153a 100644 (file)
@@ -8008,6 +8008,18 @@ static int _nfs41_proc_get_locations(struct nfs_server *server,
                .rpc_resp       = &res,
                .rpc_cred       = cred,
        };
+       struct nfs4_call_sync_data data = {
+               .seq_server = server,
+               .seq_args = &args.seq_args,
+               .seq_res = &res.seq_res,
+       };
+       struct rpc_task_setup task_setup_data = {
+               .rpc_client = clnt,
+               .rpc_message = &msg,
+               .callback_ops = server->nfs_client->cl_mvops->call_sync_ops,
+               .callback_data = &data,
+               .flags = RPC_TASK_NO_ROUND_ROBIN,
+       };
        int status;
 
        nfs_fattr_init(&locations->fattr);
@@ -8015,8 +8027,7 @@ static int _nfs41_proc_get_locations(struct nfs_server *server,
        locations->nlocations = 0;
 
        nfs4_init_sequence(&args.seq_args, &res.seq_res, 0, 1);
-       status = nfs4_call_sync_sequence(clnt, server, &msg,
-                                       &args.seq_args, &res.seq_res);
+       status = nfs4_call_sync_custom(&task_setup_data);
        if (status == NFS4_OK &&
            res.seq_res.sr_status_flags & SEQ4_STATUS_LEASE_MOVED)
                status = -NFS4ERR_LEASE_MOVED;