diff options
Diffstat (limited to 'fs/nfsd/nfssvc.c')
-rw-r--r-- | fs/nfsd/nfssvc.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 786a4a2cb2d7..31e1f9593457 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -167,7 +167,8 @@ nfsd_adjust_nfsd_versions4(void) | |||
167 | 167 | ||
168 | int nfsd_minorversion(u32 minorversion, enum vers_op change) | 168 | int nfsd_minorversion(u32 minorversion, enum vers_op change) |
169 | { | 169 | { |
170 | if (minorversion > NFSD_SUPPORTED_MINOR_VERSION) | 170 | if (minorversion > NFSD_SUPPORTED_MINOR_VERSION && |
171 | change != NFSD_AVAIL) | ||
171 | return -1; | 172 | return -1; |
172 | switch(change) { | 173 | switch(change) { |
173 | case NFSD_SET: | 174 | case NFSD_SET: |
@@ -415,23 +416,20 @@ static void nfsd_last_thread(struct svc_serv *serv, struct net *net) | |||
415 | 416 | ||
416 | void nfsd_reset_versions(void) | 417 | void nfsd_reset_versions(void) |
417 | { | 418 | { |
418 | int found_one = 0; | ||
419 | int i; | 419 | int i; |
420 | 420 | ||
421 | for (i = NFSD_MINVERS; i < NFSD_NRVERS; i++) { | 421 | for (i = 0; i < NFSD_NRVERS; i++) |
422 | if (nfsd_program.pg_vers[i]) | 422 | if (nfsd_vers(i, NFSD_TEST)) |
423 | found_one = 1; | 423 | return; |
424 | } | ||
425 | 424 | ||
426 | if (!found_one) { | 425 | for (i = 0; i < NFSD_NRVERS; i++) |
427 | for (i = NFSD_MINVERS; i < NFSD_NRVERS; i++) | 426 | if (i != 4) |
428 | nfsd_program.pg_vers[i] = nfsd_version[i]; | 427 | nfsd_vers(i, NFSD_SET); |
429 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | 428 | else { |
430 | for (i = NFSD_ACL_MINVERS; i < NFSD_ACL_NRVERS; i++) | 429 | int minor = 0; |
431 | nfsd_acl_program.pg_vers[i] = | 430 | while (nfsd_minorversion(minor, NFSD_SET) >= 0) |
432 | nfsd_acl_version[i]; | 431 | minor++; |
433 | #endif | 432 | } |
434 | } | ||
435 | } | 433 | } |
436 | 434 | ||
437 | /* | 435 | /* |