aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2021-04-01 22:09:03 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2021-04-15 21:34:24 +0000
commit33c839b6f6798011d87ad26b43c66f4ce04cdc2c (patch)
treef9ecb2c5a874e592f64403c2b66dcd7378f88488
parentc6dcae2dfa3b96edc1fd8bbb6254c48fafbc8cd3 (diff)
downloadsrc-33c839b6f6798011d87ad26b43c66f4ce04cdc2c.tar.gz
src-33c839b6f6798011d87ad26b43c66f4ce04cdc2c.zip
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)
-rw-r--r--usr.sbin/nfsd/nfsd.c20
1 files 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");
}