summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2014-01-07 15:37:58 -0500
committerSteve Dickson <steved@redhat.com>2014-01-07 15:57:48 -0500
commit93648ecc10bae7ed542056abb55f4b8f10ddbbb9 (patch)
tree3c386a917846f365794c2eb5efa940a16e143cfd
parent660c8537085b3e66bff7da2953da9a98429c9635 (diff)
downloadnfs-utils-93648ecc10bae7ed542056abb55f4b8f10ddbbb9.tar.gz
nfs-utils-93648ecc10bae7ed542056abb55f4b8f10ddbbb9.tar.xz
nfs-utils-93648ecc10bae7ed542056abb55f4b8f10ddbbb9.zip
nfsd: fix minorversion-choosing interface
From: "J. Bruce Fields" <bfields@redhat.com> By unconditionally adding ?4.2 to the version string written to the kernel we make nfs-utils incompatible with pre-4.2-supporting kernels. Ditto for 4.1. This problem was introduced by 12a590f8d556c00a9502eeebaa763d906222d521 "rpc.nfsd: Allow v4.2 server support with the -V option", which also change nfsd to unconditionally pass ?4.2. Instead, just don't mention 4.1 or 4.2 unless the commandline has specifically requested that one or the other be turned on or off. Tested-by: Joakim Tjernlund <joakim.tjernlund@transmode.se> Reported-by: Joakim Tjernlund <joakim.tjernlund@transmode.se> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--support/include/nfs/nfs.h1
-rw-r--r--utils/nfsd/nfsd.c6
-rw-r--r--utils/nfsd/nfssvc.c6
-rw-r--r--utils/nfsd/nfssvc.h2
4 files changed, 7 insertions, 8 deletions
diff --git a/support/include/nfs/nfs.h b/support/include/nfs/nfs.h
index 38db5b5..df4ad76 100644
--- a/support/include/nfs/nfs.h
+++ b/support/include/nfs/nfs.h
@@ -17,7 +17,6 @@
#define NFS4_MINMINOR 1
#define NFS4_MAXMINOR 2
-#define NFS4_VERDEFAULT 0x1 /* minor verion 1 */
struct nfs_fh_len {
int fh_size;
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index 6db92f0..a9d77ab 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -99,7 +99,7 @@ main(int argc, char **argv)
char *p, *progname, *port;
char *haddr = NULL;
int socket_up = 0;
- int minorvers = NFS4_VERDEFAULT; /* nfsv4 minor version */
+ int minorvers[NFS4_MAXMINOR + 1] = {0};
unsigned int versbits = NFSCTL_VERDEFAULT;
unsigned int protobits = NFSCTL_ALLBITS;
unsigned int proto4 = 0;
@@ -164,7 +164,7 @@ main(int argc, char **argv)
fprintf(stderr, "%s: unsupported minor version\n", optarg);
exit(1);
}
- NFSCTL_VERUNSET(minorvers, i);
+ minorvers[i] = -1;
break;
}
case 3:
@@ -185,7 +185,7 @@ main(int argc, char **argv)
fprintf(stderr, "%s: unsupported minor version\n", optarg);
exit(1);
}
- NFSCTL_VERSET(minorvers, i);
+ minorvers[i] = 1;
break;
}
case 3:
diff --git a/utils/nfsd/nfssvc.c b/utils/nfsd/nfssvc.c
index 8b85846..1b50aba 100644
--- a/utils/nfsd/nfssvc.c
+++ b/utils/nfsd/nfssvc.c
@@ -269,7 +269,7 @@ nfssvc_set_sockets(const int family, const unsigned int protobits,
}
void
-nfssvc_setvers(unsigned int ctlbits, int minorvers)
+nfssvc_setvers(unsigned int ctlbits, int minorvers[])
{
int fd, n, off;
char *ptr;
@@ -281,9 +281,9 @@ nfssvc_setvers(unsigned int ctlbits, int minorvers)
return;
for (n = NFS4_MINMINOR; n <= NFS4_MAXMINOR; n++) {
- if (NFSCTL_VERISSET(minorvers, n))
+ if (minorvers[n] == 1)
off += snprintf(ptr+off, sizeof(buf) - off, "+4.%d ", n);
- else
+ else if (minorvers[n] == -1)
off += snprintf(ptr+off, sizeof(buf) - off, "-4.%d ", n);
}
for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) {
diff --git a/utils/nfsd/nfssvc.h b/utils/nfsd/nfssvc.h
index 08de0fe..2bbd3d3 100644
--- a/utils/nfsd/nfssvc.h
+++ b/utils/nfsd/nfssvc.h
@@ -24,5 +24,5 @@ void nfssvc_mount_nfsdfs(char *progname);
int nfssvc_inuse(void);
int nfssvc_set_sockets(const int family, const unsigned int protobits,
const char *host, const char *port);
-void nfssvc_setvers(unsigned int ctlbits, int minorvers4);
+void nfssvc_setvers(unsigned int ctlbits, int minorvers4[]);
int nfssvc_threads(unsigned short port, int nrservs);