Commit ff7d1179 authored by Trond Myklebust's avatar Trond Myklebust Committed by J. Bruce Fields

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: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent d3635ff0
...@@ -536,6 +536,19 @@ static ssize_t write_pool_threads(struct file *file, char *buf, size_t size) ...@@ -536,6 +536,19 @@ static ssize_t write_pool_threads(struct file *file, char *buf, size_t size)
return rv; return rv;
} }
static ssize_t
nfsd_print_version_support(char *buf, int remaining, const char *sep,
unsigned vers, unsigned minor)
{
const char *format = (minor == 0) ? "%s%c%u" : "%s%c%u.%u";
bool supported = !!nfsd_vers(vers, NFSD_TEST);
if (vers == 4 && !nfsd_minorversion(minor, NFSD_TEST))
supported = false;
return snprintf(buf, remaining, format, sep,
supported ? '+' : '-', vers, minor);
}
static ssize_t __write_versions(struct file *file, char *buf, size_t size) static ssize_t __write_versions(struct file *file, char *buf, size_t size)
{ {
char *mesg = buf; char *mesg = buf;
...@@ -598,40 +611,23 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size) ...@@ -598,40 +611,23 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
len = 0; len = 0;
sep = ""; sep = "";
remaining = SIMPLE_TRANSACTION_LIMIT; remaining = SIMPLE_TRANSACTION_LIMIT;
for (num=2 ; num <= 4 ; num++) for (num=2 ; num <= 4 ; num++) {
if (nfsd_vers(num, NFSD_AVAIL)) { if (!nfsd_vers(num, NFSD_AVAIL))
len = snprintf(buf, remaining, "%s%c%d", sep,
nfsd_vers(num, NFSD_TEST)?'+':'-',
num);
sep = " ";
if (len >= remaining)
break;
remaining -= len;
buf += len;
tlen += len;
}
if (nfsd_vers(4, NFSD_AVAIL))
for (minor = 0; minor <= NFSD_SUPPORTED_MINOR_VERSION;
minor++) {
if (minor == 0 && nfsd_minorversion(minor, NFSD_TEST))
/* for backward compatibility, don't report
* +4.0
*/
continue; continue;
len = snprintf(buf, remaining, " %c4.%u", minor = 0;
(nfsd_vers(4, NFSD_TEST) && do {
nfsd_minorversion(minor, NFSD_TEST)) ? len = nfsd_print_version_support(buf, remaining,
'+' : '-', sep, num, minor);
minor);
if (len >= remaining) if (len >= remaining)
break; goto out;
remaining -= len; remaining -= len;
buf += len; buf += len;
tlen += len; tlen += len;
minor++;
sep = " ";
} while (num == 4 && minor <= NFSD_SUPPORTED_MINOR_VERSION);
} }
out:
len = snprintf(buf, remaining, "\n"); len = snprintf(buf, remaining, "\n");
if (len >= remaining) if (len >= remaining)
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment