diff options
author | mckusick <mckusick@FreeBSD.org> | 2002-10-14 03:20:36 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2002-10-14 03:20:36 +0000 |
commit | 25230d4c6a8ce0a2007e1b2694fcc4ff0869e15c (patch) | |
tree | 002d16cf963ee442c7680ba065d71a690c88783a /sys/security | |
parent | 2cf51225e1370232cb1606878600b9f10c5fd223 (diff) | |
download | FreeBSD-src-25230d4c6a8ce0a2007e1b2694fcc4ff0869e15c.zip FreeBSD-src-25230d4c6a8ce0a2007e1b2694fcc4ff0869e15c.tar.gz |
Regularize the vop_stdlock'ing protocol across all the filesystems
that use it. Specifically, vop_stdlock uses the lock pointed to by
vp->v_vnlock. By default, getnewvnode sets up vp->v_vnlock to
reference vp->v_lock. Filesystems that wish to use the default
do not need to allocate a lock at the front of their node structure
(as some still did) or do a lockinit. They can simply start using
vn_lock/VOP_UNLOCK. Filesystems that wish to manage their own locks,
but still use the vop_stdlock functions (such as nullfs) can simply
replace vp->v_vnlock with a pointer to the lock that they wish to
have used for the vnode. Such filesystems are responsible for
setting the vp->v_vnlock back to the default in their vop_reclaim
routine (e.g., vp->v_vnlock = &vp->v_lock).
In theory, this set of changes cleans up the existing filesystem
lock interface and should have no function change to the existing
locking scheme.
Sponsored by: DARPA & NAI Labs.
Diffstat (limited to 'sys/security')
-rw-r--r-- | sys/security/lomac/lomacfs_vnops.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/security/lomac/lomacfs_vnops.c b/sys/security/lomac/lomacfs_vnops.c index c40faa0..f30b110 100644 --- a/sys/security/lomac/lomacfs_vnops.c +++ b/sys/security/lomac/lomacfs_vnops.c @@ -205,7 +205,7 @@ lomacfs_lock( */ lvp = VTOLVP(vp); if (lvp == NULL || flags & LK_THISLAYER) - return (lockmgr(&vp->v_lock, flags, &vp->v_interlock, td)); + return (lockmgr(vp->v_vnlock, flags, &vp->v_interlock, td)); if (flags & LK_INTERLOCK) { mtx_unlock(&vp->v_interlock); flags &= ~LK_INTERLOCK; @@ -218,7 +218,7 @@ lomacfs_lock( error = vn_lock(lvp, lflags | LK_CANRECURSE, td); if (error) return (error); - error = lockmgr(&vp->v_lock, flags, &vp->v_interlock, td); + error = lockmgr(vp->v_vnlock, flags, &vp->v_interlock, td); if (error) VOP_UNLOCK(lvp, 0, td); return (error); @@ -245,7 +245,7 @@ lomacfs_unlock( struct vnode *lvp = VTOLVP(vp); int error; - error = lockmgr(&vp->v_lock, flags | LK_RELEASE, &vp->v_interlock, td); + error = lockmgr(vp->v_vnlock, flags | LK_RELEASE, &vp->v_interlock, td); if (lvp == NULL || flags & LK_THISLAYER || error) return (error); /* @@ -269,7 +269,7 @@ lomacfs_islocked( struct vnode *vp = ap->a_vp; struct thread *td = ap->a_td; - return (lockstatus(&vp->v_lock, td)); + return (lockstatus(vp->v_vnlock, td)); } static int |