summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_default.c14
-rw-r--r--sys/kern/vfs_subr.c17
2 files changed, 15 insertions, 16 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
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 6a02ba0..4fe7deb 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -974,6 +974,8 @@ getnewvnode(tag, mp, vops, vpp)
vp->v_cstart = 0;
vp->v_clen = 0;
vp->v_socket = 0;
+ lockdestroy(vp->v_vnlock);
+ lockinit(vp->v_vnlock, PVFS, tag, VLKTIMEOUT, LK_NOPAUSE);
KASSERT(vp->v_cleanblkroot == NULL, ("cleanblkroot not NULL"));
KASSERT(vp->v_dirtyblkroot == NULL, ("dirtyblkroot not NULL"));
} else {
@@ -984,6 +986,8 @@ getnewvnode(tag, mp, vops, vpp)
mtx_init(&vp->v_interlock, "vnode interlock", NULL, MTX_DEF);
VI_LOCK(vp);
vp->v_dd = vp;
+ vp->v_vnlock = &vp->v_lock;
+ lockinit(vp->v_vnlock, PVFS, tag, VLKTIMEOUT, LK_NOPAUSE);
cache_purge(vp);
LIST_INIT(&vp->v_cache_src);
TAILQ_INIT(&vp->v_cache_dst);
@@ -994,7 +998,6 @@ getnewvnode(tag, mp, vops, vpp)
vp->v_type = VNON;
vp->v_tag = tag;
vp->v_op = vops;
- lockinit(&vp->v_lock, PVFS, "vnlock", VLKTIMEOUT, LK_NOPAUSE);
*vpp = vp;
vp->v_usecount = 1;
vp->v_data = 0;
@@ -1994,10 +1997,9 @@ addaliasu(nvp, nvp_rdev)
ovp->v_data = nvp->v_data;
ovp->v_tag = nvp->v_tag;
nvp->v_data = NULL;
- lockinit(&ovp->v_lock, PVFS, nvp->v_lock.lk_wmesg,
- nvp->v_lock.lk_timo, nvp->v_lock.lk_flags & LK_EXTFLG_MASK);
- if (nvp->v_vnlock)
- ovp->v_vnlock = &ovp->v_lock;
+ lockdestroy(ovp->v_vnlock);
+ lockinit(ovp->v_vnlock, PVFS, nvp->v_vnlock->lk_wmesg,
+ nvp->v_vnlock->lk_timo, nvp->v_vnlock->lk_flags & LK_EXTFLG_MASK);
ops = ovp->v_op;
ovp->v_op = nvp->v_op;
if (VOP_ISLOCKED(nvp, curthread)) {
@@ -2538,9 +2540,6 @@ vclean(vp, flags, td)
}
cache_purge(vp);
- vp->v_vnlock = NULL;
- lockdestroy(&vp->v_lock);
-
VI_LOCK(vp);
if (VSHOULDFREE(vp))
vfree(vp);
@@ -2813,7 +2812,7 @@ vprint(label, vp)
strcat(buf, "|VV_OBJBUF");
if (buf[0] != '\0')
printf(" flags (%s),", &buf[1]);
- lockmgr_printinfo(&vp->v_lock);
+ lockmgr_printinfo(vp->v_vnlock);
printf("\n");
if (vp->v_data != NULL) {
printf("\t");
OpenPOWER on IntegriCloud