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
This commit is contained in:
parent
075e4807df
commit
09673fc0f3
@ -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
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user