Skip to content

Commit ff7d117

Browse files
trondmypdJ. Bruce Fields
authored andcommitted
nfsd: Fix display of the version string
The current display code assumes that v4 minor version 0 is tracked by the call to nfsd_vers(). Now it is tracked by nfsd_minorversion(), and so we need to adjust the display code. Signed-off-by: Trond Myklebust <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
1 parent d3635ff commit ff7d117

File tree

1 file changed

+26
-30
lines changed

1 file changed

+26
-30
lines changed

fs/nfsd/nfsctl.c

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,19 @@ static ssize_t write_pool_threads(struct file *file, char *buf, size_t size)
536536
return rv;
537537
}
538538

539+
static ssize_t
540+
nfsd_print_version_support(char *buf, int remaining, const char *sep,
541+
unsigned vers, unsigned minor)
542+
{
543+
const char *format = (minor == 0) ? "%s%c%u" : "%s%c%u.%u";
544+
bool supported = !!nfsd_vers(vers, NFSD_TEST);
545+
546+
if (vers == 4 && !nfsd_minorversion(minor, NFSD_TEST))
547+
supported = false;
548+
return snprintf(buf, remaining, format, sep,
549+
supported ? '+' : '-', vers, minor);
550+
}
551+
539552
static ssize_t __write_versions(struct file *file, char *buf, size_t size)
540553
{
541554
char *mesg = buf;
@@ -598,40 +611,23 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
598611
len = 0;
599612
sep = "";
600613
remaining = SIMPLE_TRANSACTION_LIMIT;
601-
for (num=2 ; num <= 4 ; num++)
602-
if (nfsd_vers(num, NFSD_AVAIL)) {
603-
len = snprintf(buf, remaining, "%s%c%d", sep,
604-
nfsd_vers(num, NFSD_TEST)?'+':'-',
605-
num);
606-
sep = " ";
607-
608-
if (len >= remaining)
609-
break;
610-
remaining -= len;
611-
buf += len;
612-
tlen += len;
613-
}
614-
if (nfsd_vers(4, NFSD_AVAIL))
615-
for (minor = 0; minor <= NFSD_SUPPORTED_MINOR_VERSION;
616-
minor++) {
617-
if (minor == 0 && nfsd_minorversion(minor, NFSD_TEST))
618-
/* for backward compatibility, don't report
619-
* +4.0
620-
*/
621-
continue;
622-
len = snprintf(buf, remaining, " %c4.%u",
623-
(nfsd_vers(4, NFSD_TEST) &&
624-
nfsd_minorversion(minor, NFSD_TEST)) ?
625-
'+' : '-',
626-
minor);
627-
614+
for (num=2 ; num <= 4 ; num++) {
615+
if (!nfsd_vers(num, NFSD_AVAIL))
616+
continue;
617+
minor = 0;
618+
do {
619+
len = nfsd_print_version_support(buf, remaining,
620+
sep, num, minor);
628621
if (len >= remaining)
629-
break;
622+
goto out;
630623
remaining -= len;
631624
buf += len;
632625
tlen += len;
633-
}
634-
626+
minor++;
627+
sep = " ";
628+
} while (num == 4 && minor <= NFSD_SUPPORTED_MINOR_VERSION);
629+
}
630+
out:
635631
len = snprintf(buf, remaining, "\n");
636632
if (len >= remaining)
637633
return -EINVAL;

0 commit comments

Comments
 (0)