diff options
author | kib <kib@FreeBSD.org> | 2012-02-29 15:09:20 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-02-29 15:09:20 +0000 |
commit | a51474db9378c81bf6a6f6a4399829ee32a53b68 (patch) | |
tree | 879331039425e047bf571a439547217e522bd3ac /sys/fs/nullfs/null_vfsops.c | |
parent | 14e9c61daeb88a78063ffa2d5df8725ff634be38 (diff) | |
download | FreeBSD-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.c | 6 |
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); |