diff --git a/SOURCES/nfs-utils-2.5.4-mount-ebusy.patch b/SOURCES/nfs-utils-2.5.4-mount-ebusy.patch new file mode 100644 index 0000000..bd0526f --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-mount-ebusy.patch @@ -0,0 +1,32 @@ +commit c547ad481dca5bc0b0a2e365ebcff3439848f664 +Author: Rohan Sable +Date: Mon Feb 14 11:15:22 2022 -0500 + + mount.nfs Fix error reporting for already mounted shares + + When mount is triggered for an already mounted + share (using auto negotiation), it displays + "mount.nfs: Protocol not supported" or + "mount.nfs: access denied by server while mounting" + instead of EBUSY. This easily causes confusion if + the mount was not tried verbose : + + Signed-off-by: Rohan Sable + Signed-off-by: Yongcheng Yang + Signed-off-by: Steve Dickson + +diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c +index 3c4e218a..573df6ee 100644 +--- a/utils/mount/stropts.c ++++ b/utils/mount/stropts.c +@@ -973,7 +973,9 @@ fall_back: + if ((result = nfs_try_mount_v3v2(mi, FALSE))) + return result; + +- errno = olderrno; ++ if (errno != EBUSY && errno != EACCES) ++ errno = olderrno; ++ + return result; + } + diff --git a/SOURCES/nfs-utils-2.5.4-nfsman-maxconnect.patch b/SOURCES/nfs-utils-2.5.4-nfsman-maxconnect.patch new file mode 100644 index 0000000..3aab8a0 --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-nfsman-maxconnect.patch @@ -0,0 +1,37 @@ +commit 28deb4f398363e4e75ea41ff0fe604b11f6ee91a +Author: Olga Kornievskaia +Date: Tue Sep 21 13:00:12 2021 -0400 + + nfs.man: adding new mount option max_connect + + When client discovers trunkable servers, instead of dropping newly + created trunkable connections, add this connection to the existing + RPC client. + + Signed-off-by: Olga Kornievskaia + Signed-off-by: Steve Dickson + +diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man +index f1b76936..57a693fd 100644 +--- a/utils/mount/nfs.man ++++ b/utils/mount/nfs.man +@@ -416,6 +416,19 @@ Note that the + option may also be used by some pNFS drivers to decide how many + connections to set up to the data servers. + .TP 1.5i ++.BR max_connect= n ++While ++.BR nconnect ++option sets a limit on the number of connections that can be established ++to a given server IP, ++.BR max_connect ++option allows the user to specify maximum number of connections to different ++server IPs that belong to the same NFSv4.1+ server (session trunkable ++connections) up to a limit of 16. When client discovers that it established ++a client ID to an already existing server, instead of dropping the newly ++created network transport, the client will add this new connection to the ++list of available transports for that RPC client. ++.TP 1.5i + .BR rdirplus " / " nordirplus + Selects whether to use NFS v3 or v4 READDIRPLUS requests. + If this option is not specified, the NFS client uses READDIRPLUS requests diff --git a/SOURCES/nfs-utils-2.5.4-rpcctl-xprt.patch b/SOURCES/nfs-utils-2.5.4-rpcctl-xprt.patch new file mode 100644 index 0000000..255b384 --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-rpcctl-xprt.patch @@ -0,0 +1,36 @@ +diff --git a/tools/rpcctl/rpcctl.py b/tools/rpcctl/rpcctl.py +index b8df556b..d2110ad6 100755 +--- a/tools/rpcctl/rpcctl.py ++++ b/tools/rpcctl/rpcctl.py +@@ -90,10 +90,18 @@ class Xprt: + self.dstaddr = write_addr_file(self.path / "dstaddr", newaddr) + + def set_state(self, state): ++ if self.info.get("main_xprt"): ++ raise Exception(f"Main xprts cannot be set {state}") + with open(self.path / "xprt_state", 'w') as f: + f.write(state) + self.read_state() + ++ def remove(self): ++ if self.info.get("main_xprt"): ++ raise Exception("Main xprts cannot be removed") ++ self.set_state("offline") ++ self.set_state("remove") ++ + def add_command(subparser): + parser = subparser.add_parser("xprt", help="Commands for individual xprts") + parser.set_defaults(func=Xprt.show, xprt=None) +@@ -139,10 +147,9 @@ class Xprt: + if args.property == "dstaddr": + xprt.set_dstaddr(socket.gethostbyname(args.newaddr[0])) + elif args.property == "remove": +- xprt.set_state("offline") +- xprt.set_state("remove") ++ xprt.remove() + else: +- args.set_state(args.property) ++ xprt.set_state(args.property) + print(xprt) + + diff --git a/SOURCES/nfs-utils-2.5.4-rpcidmapd-return.patch b/SOURCES/nfs-utils-2.5.4-rpcidmapd-return.patch new file mode 100644 index 0000000..cd5ee1d --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-rpcidmapd-return.patch @@ -0,0 +1,40 @@ +commit 9abd3b4b57155dfdfd6895e6086ef550ee56fc49 +Author: Wenchao Hao +Date: Tue Feb 22 16:06:51 2022 -0500 + + idmapd: Fix error status when nfs-idmapd exits + + nfs-idmapd.service would report following error when stopped: + + Starting NFSv4 ID-name mapping service... + rpc.idmapd[1198]: Setting log level to 0 + Started NFSv4 ID-name mapping service. + rpc.idmapd[1198]: exiting on signal 15 + Stopping NFSv4 ID-name mapping service... + nfs-idmapd.service: Main process exited, code=exited, status=1/FAILURE + nfs-idmapd.service: Failed with result 'exit-code'. + Stopped NFSv4 ID-name mapping service. + + commit 93e8f092(idmapd: Add graceful exit and resource cleanup) + redirected SIGTERM, so when executing "systemctl stop nfs-idmapd", the + main() of idmapd would running to tail to return, while it returned 1 + which considered as error by systemd. + + So here just return 0 in main(). + + Signed-off-by: Wenchao Hao + Signed-off-by: Steve Dickson + +diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c +index e2c160e8..e79c124d 100644 +--- a/utils/idmapd/idmapd.c ++++ b/utils/idmapd/idmapd.c +@@ -474,7 +474,7 @@ main(int argc, char **argv) + event_free(svrdirev); + event_base_free(evbase); + +- return 1; ++ return 0; + } + + static void diff --git a/SOURCES/nfs-utils-2.5.4-rpcpipefs-warn.patch b/SOURCES/nfs-utils-2.5.4-rpcpipefs-warn.patch new file mode 100644 index 0000000..6e7282e --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-rpcpipefs-warn.patch @@ -0,0 +1,31 @@ +commit 7f8463fe702174bd613df9d308cc899af25ae02e +Author: Steve Dickson +Date: Wed Feb 23 15:19:51 2022 -0500 + + systemd: Fix format-overflow warning + + rpc-pipefs-generator.c:35:23: error: '%s' directive output between 0 and 2147483653 bytes may exceed minimum required size of 4095 [-Werror=format-overflow=] + 35 | sprintf(path, "%s/%s", dirname, pipefs_unit); + | ^ + + Signed-off-by: Steve Dickson + +diff --git a/systemd/rpc-pipefs-generator.c b/systemd/rpc-pipefs-generator.c +index c24db567..7b2bb4f7 100644 +--- a/systemd/rpc-pipefs-generator.c ++++ b/systemd/rpc-pipefs-generator.c +@@ -28,11 +28,12 @@ static int generate_mount_unit(const char *pipefs_path, const char *pipefs_unit, + { + char *path; + FILE *f; ++ size_t size = (strlen(dirname) + 1 + strlen(pipefs_unit) + 1); + +- path = malloc(strlen(dirname) + 1 + strlen(pipefs_unit)); ++ path = malloc(size); + if (!path) + return 1; +- sprintf(path, "%s/%s", dirname, pipefs_unit); ++ snprintf(path, size, "%s/%s", dirname, pipefs_unit); + f = fopen(path, "w"); + if (!f) + { diff --git a/SOURCES/nfs-utils-2.5.4-systemd-rpcstatd.patch b/SOURCES/nfs-utils-2.5.4-systemd-rpcstatd.patch new file mode 100644 index 0000000..5b2b3aa --- /dev/null +++ b/SOURCES/nfs-utils-2.5.4-systemd-rpcstatd.patch @@ -0,0 +1,31 @@ +commit 8a835cebb149ba2a54b6518722c79019cf8e3da4 +Author: Benjamin Coddington +Date: Mon Aug 1 13:19:04 2022 -0400 + + rpc-statd.service: Stop rpcbind and rpc.stat in an exit race + + When `systemctl stop rpcbind.socket` is run, the dependency means + that systemd first sends SIGTERM to rpcbind, then sigterm to rpc.statd. + + On SIGTERM, rpcbind tears down /var/run/rpcbind.sock. However, + rpc-statd on SIGTERM attempts to unregister from rpcbind + + systemd needs to wait for rpc.statd to exit before sending + SIGTERM to rpcbind + + Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2100395 + Signed-off-by: Steve Dickson + +diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service +index 095629f2..392750da 100644 +--- a/systemd/rpc-statd.service ++++ b/systemd/rpc-statd.service +@@ -5,7 +5,7 @@ Conflicts=umount.target + Requires=nss-lookup.target rpcbind.socket + Wants=network-online.target + Wants=rpc-statd-notify.service +-After=network-online.target nss-lookup.target rpcbind.socket ++After=network-online.target nss-lookup.target rpcbind.service + + PartOf=nfs-utils.service + IgnoreOnIsolate=yes diff --git a/SPECS/nfs-utils.spec b/SPECS/nfs-utils.spec index c55c633..d01d891 100644 --- a/SPECS/nfs-utils.spec +++ b/SPECS/nfs-utils.spec @@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser Name: nfs-utils URL: http://linux-nfs.org/ Version: 2.5.4 -Release: 10%{?dist} +Release: 15%{?dist} Epoch: 1 # group all 32bit related archs @@ -24,6 +24,16 @@ Patch004: nfs-utils-2.5.4-mount-nov2.patch Patch005: nfs-utils-2.5.4-gssd-debug-msg.patch Patch006: nfs-utils-2.5.4-rpcctl.patch +# +# RHEL9.1 +# +Patch007: nfs-utils-2.5.4-nfsman-maxconnect.patch +Patch008: nfs-utils-2.5.4-rpcpipefs-warn.patch +Patch009: nfs-utils-2.5.4-rpcidmapd-return.patch +Patch010: nfs-utils-2.5.4-mount-ebusy.patch +Patch011: nfs-utils-2.5.4-rpcctl-xprt.patch +Patch012: nfs-utils-2.5.4-systemd-rpcstatd.patch + Patch100: nfs-utils-1.2.1-statdpath-man.patch Patch101: nfs-utils-1.2.1-exp-subtree-warn-off.patch Patch102: nfs-utils-1.2.5-idmap-errmsg.patch @@ -36,7 +46,7 @@ Provides: exportfs = %{epoch}:%{version}-%{release} Provides: nfsstat = %{epoch}:%{version}-%{release} Provides: showmount = %{epoch}:%{version}-%{release} Provides: rpcdebug = %{epoch}:%{version}-%{release} -Provides: rpcclt = %{epoch}:%{version}-%{release} +Provides: rpcctl = %{epoch}:%{version}-%{release} Provides: rpc.idmapd = %{epoch}:%{version}-%{release} Provides: rpc.mountd = %{epoch}:%{version}-%{release} Provides: rpc.nfsd = %{epoch}:%{version}-%{release} @@ -101,7 +111,7 @@ Show NFS client Statistics %package -n nfsv4-client-utils Summary: NFSv4 utilities for supporting client Provides: rpc.gssd = %{epoch}:%{version}-%{release} -Provides: rpcclt = %{epoch}:%{version}-%{release} +Provides: rpcctl = %{epoch}:%{version}-%{release} Provides: mount.nfs = %{epoch}:%{version}-%{release} Provides: mount.nfs4 = %{epoch}:%{version}-%{release} Provides: umount.nfs = %{epoch}:%{version}-%{release} @@ -279,9 +289,6 @@ fi if [ $1 -eq 0 ]; then %systemd_preun nfs-client.target %systemd_preun nfs-server.service - - rm -rf /var/lib/nfs/statd - rm -rf /var/lib/nfs/v4recovery fi %preun -n nfsv4-client-utils @@ -301,6 +308,11 @@ fi /bin/systemctl --system daemon-reload >/dev/null 2>&1 || : +if [ $1 -eq 0 ] ; then + rm -rf /var/lib/nfs/statd + rm -rf /var/lib/nfs/v4recovery +fi + %triggerin -- nfs-utils > 1:2.1.1-3 /bin/systemctl try-restart gssproxy || : @@ -454,6 +466,26 @@ fi %{_mandir}/*/nfsiostat.8.gz %changelog +* Thu Aug 18 2022 Steve Dickson 2.5.4-15 +- Fix uninstall warnings (bz 2048023) +- rpc-statd.service: Stop rpcbind and rpc.stat in an exit race (bz 2112941) + +* Mon Aug 1 2022 Steve Dickson 2.5.4-14 +- Fix the typo of dependency tag "Provides: rpcclt" (bz 2104406) + +* Thu Jul 28 2022 Steve Dickson 2.5.4-13 +- mount.nfs: Fix Typo auto negotiating code. (bz 2054300) + +* Fri Jul 22 2022 Steve Dickson 2.5.4-12 +- idmapd: Fix error status when nfs-idmapd exits (bz 2001764) +- mount.nfs Fix error reporting for already mounted shares (bz 2054300) +- rpcctl - fix failure when setting xprt offline and online (bz 2081934) +- rpc-pipefs-generator: allocate enough space (bz 2109420) + +* Sat Jul 16 2022 Steve Dickson 2.5.4-11 +- nfs.man: adding new mount option max_connect (bz 2106848) +- systemd: Fix format-overflow warning (bz 2106896) + * Mon Feb 28 2022 Steve Dickson 2.5.4-10 - Added the rpcctl command (bz 2059245)