Hi,

The following diff is still without intented behaviour changes.

The first chunk replaces a direct vp->v_op->vop_lock() call by
VOP_LOCK() wrapper. It only adds some safety check on vop_lock being
NULL (and MUTEX_ASSERT_UNLOCKED on vnode_mtx).

Others chunks replaces several direct manipulation of vnode lock by
VOP_LOCK / VOP_UNLOCK calls (instead of rrw_enter / rrw_exit). I
prefered VOP_LOCK() over vn_lock() to keep the code bug-to-bug
equivalent (if any).

Comments or OK ?
-- 
Sebastien Marie


diff e44725a8dd99f82f94f37ecff5c0e710c4dba97e 
/home/semarie/repos/openbsd/sys-clean
blob - a2a4643c4649ece502b8af46328cd953a7a93450
file + miscfs/deadfs/dead_vnops.c
--- miscfs/deadfs/dead_vnops.c
+++ miscfs/deadfs/dead_vnops.c
@@ -227,7 +227,7 @@ dead_lock(void *v)
        if (ap->a_flags & LK_DRAIN || !chkvnlock(vp))
                return (0);
 
-       return ((vp->v_op->vop_lock)(ap));
+       return VOP_LOCK(vp, ap->a_flags);
 }
 
 /*
blob - 38ca5b3e196592ea7d5a66d1d1bef52f99d9ecb2
file + isofs/cd9660/cd9660_node.c
--- isofs/cd9660/cd9660_node.c
+++ isofs/cd9660/cd9660_node.c
@@ -140,7 +140,7 @@ cd9660_ihashins(struct iso_node *ip)
        *ipp = ip;
        /* XXX locking unlock hash list? */
 
-       rrw_enter(&ip->i_lock, RW_WRITE);
+       VOP_LOCK(ITOV(ip), LK_EXCLUSIVE);
 
        return (0);
 }
blob - 81b900e83d2071d8450f35cfae42c6cb91f1a414
file + nfs/nfs_node.c
--- nfs/nfs_node.c
+++ nfs/nfs_node.c
@@ -146,7 +146,7 @@ loop:
        bcopy(fh, np->n_fhp, fhsize);
        np->n_fhsize = fhsize;
        /* lock the nfsnode, then put it on the rbtree */
-       rrw_enter(&np->n_lock, RW_WRITE);
+       VOP_LOCK(vp, LK_EXCLUSIVE);
        np2 = RBT_INSERT(nfs_nodetree, &nmp->nm_ntree, np);
        KASSERT(np2 == NULL);
        np->n_accstamp = -1;
blob - 2fef0bc139da82177ec809f76c30da4afef249f3
file + ufs/ufs/ufs_ihash.c
--- ufs/ufs/ufs_ihash.c
+++ ufs/ufs/ufs_ihash.c
@@ -137,7 +137,7 @@ ufs_ihashins(struct inode *ip)
        ufsino_t inum = ip->i_number;
 
        /* lock the inode, then put it on the appropriate hash list */
-       rrw_enter(&ip->i_lock, RW_WRITE);
+       VOP_LOCK(ITOV(ip), LK_EXCLUSIVE);
 
        /* XXXLOCKING lock hash list */
 
@@ -145,7 +145,7 @@ ufs_ihashins(struct inode *ip)
        LIST_FOREACH(curip, ipp, i_hash) {
                if (inum == curip->i_number && dev == curip->i_dev) {
                        /* XXXLOCKING unlock hash list? */
-                       rrw_exit(&ip->i_lock);
+                       VOP_UNLOCK(ITOV(ip));
                        return (EEXIST);
                }
        }

Reply via email to