Browse Source

nfs-utils package update

Signed-off-by: basebuilder_pel7ppc64bebuilder0 <basebuilder@powerel.org>
master
basebuilder_pel7ppc64bebuilder0 5 years ago
parent
commit
fc737a5805
  1. 25
      SOURCES/nfs-utils-1.3.0-exportfs-rwro-display.patch
  2. 128
      SOURCES/nfs-utils-1.3.0-mount-clientaddr.patch
  3. 280
      SOURCES/nfs-utils-1.3.0-mount-turnoffv4.patch
  4. 259
      SOURCES/nfs-utils-1.3.0-mountstats-rdma.patch
  5. 12
      SOURCES/nfs-utils-1.3.0-nfsclient-getopt.patch
  6. 36
      SOURCES/nfs-utils-1.3.0-nfsconf-disable-v4.patch
  7. 25
      SOURCES/nfs-utils-1.3.0-nfsd-defautvers.patch
  8. 21
      SOURCES/nfs-utils-1.3.0-nfsmountconf-typo.patch
  9. 58
      SOURCES/nfs-utils-1.3.0-rpcgssd-16bits.patch
  10. 13
      SOURCES/nfs-utils-1.3.0-systemd-gssproxy-restart.patch
  11. 43
      SOURCES/nfs-utils-1.3.0-systemd-nfs-man.patch
  12. 9
      SOURCES/nfs-utils_env.sh
  13. 13
      SOURCES/nfs.sysconfig
  14. 65
      SPECS/nfs-utils.spec

25
SOURCES/nfs-utils-1.3.0-exportfs-rwro-display.patch

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
diff -up nfs-utils-1.3.0/support/nfs/exports.c.orig nfs-utils-1.3.0/support/nfs/exports.c
--- nfs-utils-1.3.0/support/nfs/exports.c.orig 2018-07-10 13:49:12.978210878 -0400
+++ nfs-utils-1.3.0/support/nfs/exports.c 2018-07-10 13:50:44.057806104 -0400
@@ -197,6 +197,7 @@ static const struct secinfo_flag_display
const char *set;
const char *unset;
} secinfo_flag_displaymap[] = {
+ { NFSEXP_READONLY, "ro", "rw" },
{ NFSEXP_INSECURE_PORT, "insecure", "secure" },
{ NFSEXP_ROOTSQUASH, "root_squash", "no_root_squash" },
{ NFSEXP_ALLSQUASH, "all_squash", "no_all_squash" },
diff -up nfs-utils-1.3.0/utils/exportfs/exportfs.c.orig nfs-utils-1.3.0/utils/exportfs/exportfs.c
--- nfs-utils-1.3.0/utils/exportfs/exportfs.c.orig 2018-07-10 13:49:12.960210562 -0400
+++ nfs-utils-1.3.0/utils/exportfs/exportfs.c 2018-07-10 13:50:44.058806122 -0400
@@ -756,10 +756,6 @@ dump(int verbose, int export_format)
continue;
}
c = '(';
- if (ep->e_flags & NFSEXP_READONLY)
- c = dumpopt(c, "ro");
- else
- c = dumpopt(c, "rw");
if (ep->e_flags & NFSEXP_ASYNC)
c = dumpopt(c, "async");
else

128
SOURCES/nfs-utils-1.3.0-mount-clientaddr.patch

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
diff -up nfs-utils-1.3.0/utils/mount/network.c.orig nfs-utils-1.3.0/utils/mount/network.c
--- nfs-utils-1.3.0/utils/mount/network.c.orig 2018-07-30 14:14:01.242771732 -0400
+++ nfs-utils-1.3.0/utils/mount/network.c 2018-07-30 14:15:36.918075978 -0400
@@ -44,6 +44,8 @@
#include <rpc/rpc.h>
#include <rpc/pmap_prot.h>
#include <rpc/pmap_clnt.h>
+#include <net/if.h>
+#include <ifaddrs.h>
#include "sockaddr.h"
#include "xcommon.h"
@@ -1736,3 +1738,48 @@ int nfs_umount_do_umnt(struct mount_opti
return EX_SUCCESS;
}
+
+int nfs_is_inaddr_any(struct sockaddr *nfs_saddr)
+{
+ switch (nfs_saddr->sa_family) {
+ case AF_INET: {
+ if (((struct sockaddr_in *)nfs_saddr)->sin_addr.s_addr ==
+ INADDR_ANY)
+ return 1;
+ break;
+ }
+ case AF_INET6:
+ if (!memcmp(&((struct sockaddr_in6 *)nfs_saddr)->sin6_addr,
+ &in6addr_any, sizeof(in6addr_any)))
+ return 1;
+ break;
+ }
+ return 0;
+}
+
+int nfs_addr_matches_localips(struct sockaddr *nfs_saddr)
+{
+ struct ifaddrs *myaddrs, *ifa;
+ int found = 0;
+
+ /* acquire exiting network interfaces */
+ if (getifaddrs(&myaddrs) != 0)
+ return 0;
+
+ /* interate over the available interfaces and check if we
+ * we find a match to the supplied clientaddr value
+ */
+ for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) {
+ if (ifa->ifa_addr == NULL)
+ continue;
+ if (!(ifa->ifa_flags & IFF_UP))
+ continue;
+ if (!memcmp(ifa->ifa_addr, nfs_saddr,
+ sizeof(struct sockaddr))) {
+ found = 1;
+ break;
+ }
+ }
+ freeifaddrs(myaddrs);
+ return found;
+}
diff -up nfs-utils-1.3.0/utils/mount/network.h.orig nfs-utils-1.3.0/utils/mount/network.h
--- nfs-utils-1.3.0/utils/mount/network.h.orig 2018-07-30 14:14:01.242771732 -0400
+++ nfs-utils-1.3.0/utils/mount/network.h 2018-07-30 14:15:36.918075978 -0400
@@ -54,6 +54,8 @@ int nfs_callback_address(const struct so
int clnt_ping(struct sockaddr_in *, const unsigned long,
const unsigned long, const unsigned int,
struct sockaddr_in *);
+int nfs_is_inaddr_any(struct sockaddr *);
+int nfs_addr_matches_localips(struct sockaddr *);
struct mount_options;
diff -up nfs-utils-1.3.0/utils/mount/nfs.man.orig nfs-utils-1.3.0/utils/mount/nfs.man
--- nfs-utils-1.3.0/utils/mount/nfs.man.orig 2018-07-30 14:14:01.240771705 -0400
+++ nfs-utils-1.3.0/utils/mount/nfs.man 2018-07-30 14:15:43.365163864 -0400
@@ -825,6 +825,9 @@ to perform NFS version 4.0 callback requ
files on this mount point. If the server is unable to
establish callback connections to clients, performance
may degrade, or accesses to files may temporarily hang.
+Can specify a value of IPv4_ANY (0.0.0.0) or equivalent
+IPv6 any address which will signal to the NFS server that
+this NFS client does not want delegations.
.IP
If this option is not specified, the
.BR mount (8)
diff -up nfs-utils-1.3.0/utils/mount/stropts.c.orig nfs-utils-1.3.0/utils/mount/stropts.c
--- nfs-utils-1.3.0/utils/mount/stropts.c.orig 2018-07-30 14:14:01.243771746 -0400
+++ nfs-utils-1.3.0/utils/mount/stropts.c 2018-07-30 14:15:36.918075978 -0400
@@ -229,7 +229,8 @@ static int nfs_append_addr_option(const
/*
* Called to discover our address and append an appropriate 'clientaddr='
- * option to the options string.
+ * option to the options string. If the supplied 'clientaddr=' value does
+ * not match either IPV4/IPv6 any or a local address, then fail the mount.
*
* Returns 1 if 'clientaddr=' option created successfully or if
* 'clientaddr=' option is already present; otherwise zero.
@@ -242,8 +243,27 @@ static int nfs_append_clientaddr_option(
struct sockaddr *my_addr = &address.sa;
socklen_t my_len = sizeof(address);
- if (po_contains(options, "clientaddr") == PO_FOUND)
+ if (po_contains(options, "clientaddr") == PO_FOUND) {
+ char *addr = po_get(options, "clientaddr");
+ union nfs_sockaddr nfs_address;
+ struct sockaddr *nfs_saddr = &nfs_address.sa;
+ socklen_t nfs_salen = sizeof(nfs_address);
+
+ /* translate the input for clientaddr to nfs_sockaddr */
+ if (!nfs_string_to_sockaddr(addr, nfs_saddr, &nfs_salen))
+ return 0;
+
+ /* check for IPV4_ANY and IPV6_ANY */
+ if (nfs_is_inaddr_any(nfs_saddr))
+ return 1;
+
+ /* check if ip matches local network addresses */
+ if (!nfs_addr_matches_localips(nfs_saddr))
+ nfs_error(_("%s: [warning] supplied clientaddr=%s "
+ "does not match any existing network "
+ "addresses"), progname, addr);
return 1;
+ }
nfs_callback_address(sap, salen, my_addr, &my_len);

280
SOURCES/nfs-utils-1.3.0-mount-turnoffv4.patch

@ -0,0 +1,280 @@ @@ -0,0 +1,280 @@
diff -up nfs-utils-1.3.0/support/include/nfs/nfs.h.orig nfs-utils-1.3.0/support/include/nfs/nfs.h
--- nfs-utils-1.3.0/support/include/nfs/nfs.h.orig 2018-08-20 14:18:13.975034097 -0400
+++ nfs-utils-1.3.0/support/include/nfs/nfs.h 2018-08-20 14:18:29.624303893 -0400
@@ -16,8 +16,8 @@
#define NFSD_MINVERS 2
#define NFSD_MAXVERS 4
-#define NFS4_MINMINOR 1
-#define NFS4_MAXMINOR WORD_BIT
+#define NFS4_MINMINOR 0
+#define NFS4_MAXMINOR (WORD_BIT-1)
struct nfs_fh_len {
int fh_size;
@@ -49,16 +49,19 @@ struct nfs_fh_old {
#define NFSCTL_TCPBIT (1 << (18 - 1))
#define NFSCTL_VERUNSET(_cltbits, _v) ((_cltbits) &= ~(1 << ((_v) - 1)))
+#define NFSCTL_MINORUNSET(_cltbits, _v) ((_cltbits) &= ~(1 << (_v)))
#define NFSCTL_UDPUNSET(_cltbits) ((_cltbits) &= ~NFSCTL_UDPBIT)
#define NFSCTL_TCPUNSET(_cltbits) ((_cltbits) &= ~NFSCTL_TCPBIT)
#define NFSCTL_VERISSET(_cltbits, _v) ((_cltbits) & (1 << ((_v) - 1)))
+#define NFSCTL_MINORISSET(_cltbits, _v) ((_cltbits) & (1 << (_v)))
#define NFSCTL_UDPISSET(_cltbits) ((_cltbits) & NFSCTL_UDPBIT)
#define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)
#define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
#define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
+#define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v)))
#define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
#define NFSCTL_TCPSET(_cltbits) ((_cltbits) |= NFSCTL_TCPBIT)
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-08-20 14:18:13.975034097 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-08-20 14:18:58.023793505 -0400
@@ -66,10 +66,12 @@ main(int argc, char **argv)
int socket_up = 0;
unsigned int minorvers = NFSCTL_MINDEFAULT;
unsigned int minorversset = NFSCTL_MINDEFAULT;
+ unsigned int minormask = 0;
unsigned int versbits = NFSCTL_VERDEFAULT;
unsigned int protobits = NFSCTL_ALLBITS;
int grace = -1;
int lease = -1;
+ int force4dot0 = 0;
progname = basename(argv[0]);
haddr = xmalloc(sizeof(char *));
@@ -103,6 +105,8 @@ main(int argc, char **argv)
else
NFSCTL_VERUNSET(versbits, i);
}
+
+ nfssvc_get_minormask(&minormask);
/* We assume the kernel will default all minor versions to 'on',
* and allow the config file to disable some.
*/
@@ -118,12 +122,16 @@ main(int argc, char **argv)
* (i.e. don't set the bit in minorversset).
*/
if (!conf_get_bool("nfsd", tag, 1)) {
- NFSCTL_VERSET(minorversset, i);
- NFSCTL_VERUNSET(minorvers, i);
+ NFSCTL_MINORSET(minorversset, i);
+ NFSCTL_MINORUNSET(minorvers, i);
+ if (i == 0)
+ force4dot0 = 1;
}
if (conf_get_bool("nfsd", tag, 0)) {
- NFSCTL_VERSET(minorversset, i);
- NFSCTL_VERSET(minorvers, i);
+ NFSCTL_MINORSET(minorversset, i);
+ NFSCTL_MINORSET(minorvers, i);
+ if (i == 0)
+ force4dot0 = 1;
}
}
@@ -178,13 +186,19 @@ main(int argc, char **argv)
case 4:
if (*p == '.') {
int i = atoi(p+1);
- if (i < NFS4_MINMINOR || i > NFS4_MAXMINOR) {
+ if (i < 0 || i > NFS4_MAXMINOR) {
fprintf(stderr, "%s: unsupported minor version\n", optarg);
exit(1);
}
- NFSCTL_VERSET(minorversset, i);
- NFSCTL_VERUNSET(minorvers, i);
- break;
+ NFSCTL_MINORSET(minorversset, i);
+ NFSCTL_MINORUNSET(minorvers, i);
+ if (i == 0)
+ force4dot0 = 1;
+ if (minorvers != 0)
+ break;
+ } else {
+ minorvers = 0;
+ minorversset = minormask;
}
case 3:
case 2:
@@ -200,14 +214,16 @@ main(int argc, char **argv)
case 4:
if (*p == '.') {
int i = atoi(p+1);
- if (i < NFS4_MINMINOR || i > NFS4_MAXMINOR) {
+ if (i < 0 || i > NFS4_MAXMINOR) {
fprintf(stderr, "%s: unsupported minor version\n", optarg);
exit(1);
}
- NFSCTL_VERSET(minorversset, i);
- NFSCTL_VERSET(minorvers, i);
- break;
- }
+ NFSCTL_MINORSET(minorversset, i);
+ NFSCTL_MINORSET(minorvers, i);
+ if (i == 0)
+ force4dot0 = 1;
+ } else
+ minorvers = minorversset = minormask;
case 3:
case 2:
NFSCTL_VERSET(versbits, c);
@@ -305,7 +321,7 @@ main(int argc, char **argv)
* Timeouts must also be set before ports are created else we get
* EBUSY.
*/
- nfssvc_setvers(versbits, minorvers, minorversset);
+ nfssvc_setvers(versbits, minorvers, minorversset, force4dot0);
if (grace > 0)
nfssvc_set_time("grace", grace);
if (lease > 0)
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.man.orig nfs-utils-1.3.0/utils/nfsd/nfsd.man
--- nfs-utils-1.3.0/utils/nfsd/nfsd.man.orig 2018-08-20 14:18:13.934033391 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.man 2018-08-20 14:18:29.625303910 -0400
@@ -57,7 +57,7 @@ This option can be used to request that
.B rpc.nfsd
does not offer certain versions of NFS. The current version of
.B rpc.nfsd
-can support major NFS versions 2,3,4 and the minor versions 4.1 and 4.2.
+can support major NFS versions 2,3,4 and the minor versions 4.0, 4.1 and 4.2.
.TP
.B \-s " or " \-\-syslog
By default,
@@ -82,7 +82,7 @@ This option can be used to request that
.B rpc.nfsd
offer certain versions of NFS. The current version of
.B rpc.nfsd
-can support major NFS versions 2,3,4 and the minor versions 4.1 and 4.2.
+can support major NFS versions 2,3,4 and the minor versions 4.0, 4.1 and 4.2.
.TP
.B \-L " or " \-\-lease-time seconds
Set the lease-time used for NFSv4. This corresponds to how often
diff -up nfs-utils-1.3.0/utils/nfsd/nfssvc.c.orig nfs-utils-1.3.0/utils/nfsd/nfssvc.c
--- nfs-utils-1.3.0/utils/nfsd/nfssvc.c.orig 2018-08-20 14:18:13.963033891 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfssvc.c 2018-08-20 14:18:58.023793505 -0400
@@ -24,6 +24,7 @@
#include "nfslib.h"
#include "xlog.h"
#include "nfssvc.h"
+#include "../mount/version.h"
#ifndef NFSD_FS_DIR
#define NFSD_FS_DIR "/proc/fs/nfsd"
@@ -333,36 +334,81 @@ nfssvc_set_time(const char *type, const
}
void
-nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset)
+nfssvc_get_minormask(unsigned int *mask)
+{
+ int fd;
+ char *ptr = buf;
+ ssize_t size;
+
+ fd = open(NFSD_VERS_FILE, O_RDONLY);
+ if (fd < 0)
+ return;
+
+ size = read(fd, buf, sizeof(buf));
+ if (size < 0) {
+ xlog(L_ERROR, "Getting versions failed: errno %d (%m)", errno);
+ goto out;
+ }
+ ptr[size] = '\0';
+ for (;;) {
+ unsigned vers, minor = 0;
+ char *token = strtok(ptr, " ");
+
+ if (!token)
+ break;
+ ptr = NULL;
+ if (*token != '+' && *token != '-')
+ continue;
+ if (sscanf(++token, "%u.%u", &vers, &minor) > 0 &&
+ vers == 4 && minor <= NFS4_MAXMINOR)
+ NFSCTL_MINORSET(*mask, minor);
+ }
+out:
+ close(fd);
+ return;
+}
+
+static int
+nfssvc_print_vers(char *ptr, unsigned size, unsigned vers, unsigned minorvers,
+ int isset, int force4dot0)
+{
+ char sign = isset ? '+' : '-';
+ if (minorvers == 0)
+ if (linux_version_code() < MAKE_VERSION(4, 11, 0) || !force4dot0)
+ return snprintf(ptr, size, "%c%u ", sign, vers);
+ return snprintf(ptr, size, "%c%u.%u ", sign, vers, minorvers);
+}
+
+void
+nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset,
+ int force4dot0)
{
int fd, n, off;
- char *ptr;
- ptr = buf;
off = 0;
fd = open(NFSD_VERS_FILE, O_WRONLY);
if (fd < 0)
return;
- for (n = NFS4_MINMINOR; n <= NFS4_MAXMINOR; n++) {
- if (NFSCTL_VERISSET(minorversset, n)) {
- if (NFSCTL_VERISSET(minorvers, n))
- off += snprintf(ptr+off, sizeof(buf) - off, "+4.%d ", n);
- else
- off += snprintf(ptr+off, sizeof(buf) - off, "-4.%d ", n);
- }
- }
- for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) {
- if (NFSCTL_VERISSET(ctlbits, n))
- off += snprintf(ptr+off, sizeof(buf) - off, "+%d ", n);
- else
- off += snprintf(ptr+off, sizeof(buf) - off, "-%d ", n);
+ for (n = NFSD_MINVERS; n <= ((NFSD_MAXVERS < 3) ? NFSD_MAXVERS : 3); n++)
+ off += nfssvc_print_vers(&buf[off], sizeof(buf) - off,
+ n, 0, NFSCTL_VERISSET(ctlbits, n), 0);
+
+ for (n = 0; n <= NFS4_MAXMINOR; n++) {
+ if (!NFSCTL_MINORISSET(minorversset, n))
+ continue;
+ off += nfssvc_print_vers(&buf[off], sizeof(buf) - off,
+ 4, n, NFSCTL_MINORISSET(minorvers, n),
+ (n == 0) ? force4dot0 : 0);
}
+ if (!off--)
+ goto out;
+ buf[off] = '\0';
xlog(D_GENERAL, "Writing version string to kernel: %s", buf);
- snprintf(ptr+off, sizeof(buf) - off, "\n");
+ snprintf(&buf[off], sizeof(buf) - off, "\n");
if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf))
xlog(L_ERROR, "Setting version failed: errno %d (%m)", errno);
-
+out:
close(fd);
return;
diff -up nfs-utils-1.3.0/utils/nfsd/nfssvc.h.orig nfs-utils-1.3.0/utils/nfsd/nfssvc.h
--- nfs-utils-1.3.0/utils/nfsd/nfssvc.h.orig 2018-08-20 14:18:13.934033391 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfssvc.h 2018-08-20 14:18:58.023793505 -0400
@@ -26,5 +26,7 @@ int nfssvc_set_sockets(const unsigned in
const char *host, const char *port);
void nfssvc_set_time(const char *type, const int seconds);
int nfssvc_set_rdmaport(const char *port);
-void nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers4, unsigned int minorvers4set);
-int nfssvc_threads(unsigned short port, int nrservs);
+void nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers4,
+ unsigned int minorvers4set, int force4dot0);
+int nfssvc_threads(unsigned short port, int nrservs);
+void nfssvc_get_minormask(unsigned int *mask);

259
SOURCES/nfs-utils-1.3.0-mountstats-rdma.patch

@ -0,0 +1,259 @@ @@ -0,0 +1,259 @@
diff -up nfs-utils-1.3.0/tools/mountstats/mountstats.man.orig nfs-utils-1.3.0/tools/mountstats/mountstats.man
--- nfs-utils-1.3.0/tools/mountstats/mountstats.man.orig 2018-06-11 10:10:22.450171982 -0400
+++ nfs-utils-1.3.0/tools/mountstats/mountstats.man 2018-06-11 10:11:00.756778817 -0400
@@ -19,6 +19,8 @@ mountstats \- Displays various NFS clien
.RB [ \-r | \-\-rpc ]
|
.RB [ \-R | \-\-raw ]
+|
+.RB [ \-x | \-\-xprt ]
]
.RI [ mountpoint ] ...
.P
@@ -110,6 +112,9 @@ Display only the raw statistics. This i
and
.BR \-S | \-\-since
options.
+.TP
+.B \-x, \-\-xprt
+Display only the transport statistics
.SS Options specific to the iostat sub-command
.IP "\fIinterval\fP"
Specifies the amount of time in seconds between each report. The first report contains statistics for the time since each file system was mounted. Each subsequent report contains statistics collected during the interval since the previous report. This may not be used with the
diff -up nfs-utils-1.3.0/tools/mountstats/mountstats.py.orig nfs-utils-1.3.0/tools/mountstats/mountstats.py
--- nfs-utils-1.3.0/tools/mountstats/mountstats.py.orig 2018-06-11 10:10:22.501172790 -0400
+++ nfs-utils-1.3.0/tools/mountstats/mountstats.py 2018-06-11 10:11:00.757778833 -0400
@@ -87,7 +87,10 @@ XprtUdpCounters = [
'rpcreceives',
'badxids',
'inflightsends',
- 'backlogutil'
+ 'backlogutil',
+ 'maxslots',
+ 'sendutil',
+ 'pendutil'
]
XprtTcpCounters = [
@@ -100,7 +103,10 @@ XprtTcpCounters = [
'rpcreceives',
'badxids',
'inflightsends',
- 'backlogutil'
+ 'backlogutil',
+ 'maxslots',
+ 'sendutil',
+ 'pendutil'
]
XprtRdmaCounters = [
@@ -112,17 +118,25 @@ XprtRdmaCounters = [
'rpcsends',
'rpcreceives',
'badxids',
+ 'inflightsends',
'backlogutil',
- 'read_chunks',
- 'write_chunks',
- 'reply_chunks',
+ 'read_segments',
+ 'write_segments',
+ 'reply_segments',
'total_rdma_req',
'total_rdma_rep',
'pullup',
'fixup',
'hardway',
'failed_marshal',
- 'bad_reply'
+ 'bad_reply',
+ 'nomsg_calls',
+ 'recovered_mrs',
+ 'orphaned_mrs',
+ 'allocated_mrs',
+ 'local_invalidates',
+ 'empty_sendctx_q',
+ 'reply_waits_for_send',
]
Nfsv3ops = [
@@ -266,17 +280,20 @@ class DeviceData:
if words[1] == 'udp':
i = 2
for key in XprtUdpCounters:
- self.__rpc_data[key] = int(words[i])
+ if i < len(words):
+ self.__rpc_data[key] = int(words[i])
i += 1
elif words[1] == 'tcp':
i = 2
for key in XprtTcpCounters:
- self.__rpc_data[key] = int(words[i])
+ if i < len(words):
+ self.__rpc_data[key] = int(words[i])
i += 1
elif words[1] == 'rdma':
i = 2
for key in XprtRdmaCounters:
- self.__rpc_data[key] = int(words[i])
+ if i < len(words):
+ self.__rpc_data[key] = int(words[i])
i += 1
elif words[0] == 'per-op':
self.__rpc_data['per-op'] = words
@@ -354,12 +371,11 @@ class DeviceData:
def display_stats_header(self):
print('Stats for %s mounted on %s:' % \
(self.__nfs_data['export'], self.__nfs_data['mountpoint']))
+ print()
def display_nfs_options(self):
"""Pretty-print the NFS options
"""
- self.display_stats_header()
-
print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions']))
print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities']))
if 'nfsv4flags' in self.__nfs_data:
@@ -425,7 +441,6 @@ class DeviceData:
"""
sends = self.__rpc_data['rpcsends']
- print()
print('RPC statistics:')
print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \
@@ -643,6 +658,83 @@ class DeviceData:
self.__print_rpc_op_stats('WRITE', sample_time)
sys.stdout.flush()
+ def display_xprt_stats(self):
+ """Pretty-print the xprt statistics
+ """
+ if self.__rpc_data['protocol'] == 'udp':
+ print('\tTransport protocol: udp')
+ print('\tSource port: %d' % self.__rpc_data['port'])
+ print('\tBind count: %d' % self.__rpc_data['bind_count'])
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends'])
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives'])
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids'])
+ print('\tMax slots: %d' % self.__rpc_data['maxslots'])
+ if self.__rpc_data['rpcsends'] != 0:
+ print('\tAvg backlog length: %d' % \
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends']))
+ print('\tAvg send queue length: %d' % \
+ (float(self.__rpc_data['sendutil']) / self.__rpc_data['rpcsends']))
+ print('\tAvg pending queue length: %d' % \
+ (float(self.__rpc_data['pendutil']) / self.__rpc_data['rpcsends']))
+ elif self.__rpc_data['protocol'] == 'tcp':
+ print('\tTransport protocol: tcp')
+ print('\tSource port: %d' % self.__rpc_data['port'])
+ print('\tBind count: %d' % self.__rpc_data['bind_count'])
+ print('\tConnect count: %d' % self.__rpc_data['connect_count'])
+ print('\tConnect time: %d seconds' % self.__rpc_data['connect_time'])
+ print('\tIdle time: %d seconds' % self.__rpc_data['idle_time'])
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends'])
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives'])
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids'])
+ print('\tMax slots: %d' % self.__rpc_data['maxslots'])
+ if self.__rpc_data['rpcsends'] != 0:
+ print('\tAvg backlog length: %d' % \
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends']))
+ print('\tAvg send queue length: %d' % \
+ (float(self.__rpc_data['sendutil']) / self.__rpc_data['rpcsends']))
+ print('\tAvg pending queue length: %d' % \
+ (float(self.__rpc_data['pendutil']) / self.__rpc_data['rpcsends']))
+ elif self.__rpc_data['protocol'] == 'rdma':
+ print('\tTransport protocol: rdma')
+ print('\tConnect count: %d' % self.__rpc_data['connect_count'])
+ print('\tConnect time: %d seconds' % self.__rpc_data['connect_time'])
+ print('\tIdle time: %d seconds' % self.__rpc_data['idle_time'])
+ sends = self.__rpc_data['rpcsends']
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends'])
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives'])
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids'])
+ if self.__rpc_data['rpcsends'] != 0:
+ print('\tAvg backlog length: %d' % \
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends']))
+ print('\tRead segments: %d' % self.__rpc_data['read_segments'])
+ print('\tWrite segments: %d' % self.__rpc_data['write_segments'])
+ print('\tReply segments: %d' % self.__rpc_data['reply_segments'])
+ print('\tRegistered: %d bytes' % self.__rpc_data['total_rdma_req'])
+ print('\tRDMA received: %d bytes' % self.__rpc_data['total_rdma_rep'])
+ print('\tTotal pull-up: %d bytes' % self.__rpc_data['pullup'])
+ print('\tTotal fix-up: %d bytes' % self.__rpc_data['fixup'])
+ print('\tHardway allocations: %d bytes' % self.__rpc_data['hardway'])
+ print('\tFailed marshals: %d' % self.__rpc_data['failed_marshal'])
+ print('\tBad replies: %d' % self.__rpc_data['bad_reply'])
+
+ """ Counters not present in all kernels """
+ if 'nomsg_calls' in self.__rpc_data:
+ print('\tRDMA_NOMSG calls: %d' % self.__rpc_data['nomsg_calls'])
+ if 'allocated_mrs' in self.__rpc_data:
+ print('\tAllocated MRs: %d' % self.__rpc_data['allocated_mrs'])
+ if 'recovered_mrs' in self.__rpc_data:
+ print('\tRecovered MRs: %d' % self.__rpc_data['recovered_mrs'])
+ if 'orphaned_mrs' in self.__rpc_data:
+ print('\tOrphaned MRs: %d' % self.__rpc_data['orphaned_mrs'])
+ if 'local_invalidates' in self.__rpc_data:
+ print('\tLocal Invalidates needed: %d' % self.__rpc_data['local_invalidates'])
+ if 'empty_sendctx_q' in self.__rpc_data:
+ print('\tEmpty sendctx queue count: %d' % self.__rpc_data['empty_sendctx_q'])
+ if 'reply_waits_for_send' in self.__rpc_data:
+ print('\tReplies that waited for Send completion: %d' % self.__rpc_data['reply_waits_for_send'])
+ else:
+ raise Exception('Unknown RPC transport protocol %s' % self.__rpc_data['protocol'])
+
def parse_stats_file(f):
"""pop the contents of a mountstats file into a dictionary,
keyed by mount point. each value object is a list of the
@@ -669,8 +761,9 @@ def parse_stats_file(f):
return ms_dict
-def print_mountstats(stats, nfs_only, rpc_only, raw):
+def print_mountstats(stats, nfs_only, rpc_only, raw, xprt_only):
if nfs_only:
+ stats.display_stats_header()
stats.display_nfs_options()
stats.display_nfs_events()
stats.display_nfs_bytes()
@@ -680,7 +773,11 @@ def print_mountstats(stats, nfs_only, rp
stats.display_rpc_op_stats()
elif raw:
stats.display_raw_stats()
+ elif xprt_only:
+ stats.display_stats_header()
+ stats.display_xprt_stats()
else:
+ stats.display_stats_header()
stats.display_nfs_options()
stats.display_nfs_bytes()
stats.display_rpc_generic_stats()
@@ -722,14 +819,14 @@ def mountstats_command(args):
stats = DeviceData()
stats.parse_stats(mountstats[mp])
if not args.since:
- print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw)
+ print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only)
elif args.since and mp not in old_mountstats:
- print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw)
+ print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only)
else:
old_stats = DeviceData()
old_stats.parse_stats(old_mountstats[mp])
diff_stats = stats.compare_iostats(old_stats)
- print_mountstats(diff_stats, args.nfs_only, args.rpc_only, args.raw)
+ print_mountstats(diff_stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only)
args.infile.close()
if args.since:
@@ -941,6 +1038,8 @@ def main():
help='Display only the RPC statistics')
group.add_argument('-R', '--raw', action='store_true',
help='Display only the raw statistics')
+ group.add_argument('-x', '--xprt', action='store_true', dest='xprt_only',
+ help='Display only the xprt statistics')
# The mountpoints argument cannot be moved into the common_parser because
# it will screw up the parsing of the iostat arguments (interval and count)
mountstats_parser.add_argument('mountpoints', nargs='*', metavar='mountpoint',

12
SOURCES/nfs-utils-1.3.0-nfsclient-getopt.patch

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
diff -up nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c.orig nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c
--- nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c.orig 2018-07-10 13:58:43.314210025 -0400
+++ nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c 2018-07-10 14:10:43.732857114 -0400
@@ -555,7 +555,7 @@ find_cmd(char *cmdname)
int
main(int argc, char **argv)
{
- char arg;
+ int arg;
char *val;
int rc = 0;
char *progname, *cmdarg = NULL;

36
SOURCES/nfs-utils-1.3.0-nfsconf-disable-v4.patch

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-09-26 10:41:27.733102553 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-09-26 10:43:27.749413870 -0400
@@ -82,6 +82,9 @@ main(int argc, char **argv)
conf_init();
xlog_from_conffile("nfsd");
+
+ nfssvc_get_minormask(&minormask);
+
count = conf_get_num("nfsd", "threads", count);
grace = conf_get_num("nfsd", "grace-time", grace);
lease = conf_get_num("nfsd", "lease-time", lease);
@@ -100,13 +103,19 @@ main(int argc, char **argv)
for (i = 2; i <= 4; i++) {
char tag[10];
sprintf(tag, "vers%d", i);
- if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(versbits, i)))
+ if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(versbits, i))) {
NFSCTL_VERSET(versbits, i);
- else
+ if (i == 4)
+ minorvers = minorversset = minormask;
+ } else {
NFSCTL_VERUNSET(versbits, i);
+ if (i == 4) {
+ minorvers = 0;
+ minorversset = minormask;
+ }
+ }
}
- nfssvc_get_minormask(&minormask);
/* We assume the kernel will default all minor versions to 'on',
* and allow the config file to disable some.
*/

