Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Mar 2021 00:09:48 GMT
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 09673fc0f36d - main - mountd(8): generate a syslog message when the "V4:" line is missing
Message-ID:  <202103090009.12909mew060201@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=09673fc0f36dd1cca74940a240a9ed0f62228084

commit 09673fc0f36dd1cca74940a240a9ed0f62228084
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2021-03-09 00:08:02 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2021-03-09 00:08:02 +0000

    mountd(8): generate a syslog message when the "V4:" line is missing
    
    Daniel reported that NFSv4 mounts were not working despite having
    set "nfsv4_server_enable=YES" in /etc/rc.conf.  Mountd was logging a
    message that there was no /etc/exports file.
    He noted that creating a /etc/exports file with a "V4:" line in it
    was needed make NFSv4 mounts work.
    At least one "V4:" line in one of the exports(5) file(s) is needed to
    make NFSv4 mounts work. This patch fixes mountd.c so that it logs a
    message indicting that there is no "V4:" line in any exports(5)
    file when NFSv4 mounts are enabled.
    To avoid this message being generated erroneously, /etc/rc.d/mountd
    is updated to make sure vfs.nfsd.server_max_nfsvers is properly set
    before mountd(8) is started.
    
    Reported by:    debdrup
    PR:     253901
    MFC after:      2 weeks
---
 libexec/rc/rc.d/mountd   |  3 +++
 usr.sbin/mountd/mountd.c | 18 +++++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/libexec/rc/rc.d/mountd b/libexec/rc/rc.d/mountd
index 85d04c37a018..ba573ad732cc 100755
--- a/libexec/rc/rc.d/mountd
+++ b/libexec/rc/rc.d/mountd
@@ -34,6 +34,9 @@ mountd_precmd()
 		rc_flags="${rc_flags} -R"
 	else
 		force_depend rpcbind || return 1
+		if ! checkyesno nfsv4_server_enable; then
+			sysctl vfs.nfsd.server_max_nfsvers=3 > /dev/null
+		fi
 	fi
 
 	# mountd flags will differ depending on rc.conf settings
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
index 76972c66a6ed..c66ac13b3016 100644
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -1888,10 +1888,11 @@ get_exportlist(int passno)
 	struct iovec *iov;
 	struct statfs *mntbufp;
 	char errmsg[255];
-	int num, i;
+	int error, i, nfs_maxvers, num;
 	int iovlen;
 	struct nfsex_args eargs;
 	FILE *debug_file;
+	size_t nfs_maxvers_size;
 
 	if ((debug_file = fopen(_PATH_MOUNTDDEBUG, "r")) != NULL) {
 		fclose(debug_file);
@@ -2015,6 +2016,21 @@ get_exportlist(int passno)
 		read_exportfile(0);
 	}
 
+	if (strlen(v4root_dirpath) == 0) {
+		/* Check to see if a V4: line is needed. */
+		nfs_maxvers_size = sizeof(nfs_maxvers);
+		error = sysctlbyname("vfs.nfsd.server_max_nfsvers",
+		    &nfs_maxvers, &nfs_maxvers_size, NULL, 0);
+		if (error != 0 || nfs_maxvers < NFS_VER2 || nfs_maxvers >
+		    NFS_VER4) {
+			syslog(LOG_ERR, "sysctlbyname(vfs.nfsd."
+			    "server_max_nfsvers) failed, defaulting to NFSv3");
+			nfs_maxvers = NFS_VER3;
+		}
+		if (nfs_maxvers == NFS_VER4)
+			syslog(LOG_ERR, "NFSv4 requires at least one V4: line");
+	}
+
 	if (iov != NULL) {
 		/* Free strings allocated by strdup() in getmntopts.c */
 		free(iov[0].iov_base); /* fstype */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202103090009.12909mew060201>