svn commit: r279224 - in stable/10: sys/kern usr.sbin/mountd
Konstantin Belousov
kib at FreeBSD.org
Tue Feb 24 01:46:45 UTC 2015
Author: kib
Date: Tue Feb 24 01:46:43 2015
New Revision: 279224
URL: https://svnweb.freebsd.org/changeset/base/279224
Log:
MFC r278523:
In mountd, silence a race with the parallel unmount.
Modified:
stable/10/sys/kern/vfs_mount.c
stable/10/usr.sbin/mountd/mountd.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/kern/vfs_mount.c
==============================================================================
--- stable/10/sys/kern/vfs_mount.c Tue Feb 24 01:00:46 2015 (r279223)
+++ stable/10/sys/kern/vfs_mount.c Tue Feb 24 01:46:43 2015 (r279224)
@@ -888,12 +888,18 @@ vfs_domount_update(
ASSERT_VOP_ELOCKED(vp, __func__);
KASSERT((fsflags & MNT_UPDATE) != 0, ("MNT_UPDATE should be here"));
+ mp = vp->v_mount;
if ((vp->v_vflag & VV_ROOT) == 0) {
+ if (vfs_copyopt(*optlist, "export", &export, sizeof(export))
+ == 0)
+ error = EXDEV;
+ else
+ error = EINVAL;
vput(vp);
- return (EINVAL);
+ return (error);
}
- mp = vp->v_mount;
+
/*
* We only allow the filesystem to be reloaded if it
* is currently mounted read-only.
Modified: stable/10/usr.sbin/mountd/mountd.c
==============================================================================
--- stable/10/usr.sbin/mountd/mountd.c Tue Feb 24 01:00:46 2015 (r279223)
+++ stable/10/usr.sbin/mountd/mountd.c Tue Feb 24 01:46:43 2015 (r279224)
@@ -1747,8 +1747,12 @@ get_exportlist(void)
iov[5].iov_len = strlen(fsp->f_mntfromname) + 1;
errmsg[0] = '\0';
+ /*
+ * EXDEV is returned when path exists but is not a
+ * mount point. May happens if raced with unmount.
+ */
if (nmount(iov, iovlen, fsp->f_flags) < 0 &&
- errno != ENOENT && errno != ENOTSUP) {
+ errno != ENOENT && errno != ENOTSUP && errno != EXDEV) {
syslog(LOG_ERR,
"can't delete exports for %s: %m %s",
fsp->f_mntonname, errmsg);
More information about the svn-src-stable-10
mailing list