summaryrefslogtreecommitdiffstats
path: root/sys/fs/smbfs
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/smbfs
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/smbfs')
-rw-r--r--sys/fs/smbfs/smbfs_io.c2
-rw-r--r--sys/fs/smbfs/smbfs_node.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c
index 1baa384..21ccbab 100644
--- a/sys/fs/smbfs/smbfs_io.c
+++ b/sys/fs/smbfs/smbfs_io.c
@@ -203,7 +203,7 @@ smbfs_readvnode(struct vnode *vp, struct uio *uiop, struct ucred *cred)
return EFBIG;*/
td = uiop->uio_td;
if (vp->v_type == VDIR) {
- lks = LK_EXCLUSIVE;/*lockstatus(&vp->v_lock, td);*/
+ lks = LK_EXCLUSIVE;/*lockstatus(vp->v_vnlock, td);*/
if (lks == LK_SHARED)
vn_lock(vp, LK_UPGRADE | LK_RETRY, td);
error = smbfs_readvdir(vp, uiop, cred);
diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c
index edd62b7..c94787d 100644
--- a/sys/fs/smbfs/smbfs_node.c
+++ b/sys/fs/smbfs/smbfs_node.c
@@ -244,7 +244,7 @@ loop:
} else if (vp->v_type == VREG)
SMBERROR("new vnode '%s' born without parent ?\n", np->n_name);
- lockinit(&vp->v_lock, PINOD, "smbnode", VLKTIMEOUT, LK_CANRECURSE);
+ vp->v_vnlock->lk_flags |= LK_CANRECURSE;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
smbfs_hash_lock(smp, td);
OpenPOWER on IntegriCloud