diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-02-22 18:35:32 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2017-02-27 18:04:08 -0500 |
commit | d3635ff07e8ca598d44f72bbf5d6c65b8ebeeb46 (patch) | |
tree | b0de5bf1afd7508f312d2ea60183e5a9c8b58222 /fs/nfsd/nfssvc.c | |
parent | 7259f1dfe718234fee3f87d98d082e7f98d1d712 (diff) | |
download | linux-d3635ff07e8ca598d44f72bbf5d6c65b8ebeeb46.tar.gz linux-d3635ff07e8ca598d44f72bbf5d6c65b8ebeeb46.tar.bz2 linux-d3635ff07e8ca598d44f72bbf5d6c65b8ebeeb46.zip |
nfsd: fix configuration of supported minor versions
When the user turns off all minor versions of NFSv4, that should be
equivalent to turning off NFSv4 support, so a mount attempt using NFSv4
should get RPC_PROG_MISMATCH, not NFSERR_MINOR_VERS_MISMATCH.
Allow the user to use either '4.0' or '4' to enable or disable minor
version 0. Other minor versions are still enabled or disabled using the
'4.x' format.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfssvc.c')
-rw-r--r-- | fs/nfsd/nfssvc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 2e378d0479ad..efd66da99201 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -153,6 +153,18 @@ int nfsd_vers(int vers, enum vers_op change) return 0; } +static void +nfsd_adjust_nfsd_versions4(void) +{ + unsigned i; + + for (i = 0; i <= NFSD_SUPPORTED_MINOR_VERSION; i++) { + if (nfsd_supported_minorversions[i]) + return; + } + nfsd_vers(4, NFSD_CLEAR); +} + int nfsd_minorversion(u32 minorversion, enum vers_op change) { if (minorversion > NFSD_SUPPORTED_MINOR_VERSION) @@ -160,9 +172,11 @@ int nfsd_minorversion(u32 minorversion, enum vers_op change) switch(change) { case NFSD_SET: nfsd_supported_minorversions[minorversion] = true; + nfsd_vers(4, NFSD_SET); break; case NFSD_CLEAR: nfsd_supported_minorversions[minorversion] = false; + nfsd_adjust_nfsd_versions4(); break; case NFSD_TEST: return nfsd_supported_minorversions[minorversion]; |