summaryrefslogtreecommitdiffstats
path: root/sys/gnu/ext2fs
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/gnu/ext2fs
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/gnu/ext2fs')
-rw-r--r--sys/gnu/ext2fs/ext2_ihash.c2
-rw-r--r--sys/gnu/ext2fs/ext2_inode.c1
-rw-r--r--sys/gnu/ext2fs/ext2_vfsops.c1
3 files changed, 1 insertions, 3 deletions
diff --git a/sys/gnu/ext2fs/ext2_ihash.c b/sys/gnu/ext2fs/ext2_ihash.c
index decbc35..df2bd98 100644
--- a/sys/gnu/ext2fs/ext2_ihash.c
+++ b/sys/gnu/ext2fs/ext2_ihash.c
@@ -148,7 +148,7 @@ ext2_ihashins(ip)
struct ihashhead *ipp;
/* lock the inode, then put it on the appropriate hash list */
- lockmgr(&ip->i_vnode->v_lock, LK_EXCLUSIVE, (struct mtx *)0, td);
+ vn_lock(ITOV(ip), LK_EXCLUSIVE | LK_RETRY, td);
mtx_lock(&ext2_ihash_mtx);
ipp = INOHASH(ip->i_dev, ip->i_number);
diff --git a/sys/gnu/ext2fs/ext2_inode.c b/sys/gnu/ext2fs/ext2_inode.c
index a96dc67..fc14dba 100644
--- a/sys/gnu/ext2fs/ext2_inode.c
+++ b/sys/gnu/ext2fs/ext2_inode.c
@@ -546,7 +546,6 @@ ext2_reclaim(ap)
vrele(ip->i_devvp);
ip->i_devvp = 0;
}
- lockdestroy(&vp->v_lock);
FREE(vp->v_data, M_EXT2NODE);
vp->v_data = 0;
return (0);
diff --git a/sys/gnu/ext2fs/ext2_vfsops.c b/sys/gnu/ext2fs/ext2_vfsops.c
index cb358c0..8f27bdb 100644
--- a/sys/gnu/ext2fs/ext2_vfsops.c
+++ b/sys/gnu/ext2fs/ext2_vfsops.c
@@ -1017,7 +1017,6 @@ restart:
return (error);
}
bzero((caddr_t)ip, sizeof(struct inode));
- lockinit(&vp->v_lock, PINOD, "ext2in", 0, 0);
vp->v_data = ip;
ip->i_vnode = vp;
ip->i_e2fs = fs = ump->um_e2fs;
OpenPOWER on IntegriCloud