summaryrefslogtreecommitdiffstats
path: root/sys/fs/nullfs/null_vfsops.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-02-29 15:09:20 +0000
committerkib <kib@FreeBSD.org>2012-02-29 15:09:20 +0000
commita51474db9378c81bf6a6f6a4399829ee32a53b68 (patch)
tree879331039425e047bf571a439547217e522bd3ac /sys/fs/nullfs/null_vfsops.c
parent14e9c61daeb88a78063ffa2d5df8725ff634be38 (diff)
downloadFreeBSD-src-a51474db9378c81bf6a6f6a4399829ee32a53b68.zip
FreeBSD-src-a51474db9378c81bf6a6f6a4399829ee32a53b68.tar.gz
Always request exclusive lock for the lower vnode in nullfs_vget().
The null_nodeget() requires exclusive lock on lowervp to be able to insmntque() new vnode. Reported by: rea Tested by: pho MFC after: 1 week
Diffstat (limited to 'sys/fs/nullfs/null_vfsops.c')
-rw-r--r--sys/fs/nullfs/null_vfsops.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/fs/nullfs/null_vfsops.c b/sys/fs/nullfs/null_vfsops.c
index b422077..414d2e3 100644
--- a/sys/fs/nullfs/null_vfsops.c
+++ b/sys/fs/nullfs/null_vfsops.c
@@ -312,6 +312,12 @@ nullfs_vget(mp, ino, flags, vpp)
struct vnode **vpp;
{
int error;
+
+ KASSERT((flags & LK_TYPE_MASK) != 0,
+ ("nullfs_vget: no lock requested"));
+ flags &= ~LK_TYPE_MASK;
+ flags |= LK_EXCLUSIVE;
+
error = VFS_VGET(MOUNTTONULLMOUNT(mp)->nullm_vfs, ino, flags, vpp);
if (error)
return (error);
OpenPOWER on IntegriCloud