mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 09:41:03 -04:00
nfscl: Fix NFSv4.1/4.2 pnfs mounts using nconnect
When a mount with the "pnfs" and "nconnect" options specified
does an I/O operation, it erroneously uses a TCP connection
to the MDS when it is meant to be a DS operation and, as such,
needs to use a TCP connection to the DS. This patch fixes this.
When the "pnfs" and "nconnect" options are specified for a
NFSv4.1/4.2 mount, there probably should be N connections
established to each DS for I/O RPCs. This is a fair amount
of work and may be done in a future commit.
This problem was found during a recent IETF NFSv4 working
group testing event.
(cherry picked from commit 80e5955b08)
This commit is contained in:
parent
ffc00e9db9
commit
87c8d28539
1 changed files with 10 additions and 1 deletions
|
|
@ -639,8 +639,17 @@ newnfs_request(struct nfsrv_descript *nd, struct nfsmount *nmp,
|
|||
if (nrp->nr_client == NULL)
|
||||
newnfs_connect(nmp, nrp, cred, td, 0, false, &nrp->nr_client);
|
||||
|
||||
/*
|
||||
* If the "nconnect" mount option was specified and this RPC is
|
||||
* one that can have a large RPC message and is being done through
|
||||
* the NFS/MDS server, use an additional connection. (When the RPC is
|
||||
* being done through the server/MDS, nrp == &nmp->nm_sockreq.)
|
||||
* The "nconnect" mount option normally has minimal effect when the
|
||||
* "pnfs" mount option is specified, since only Readdir RPCs are
|
||||
* normally done through the NFS/MDS server.
|
||||
*/
|
||||
nextconn_set = false;
|
||||
if (nmp != NULL && nmp->nm_aconnect > 0 &&
|
||||
if (nmp != NULL && nmp->nm_aconnect > 0 && nrp == &nmp->nm_sockreq &&
|
||||
(nd->nd_procnum == NFSPROC_READ ||
|
||||
nd->nd_procnum == NFSPROC_READDIR ||
|
||||
nd->nd_procnum == NFSPROC_READDIRPLUS ||
|
||||
|
|
|
|||
Loading…
Reference in a new issue