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.

Reviewed by:	freqlabs
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D29449
This commit is contained in:
Rick Macklem 2021-04-01 15:09:03 -07:00
parent 516fe911a6
commit b43fe9eb4b

View file

@ -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");
}