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 int backupfd; /* Fd for the backup stable restart file */
static const char *getopt_shortopts; static const char *getopt_shortopts;
static const char *getopt_usage; static const char *getopt_usage;
static int nfs_minvers = NFS_VER2;
static int minthreads_set; static int minthreads_set;
static int maxthreads_set; static int maxthreads_set;
@ -170,7 +171,6 @@ main(int argc, char **argv)
int bindhostc, bindanyflag, rpcbreg, rpcbregcnt; int bindhostc, bindanyflag, rpcbreg, rpcbregcnt;
int nfssvc_addsock; int nfssvc_addsock;
int longindex = 0; int longindex = 0;
int nfs_minvers = NFS_VER2;
size_t nfs_minvers_size; size_t nfs_minvers_size;
const char *lopt; const char *lopt;
char **bindhost = NULL; char **bindhost = NULL;
@ -307,6 +307,16 @@ main(int argc, char **argv)
errx(1, "Out of memory"); 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); nfs_minvers_size = sizeof(nfs_minvers);
error = sysctlbyname("vfs.nfsd.server_min_nfsvers", &nfs_minvers, error = sysctlbyname("vfs.nfsd.server_min_nfsvers", &nfs_minvers,
&nfs_minvers_size, NULL, 0); &nfs_minvers_size, NULL, 0);
@ -316,10 +326,6 @@ main(int argc, char **argv)
nfs_minvers = NFS_VER2; nfs_minvers = NFS_VER2;
} }
if (unregister) {
unregistration();
exit (0);
}
if (reregister) { if (reregister) {
if (udpflag) { if (udpflag) {
memset(&hints, 0, sizeof hints); memset(&hints, 0, sizeof hints);
@ -935,8 +941,8 @@ reapchild(__unused int signo)
static void static void
unregistration(void) unregistration(void)
{ {
if ((!rpcb_unset(NFS_PROGRAM, 2, NULL)) || if ((nfs_minvers == NFS_VER2 && !rpcb_unset(NFS_PROGRAM, 2, NULL)) ||
(!rpcb_unset(NFS_PROGRAM, 3, NULL))) (nfs_minvers <= NFS_VER3 && !rpcb_unset(NFS_PROGRAM, 3, NULL)))
syslog(LOG_ERR, "rpcb_unset failed"); syslog(LOG_ERR, "rpcb_unset failed");
} }