nfsd4: fix minorversion support interface
You can turn on or off support for minorversions using e.g. echo "-4.2" >/proc/fs/nfsd/versions However, the current implementation is a little wonky. For example, the above will turn off 4.2 support, but it will also turn *on* 4.1 support. This didn't matter as long as we only had 2 minorversions, which was true till very recently. And do a little cleanup here. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
1c327d962f
commit
35f7a14fc1
3 changed files with 8 additions and 8 deletions
|
@ -1293,7 +1293,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
|
|||
* According to RFC3010, this takes precedence over all other errors.
|
||||
*/
|
||||
status = nfserr_minor_vers_mismatch;
|
||||
if (args->minorversion > nfsd_supported_minorversion)
|
||||
if (nfsd_minorversion(args->minorversion, NFSD_TEST) <= 0)
|
||||
goto out;
|
||||
|
||||
status = nfs41_check_op_ordering(args);
|
||||
|
|
|
@ -53,7 +53,6 @@ struct readdir_cd {
|
|||
extern struct svc_program nfsd_program;
|
||||
extern struct svc_version nfsd_version2, nfsd_version3,
|
||||
nfsd_version4;
|
||||
extern u32 nfsd_supported_minorversion;
|
||||
extern struct mutex nfsd_mutex;
|
||||
extern spinlock_t nfsd_drc_lock;
|
||||
extern unsigned long nfsd_drc_max_mem;
|
||||
|
|
|
@ -116,7 +116,10 @@ struct svc_program nfsd_program = {
|
|||
|
||||
};
|
||||
|
||||
u32 nfsd_supported_minorversion = 1;
|
||||
static bool nfsd_supported_minorversions[NFSD_SUPPORTED_MINOR_VERSION + 1] = {
|
||||
[0] = 1,
|
||||
[1] = 1,
|
||||
};
|
||||
|
||||
int nfsd_vers(int vers, enum vers_op change)
|
||||
{
|
||||
|
@ -151,15 +154,13 @@ int nfsd_minorversion(u32 minorversion, enum vers_op change)
|
|||
return -1;
|
||||
switch(change) {
|
||||
case NFSD_SET:
|
||||
nfsd_supported_minorversion = minorversion;
|
||||
nfsd_supported_minorversions[minorversion] = true;
|
||||
break;
|
||||
case NFSD_CLEAR:
|
||||
if (minorversion == 0)
|
||||
return -1;
|
||||
nfsd_supported_minorversion = minorversion - 1;
|
||||
nfsd_supported_minorversions[minorversion] = false;
|
||||
break;
|
||||
case NFSD_TEST:
|
||||
return minorversion <= nfsd_supported_minorversion;
|
||||
return nfsd_supported_minorversions[minorversion];
|
||||
case NFSD_AVAIL:
|
||||
return minorversion <= NFSD_SUPPORTED_MINOR_VERSION;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue