summaryrefslogtreecommitdiffstats
path: root/sys/fs/udf
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/fs/udf
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/fs/udf')
-rw-r--r--sys/fs/udf/udf_vfsops.c2
-rw-r--r--sys/fs/udf/udf_vnops.c4
2 files changed, 1 insertions, 5 deletions
diff --git a/sys/fs/udf/udf_vfsops.c b/sys/fs/udf/udf_vfsops.c
index b23e30f..b41b86b 100644
--- a/sys/fs/udf/udf_vfsops.c
+++ b/sys/fs/udf/udf_vfsops.c
@@ -613,8 +613,6 @@ udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
unode->i_dev = udfmp->im_dev;
unode->udfmp = udfmp;
vp->v_data = unode;
- lockinit(&vp->v_lock, PINOD, "udfnode", 0, 0);
- vp->v_vnlock = &vp->v_lock;
VREF(udfmp->im_devvp);
udf_hashins(unode);
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c
index 2f71d86..4e4a4b6 100644
--- a/sys/fs/udf/udf_vnops.c
+++ b/sys/fs/udf/udf_vnops.c
@@ -135,8 +135,7 @@ udf_hashins(struct udf_node *node)
mtx_lock(&udfmp->hash_mtx);
TAILQ_INSERT_TAIL(&udfmp->udf_tqh, node, tq);
mtx_unlock(&udfmp->hash_mtx);
- lockmgr(&node->i_vnode->v_lock, LK_EXCLUSIVE, (struct mtx *)0,
- curthread);
+ vn_lock(node->i_vnode, LK_EXCLUSIVE | LK_RETRY, curthread);
return (0);
}
@@ -1028,7 +1027,6 @@ udf_reclaim(struct vop_reclaim_args *a)
if (unode->fentry != NULL)
FREE(unode->fentry, M_UDFFENTRY);
- lockdestroy(&unode->i_vnode->v_lock);
uma_zfree(udf_zone_node, unode);
vp->v_data = NULL;
}
OpenPOWER on IntegriCloud