aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2019-11-20 12:07:54 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2019-11-20 12:07:54 +0000
commitd957f3a4f005883d13cdec75fe415fc21ba26e7a (patch)
treec9d2a2dbc4081125f7320ab0b55d4d0749e04f74
parent4de1818baf096bb28d83e4ad37372e5cbaa5093f (diff)
downloadsrc-d957f3a4f005883d13cdec75fe415fc21ba26e7a.tar.gz
src-d957f3a4f005883d13cdec75fe415fc21ba26e7a.zip
vfs: perform a more racy check in vfs_notify_upper
Locking mp does not buy anything interms of correctness and only contributes to contention.
Notes
Notes: svn path=/head/; revision=354892
-rw-r--r--sys/kern/vfs_subr.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 5568888ec2f2..521cca27ccf8 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -3526,11 +3526,9 @@ vfs_notify_upper(struct vnode *vp, int event)
mp = vp->v_mount;
if (mp == NULL)
return;
-
- MNT_ILOCK(mp);
if (TAILQ_EMPTY(&mp->mnt_uppers))
- goto unlock;
- MNT_IUNLOCK(mp);
+ return;
+
mmp = malloc(sizeof(struct mount), M_TEMP, M_WAITOK | M_ZERO);
mmp->mnt_op = &vgonel_vfsops;
mmp->mnt_kern_flag |= MNTK_MARKER;
@@ -3564,7 +3562,6 @@ vfs_notify_upper(struct vnode *vp, int event)
mp->mnt_kern_flag &= ~MNTK_VGONE_WAITER;
wakeup(&mp->mnt_uppers);
}
-unlock:
MNT_IUNLOCK(mp);
}