Commit b4be2c59 authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Trond Myklebust
Browse files

NFSv4.1 restrict GETATTR fs_location query to the main transport



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: default avatarOlga Kornievskaia <kolga@netapp.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent cb8fac6d
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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;