git: 33c839b6f679 - stable/13 - nfsd: silence rpcb_unset noise for NFSv4 only servers

Rick Macklem rmacklem at FreeBSD.org
Thu Apr 15 21:38:11 UTC 2021


The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=33c839b6f6798011d87ad26b43c66f4ce04cdc2c

commit 33c839b6f6798011d87ad26b43c66f4ce04cdc2c
Author:     Rick Macklem <rmacklem at FreeBSD.org>
AuthorDate: 2021-04-01 22:09:03 +0000
Commit:     Rick Macklem <rmacklem at FreeBSD.org>
CommitDate: 2021-04-15 21:34:24 +0000

    nfsd: silence rpcb_unset noise for NFSv4 only servers
    
    An NFSv4 only configuration does not register with
    rpcbind(). Without this patch a failure to rpcb_unset()
    is reported when the daemon is terminated for this case.
    
    This is harmless noise, but this patch avoids calling
    rpcb_unset() for the NFSv4 only case, avoiding the noise.
    
    When called with "-d", it still does the rpcb_unset(),
    assuming that the configuration might have been
    changed to NFSv4 only and unregistering with
    rpcbind() might still be needed.
    
    (cherry picked from commit b43fe9eb4b3365156016ae3477747a46fc094bb8)
---
 usr.sbin/nfsd/nfsd.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/usr.sbin/nfsd/nfsd.c b/usr.sbin/nfsd/nfsd.c
index 0eb9c2560cf1..0222d23f2312 100644
--- a/usr.sbin/nfsd/nfsd.c
+++ b/usr.sbin/nfsd/nfsd.c
@@ -101,6 +101,7 @@ static int stablefd = -1;	/* Fd for the stable restart file */
 static int backupfd;		/* Fd for the backup stable restart file */
 static const char *getopt_shortopts;
 static const char *getopt_usage;
+static int nfs_minvers = NFS_VER2;
 
 static int minthreads_set;
 static int maxthreads_set;
@@ -170,7 +171,6 @@ main(int argc, char **argv)
 	int bindhostc, bindanyflag, rpcbreg, rpcbregcnt;
 	int nfssvc_addsock;
 	int longindex = 0;
-	int nfs_minvers = NFS_VER2;
 	size_t nfs_minvers_size;
 	const char *lopt;
 	char **bindhost = NULL;
@@ -307,6 +307,16 @@ main(int argc, char **argv)
 			errx(1, "Out of memory");
 	}
 
+	if (unregister) {
+		/*
+		 * Unregister before setting nfs_minvers, in case the
+		 * value of vfs.nfsd.server_min_nfsvers has changed
+		 * since registering with rpcbind.
+		 */
+		unregistration();
+		exit (0);
+	}
+
 	nfs_minvers_size = sizeof(nfs_minvers);
 	error = sysctlbyname("vfs.nfsd.server_min_nfsvers", &nfs_minvers,
 	    &nfs_minvers_size, NULL, 0);
@@ -316,10 +326,6 @@ main(int argc, char **argv)
 		nfs_minvers = NFS_VER2;
 	}
 
-	if (unregister) {
-		unregistration();
-		exit (0);
-	}
 	if (reregister) {
 		if (udpflag) {
 			memset(&hints, 0, sizeof hints);
@@ -935,8 +941,8 @@ reapchild(__unused int signo)
 static void
 unregistration(void)
 {
-	if ((!rpcb_unset(NFS_PROGRAM, 2, NULL)) ||
-	    (!rpcb_unset(NFS_PROGRAM, 3, NULL)))
+	if ((nfs_minvers == NFS_VER2 && !rpcb_unset(NFS_PROGRAM, 2, NULL)) ||
+	    (nfs_minvers <= NFS_VER3 && !rpcb_unset(NFS_PROGRAM, 3, NULL)))
 		syslog(LOG_ERR, "rpcb_unset failed");
 }
 


More information about the dev-commits-src-all mailing list