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) |
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) | |||
153 | return 0; | 153 | return 0; |
154 | } | 154 | } |
155 | 155 | ||
156 | static void | ||
157 | nfsd_adjust_nfsd_versions4(void) | ||
158 | { | ||
159 | unsigned i; | ||
160 | |||
161 | for (i = 0; i <= NFSD_SUPPORTED_MINOR_VERSION; i++) { | ||
162 | if (nfsd_supported_minorversions[i]) | ||
163 | return; | ||
164 | } | ||
165 | nfsd_vers(4, NFSD_CLEAR); | ||
166 | } | ||
167 | |||
156 | int nfsd_minorversion(u32 minorversion, enum vers_op change) | 168 | int nfsd_minorversion(u32 minorversion, enum vers_op change) |
157 | { | 169 | { |
158 | if (minorversion > NFSD_SUPPORTED_MINOR_VERSION) | 170 | if (minorversion > NFSD_SUPPORTED_MINOR_VERSION) |
@@ -160,9 +172,11 @@ int nfsd_minorversion(u32 minorversion, enum vers_op change) | |||
160 | switch(change) { | 172 | switch(change) { |
161 | case NFSD_SET: | 173 | case NFSD_SET: |
162 | nfsd_supported_minorversions[minorversion] = true; | 174 | nfsd_supported_minorversions[minorversion] = true; |
175 | nfsd_vers(4, NFSD_SET); | ||
163 | break; | 176 | break; |
164 | case NFSD_CLEAR: | 177 | case NFSD_CLEAR: |
165 | nfsd_supported_minorversions[minorversion] = false; | 178 | nfsd_supported_minorversions[minorversion] = false; |
179 | nfsd_adjust_nfsd_versions4(); | ||
166 | break; | 180 | break; |
167 | case NFSD_TEST: | 181 | case NFSD_TEST: |
168 | return nfsd_supported_minorversions[minorversion]; | 182 | return nfsd_supported_minorversions[minorversion]; |