diff options
Diffstat (limited to 'fs/nfsd/nfsctl.c')
-rw-r--r-- | fs/nfsd/nfsctl.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 6667d3a4f839..630d629090be 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c | |||
@@ -537,14 +537,14 @@ out_free: | |||
537 | } | 537 | } |
538 | 538 | ||
539 | static ssize_t | 539 | static ssize_t |
540 | nfsd_print_version_support(char *buf, int remaining, const char *sep, | 540 | nfsd_print_version_support(struct nfsd_net *nn, char *buf, int remaining, |
541 | unsigned vers, int minor) | 541 | const char *sep, unsigned vers, int minor) |
542 | { | 542 | { |
543 | const char *format = minor < 0 ? "%s%c%u" : "%s%c%u.%u"; | 543 | const char *format = minor < 0 ? "%s%c%u" : "%s%c%u.%u"; |
544 | bool supported = !!nfsd_vers(vers, NFSD_TEST); | 544 | bool supported = !!nfsd_vers(nn, vers, NFSD_TEST); |
545 | 545 | ||
546 | if (vers == 4 && minor >= 0 && | 546 | if (vers == 4 && minor >= 0 && |
547 | !nfsd_minorversion(minor, NFSD_TEST)) | 547 | !nfsd_minorversion(nn, minor, NFSD_TEST)) |
548 | supported = false; | 548 | supported = false; |
549 | if (minor == 0 && supported) | 549 | if (minor == 0 && supported) |
550 | /* | 550 | /* |
@@ -599,20 +599,20 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
599 | switch(num) { | 599 | switch(num) { |
600 | case 2: | 600 | case 2: |
601 | case 3: | 601 | case 3: |
602 | nfsd_vers(num, cmd); | 602 | nfsd_vers(nn, num, cmd); |
603 | break; | 603 | break; |
604 | case 4: | 604 | case 4: |
605 | if (*minorp == '.') { | 605 | if (*minorp == '.') { |
606 | if (nfsd_minorversion(minor, cmd) < 0) | 606 | if (nfsd_minorversion(nn, minor, cmd) < 0) |
607 | return -EINVAL; | 607 | return -EINVAL; |
608 | } else if ((cmd == NFSD_SET) != nfsd_vers(num, NFSD_TEST)) { | 608 | } else if ((cmd == NFSD_SET) != nfsd_vers(nn, num, NFSD_TEST)) { |
609 | /* | 609 | /* |
610 | * Either we have +4 and no minors are enabled, | 610 | * Either we have +4 and no minors are enabled, |
611 | * or we have -4 and at least one minor is enabled. | 611 | * or we have -4 and at least one minor is enabled. |
612 | * In either case, propagate 'cmd' to all minors. | 612 | * In either case, propagate 'cmd' to all minors. |
613 | */ | 613 | */ |
614 | minor = 0; | 614 | minor = 0; |
615 | while (nfsd_minorversion(minor, cmd) >= 0) | 615 | while (nfsd_minorversion(nn, minor, cmd) >= 0) |
616 | minor++; | 616 | minor++; |
617 | } | 617 | } |
618 | break; | 618 | break; |
@@ -624,7 +624,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
624 | /* If all get turned off, turn them back on, as | 624 | /* If all get turned off, turn them back on, as |
625 | * having no versions is BAD | 625 | * having no versions is BAD |
626 | */ | 626 | */ |
627 | nfsd_reset_versions(); | 627 | nfsd_reset_versions(nn); |
628 | } | 628 | } |
629 | 629 | ||
630 | /* Now write current state into reply buffer */ | 630 | /* Now write current state into reply buffer */ |
@@ -633,12 +633,12 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) | |||
633 | remaining = SIMPLE_TRANSACTION_LIMIT; | 633 | remaining = SIMPLE_TRANSACTION_LIMIT; |
634 | for (num=2 ; num <= 4 ; num++) { | 634 | for (num=2 ; num <= 4 ; num++) { |
635 | int minor; | 635 | int minor; |
636 | if (!nfsd_vers(num, NFSD_AVAIL)) | 636 | if (!nfsd_vers(nn, num, NFSD_AVAIL)) |
637 | continue; | 637 | continue; |
638 | 638 | ||
639 | minor = -1; | 639 | minor = -1; |
640 | do { | 640 | do { |
641 | len = nfsd_print_version_support(buf, remaining, | 641 | len = nfsd_print_version_support(nn, buf, remaining, |
642 | sep, num, minor); | 642 | sep, num, minor); |
643 | if (len >= remaining) | 643 | if (len >= remaining) |
644 | goto out; | 644 | goto out; |
@@ -1239,6 +1239,8 @@ static __net_init int nfsd_init_net(struct net *net) | |||
1239 | retval = nfsd_idmap_init(net); | 1239 | retval = nfsd_idmap_init(net); |
1240 | if (retval) | 1240 | if (retval) |
1241 | goto out_idmap_error; | 1241 | goto out_idmap_error; |
1242 | nn->nfsd_versions = NULL; | ||
1243 | nn->nfsd4_minorversions = NULL; | ||
1242 | nn->nfsd4_lease = 90; /* default lease time */ | 1244 | nn->nfsd4_lease = 90; /* default lease time */ |
1243 | nn->nfsd4_grace = 90; | 1245 | nn->nfsd4_grace = 90; |
1244 | nn->somebody_reclaimed = false; | 1246 | nn->somebody_reclaimed = false; |
@@ -1261,6 +1263,7 @@ static __net_exit void nfsd_exit_net(struct net *net) | |||
1261 | { | 1263 | { |
1262 | nfsd_idmap_shutdown(net); | 1264 | nfsd_idmap_shutdown(net); |
1263 | nfsd_export_shutdown(net); | 1265 | nfsd_export_shutdown(net); |
1266 | nfsd_netns_free_versions(net_generic(net, nfsd_net_id)); | ||
1264 | } | 1267 | } |
1265 | 1268 | ||
1266 | static struct pernet_operations nfsd_net_ops = { | 1269 | static struct pernet_operations nfsd_net_ops = { |