25
SOURCES/nfs-utils-1.3.0-nfsd-defautvers.patch

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
diff -up nfs-utils-1.3.0/support/include/nfs/nfs.h.orig nfs-utils-1.3.0/support/include/nfs/nfs.h
--- nfs-utils-1.3.0/support/include/nfs/nfs.h.orig 2014-03-25 11:12:07.000000000 -0400
+++ nfs-utils-1.3.0/support/include/nfs/nfs.h 2018-06-11 11:27:27.591007479 -0400
@@ -57,6 +57,7 @@ struct nfs_fh_old {
#define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)
#define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
+#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
#define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
#define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
#define NFSCTL_TCPSET(_cltbits) ((_cltbits) |= NFSCTL_TCPBIT)
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-06-11 10:44:25.722941203 -0400
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-06-11 11:28:00.084537974 -0400
@@ -64,8 +64,8 @@ main(int argc, char **argv)
int hcounter = 0;
struct conf_list *hosts;
int socket_up = 0;
- unsigned int minorvers = 0;
- unsigned int minorversset = 0;
+ unsigned int minorvers = NFSCTL_MINDEFAULT;
+ unsigned int minorversset = NFSCTL_MINDEFAULT;
unsigned int versbits = NFSCTL_VERDEFAULT;
unsigned int protobits = NFSCTL_ALLBITS;
int grace = -1;

21
SOURCES/nfs-utils-1.3.0-nfsmountconf-typo.patch

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
commit 3d0e59c63c9957d8cbca26f88bac1784d835e019
Author: Steve Dickson <steved@redhat.com>
Date: Tue Jul 10 14:19:30 2018 -0400

Fixed typo in nfsmount.conf
Signed-off-by: Steve Dickson <steved@redhat.com>

diff --git a/utils/mount/nfsmount.conf b/utils/mount/nfsmount.conf
index aeb3023..6bdc225 100644
--- a/utils/mount/nfsmount.conf
+++ b/utils/mount/nfsmount.conf
@@ -122,7 +122,7 @@
# mountproto=tcp
#
# Server Mountd Version
-# mounvers=3
+# mountvers=3
#
# Server Mountd Host
# mounthost=hostname

58
SOURCES/nfs-utils-1.3.0-rpcgssd-16bits.patch

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
commit 2a6b8307fa4243a7921270aedf8ce6506e31569a
Author: Steve Dickson <steved@redhat.com>
Date: Tue Jul 17 15:09:37 2018 -0400

rpc.gssd: truncates 32-bit UIDs/GIDs to 16 bits architectures.
utils/gssd_proc.c uses SYS_setresuid and SYS_setresgid in
change_identity when it should use SYS_setresuid32 and
SYS_setresgid32 instead. This causes it to truncate
UIDs/GIDs > 65536.
Fixes: https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1779962
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1595927
Tested-by: James Ettle <theholyettlz@googlemail.com>
Tested-by: Sree <Sree@gmail.com>
Signed-off-by: Steve Dickson <steved@redhat.com>

diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c
index 8767e26..7a57c4e 100644
--- a/utils/gssd/gssd_proc.c
+++ b/utils/gssd/gssd_proc.c
@@ -434,6 +434,7 @@ static int
change_identity(uid_t uid)
{
struct passwd *pw;
+ int res;
/* drop list of supplimentary groups first */
if (syscall(SYS_setgroups, 0, 0) != 0) {
@@ -459,14 +460,23 @@ change_identity(uid_t uid)
* send a signal to all other threads to synchronize the uid in all
* other threads. To bypass this, we have to call syscall() directly.
*/
- if (syscall(SYS_setresgid, pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) {
+#ifdef __NR_setresuid32
+ res = syscall(SYS_setresgid32, pw->pw_gid, pw->pw_gid, pw->pw_gid);
+#else
+ res = syscall(SYS_setresgid, pw->pw_gid, pw->pw_gid, pw->pw_gid);
+#endif
+ if (res != 0) {
printerr(0, "WARNING: failed to set gid to %u!\n", pw->pw_gid);
return errno;
}
- if (syscall(SYS_setresuid, uid, uid, uid) != 0) {
- printerr(0, "WARNING: Failed to setuid for user with uid %u\n",
- uid);
+#ifdef __NR_setresuid32
+ res = syscall(SYS_setresuid32, uid, uid, uid);
+#else
+ res = syscall(SYS_setresuid, uid, uid, uid);
+#endif
+ if (res != 0) {
+ printerr(0, "WARNING: Failed to setuid for user with uid %u\n", uid);
return errno;
}

13
SOURCES/nfs-utils-1.3.0-systemd-gssproxy-restart.patch

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
diff -up nfs-utils-1.3.0/systemd/nfs-server.service.orig nfs-utils-1.3.0/systemd/nfs-server.service
--- nfs-utils-1.3.0/systemd/nfs-server.service.orig 2017-12-12 10:16:47.164190963 -0500
+++ nfs-utils-1.3.0/systemd/nfs-server.service 2017-12-12 10:54:16.671323896 -0500
@@ -25,8 +25,8 @@ EnvironmentFile=-/run/sysconfig/nfs-util
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/usr/sbin/exportfs -r
-ExecStartPre=-/bin/sh -c '/bin/kill -HUP `cat /run/gssproxy.pid`'
ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS
+ExecStartPost=-/bin/sh -c 'if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi'
ExecStop=/usr/sbin/rpc.nfsd 0
ExecStopPost=/usr/sbin/exportfs -au
ExecStopPost=/usr/sbin/exportfs -f

43
SOURCES/nfs-utils-1.3.0-systemd-nfs-man.patch

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
diff -up nfs-utils-1.3.0/systemd/nfs.systemd.man.orig nfs-utils-1.3.0/systemd/nfs.systemd.man
--- nfs-utils-1.3.0/systemd/nfs.systemd.man.orig 2018-07-21 06:10:06.938288975 -0400
+++ nfs-utils-1.3.0/systemd/nfs.systemd.man 2018-07-21 06:10:18.888434798 -0400
@@ -79,7 +79,7 @@ unit should be enabled.
Several other units which might be considered to be optional, such as
.I rpc-gssd.service
are careful to only start if the required configuration file exists.
-.I rpc-gsdd.service
+.I rpc-gssd.service
will not start if the
.I krb5.keytab
file does not exist (typically in
@@ -120,10 +120,11 @@ be needed to reduce system load to an ab
attack surface by not running daemons that are not absolutely
required.
.PP
-Two particular services which this can apply to are
-.I rpcbind
+Three particular services which this can apply to are
+.IR rpcbind ,
+.IR idmapd ,
and
-.IR idmapd .
+.IR rpc-gssd .
.I rpcbind
is not part of the
.I nfs-utils
@@ -155,6 +156,15 @@ is not needed and not wanted, it can be
.RS
.B systemctl mask idmapd
.RE
+.I rpc-gssd
+is assumed to be needed if the
+.I krb5.keytab
+file is present. If a site needs this file present but does not want
+.I rpc-gssd
+running, it can be masked with
+.RS
+.B systemctl mask rpc-gssd
+.RE
.SH FILES
/etc/nfs.conf
.br

9
SOURCES/nfs-utils_env.sh

@ -11,6 +11,15 @@ if test -r $nfs_config; then @@ -11,6 +11,15 @@ if test -r $nfs_config; then
. $nfs_config
fi

[ -n "$LOCKDARG" ] && /sbin/modprobe lockd $LOCKDARG
if [ -n "$LOCKD_TCPPORT" -o -n "$LOCKD_UDPPORT" ]; then
[ -z "$LOCKDARG" ] && /sbin/modprobe lockd $LOCKDARG
[ -n "$LOCKD_TCPPORT" ] && \
/sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1
[ -n "$LOCKD_UDPPORT" ] && \
/sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1
fi

if [ -n "$MOUNTD_PORT" ]; then
RPCMOUNTDOPTS="$RPCMOUNTDOPTS -p $MOUNTD_PORT"
fi

13
SOURCES/nfs.sysconfig

@ -1,10 +1,15 @@ @@ -1,10 +1,15 @@

#
# Note: For new values to take effect the nfs-config service
# has to be restarted with the following command:
# systemctl restart nfs-config
#
# To set lockd kernel module parameters please see
# /etc/modprobe.d/lockd.conf
# Optional arguments passed to in-kernel lockd
#LOCKDARG=
# TCP port rpc.lockd should listen on.
#LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
#LOCKD_UDPPORT=32769
#

# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
RPCNFSDARGS=""
# Number of nfs server processes to be started.

65
SPECS/nfs-utils.spec

@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser @@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser
Name: nfs-utils
URL: http://sourceforge.net/projects/nfs
Version: 1.3.0
Release: 0.54%{?dist}
Release: 0.61%{?dist}
Epoch: 1

# group all 32bit related archs
@ -139,6 +139,20 @@ Patch105: nfs-utils-1.3.0-nfsdcltrack-invalops.patch @@ -139,6 +139,20 @@ Patch105: nfs-utils-1.3.0-nfsdcltrack-invalops.patch
Patch106: nfs-utils-1.3.0-nfs-man-v2.patch
Patch107: nfs-utils-1.3.0-nfs-iostat-no-dev.patch
Patch108: nfs-utils-1.3.0-mount-t-nfs4.patch
#
# RHEL7.6
#
Patch109: nfs-utils-1.3.0-mountstats-rdma.patch
Patch110: nfs-utils-1.3.0-systemd-gssproxy-restart.patch
Patch111: nfs-utils-1.3.0-nfsd-defautvers.patch
Patch112: nfs-utils-1.3.0-exportfs-rwro-display.patch
Patch113: nfs-utils-1.3.0-nfsclient-getopt.patch
Patch114: nfs-utils-1.3.0-nfsmountconf-typo.patch
Patch115: nfs-utils-1.3.0-rpcgssd-16bits.patch
Patch116: nfs-utils-1.3.0-systemd-nfs-man.patch
Patch117: nfs-utils-1.3.0-mount-clientaddr.patch
Patch118: nfs-utils-1.3.0-mount-turnoffv4.patch
Patch119: nfs-utils-1.3.0-nfsconf-disable-v4.patch

Patch1000: nfs-utils-1.2.1-statdpath-man.patch
Patch1001: nfs-utils-1.2.1-exp-subtree-warn-off.patch
@ -412,6 +426,28 @@ This package also contains the mount.nfs and umount.nfs program. @@ -412,6 +426,28 @@ This package also contains the mount.nfs and umount.nfs program.
%patch107 -p1
# 1547506 - Incorrect NFS version string reported for NFSv4.2 mounts
%patch108 -p1
# 1527938 - mountstats: Use correct RDMA terminology
%patch109 -p1
# 1527653 - nfs-server.service should use systemctl rather than....
%patch110 -p1
# 1436977 - [nfsd] cannot enable minor version 4.1 4.2 by...
%patch111 -p1
# 1532688 - Varying ro/rw in NFS export based on security flavor doesn't work
%patch112 -p1
# 1551903 - nfsdcltrack fails to initialize the database in ...
%patch113 -p1
# 1592235 - Typo in /etc/nfsmount.conf
%patch114 -p1
# 1602836 - Kerberos-enabled NFSv4 doesn't work on armv7hl
%patch115 -p1
# 1334510 - nfs v4 mounts with sec=sys are slow to succeed...
%patch116 -p1
# 1592915 - Do sanity checking of clientaddr user input during mount processing
%patch117 -p1
# 1596138 - [rpc.nfsd] Setting version failed: errno 22 (Invalid argument)...
%patch118 -p1
# 1625032 - [nfsd] fail to disable major NFS version 4 using "vers4=n"...
%patch119 -p1

%patch1000 -p1
%patch1001 -p1
@ -664,6 +700,33 @@ fi @@ -664,6 +700,33 @@ fi
/sbin/umount.nfs4

%changelog
* Wed Sep 26 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.61
- nfs.conf: fail to disable major NFS version 4 using "vers4=n" (bz 1625032)

* Mon Aug 20 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.60
- Updated: nfsd: Allow the caller to turn off NFSv4.0 (bz 1596138)

* Thu Aug 9 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.59
- nfsd: Allow the caller to turn off NFSv4.0 (bz 1596138)

* Tue Jul 31 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.58
- mount.nfs: Add check of clientaddr argument (bz 1592915)

* Sat Jul 21 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.57
- rpc.gssd: truncates 32-bit UIDs/GIDs to 16 bits architectures (bz 1602836)
- Added back lockd vars to nfs-utils_env.sh and sysconfig (bz 1413272)
- Document nfs v4 mounts will use Kerberos we available (bz 1334510)

* Tue Jul 10 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.56
- exportfs: move ro/rw option back to secinfo_flag_displaymap table (bz 1532688)
- nfsdcltrack: getopt_long() fails on a non x86_64 archs (bz 1551903)
- Fixed typo in nfsmount.conf (bz 1592235)

* Mon Jun 11 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.55
- mountstats: use correct RDMA terminology (bz 1527938)
- nfs-server: restart gssproxy when the server is restarted. (bz 1527653)
- nfsd: Set default minor versions (bz 1436977)

* Thu Feb 22 2018 Steve Dickson <steved@redhat.com> 1.3.0-0.54
- mount: move handling of "-t nfs4" into nfs_nfs_version() (bz 1547506)


Loading…
Cancel
Save