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 = { |
