summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_default.c
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2002-10-14 03:20:36 +0000
committermckusick <mckusick@FreeBSD.org>2002-10-14 03:20:36 +0000
commit25230d4c6a8ce0a2007e1b2694fcc4ff0869e15c (patch)
tree002d16cf963ee442c7680ba065d71a690c88783a /sys/kern/vfs_default.c
parent2cf51225e1370232cb1606878600b9f10c5fd223 (diff)
downloadFreeBSD-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/kern/vfs_default.c')
-rw-r--r--sys/kern/vfs_default.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index e179b55..69f8184 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -276,9 +276,9 @@ vop_stdlock(ap)
struct vnode *vp = ap->a_vp;
#ifndef DEBUG_LOCKS
- return (lockmgr(&vp->v_lock, ap->a_flags, VI_MTX(vp), ap->a_td));
+ return (lockmgr(vp->v_vnlock, ap->a_flags, VI_MTX(vp), ap->a_td));
#else
- return (debuglockmgr(&vp->v_lock, ap->a_flags, VI_MTX(vp),
+ return (debuglockmgr(vp->v_vnlock, ap->a_flags, VI_MTX(vp),
ap->a_td, "vop_stdlock", vp->filename, vp->line));
#endif
}
@@ -294,7 +294,7 @@ vop_stdunlock(ap)
{
struct vnode *vp = ap->a_vp;
- return (lockmgr(&vp->v_lock, ap->a_flags | LK_RELEASE, VI_MTX(vp),
+ return (lockmgr(vp->v_vnlock, ap->a_flags | LK_RELEASE, VI_MTX(vp),
ap->a_td));
}
@@ -307,7 +307,7 @@ vop_stdislocked(ap)
} */ *ap;
{
- return (lockstatus(&ap->a_vp->v_lock, ap->a_td));
+ return (lockstatus(ap->a_vp->v_vnlock, ap->a_td));
}
/* Mark the vnode inactive */
@@ -423,9 +423,9 @@ vop_sharedlock(ap)
if (flags & LK_INTERLOCK)
vnflags |= LK_INTERLOCK;
#ifndef DEBUG_LOCKS
- return (lockmgr(&vp->v_lock, vnflags, VI_MTX(vp), ap->a_td));
+ return (lockmgr(vp->v_vnlock, vnflags, VI_MTX(vp), ap->a_td));
#else
- return (debuglockmgr(&vp->v_lock, vnflags, VI_MTX(vp), ap->a_td,
+ return (debuglockmgr(vp->v_vnlock, vnflags, VI_MTX(vp), ap->a_td,
"vop_sharedlock", vp->filename, vp->line));
#endif
}
@@ -480,7 +480,7 @@ vop_nolock(ap)
}
if (flags & LK_INTERLOCK)
vnflags |= LK_INTERLOCK;
- return(lockmgr(&vp->v_lock, vnflags, VI_MTX(vp), ap->a_td));
+ return(lockmgr(vp->v_vnlock, vnflags, VI_MTX(vp), ap->a_td));
#else /* for now */
/*
* Since we are not using the lock manager, we must clear
OpenPOWER on IntegriCloud