summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfsctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfsctl.c')
-rw-r--r--fs/nfsd/nfsctl.c25
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
539static ssize_t 539static ssize_t
540nfsd_print_version_support(char *buf, int remaining, const char *sep, 540nfsd_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
1266static struct pernet_operations nfsd_net_ops = { 1269static struct pernet_operations nfsd_net_ops = {