Author: pjd
Date: Sun Sep 13 10:33:51 2009
New Revision: 197153
URL: http://svn.freebsd.org/changeset/base/197153

Log:
  When zfs.ko is compiled with debug, make sure that znode and vnode point at
  each other.
  
  MFC after:    3 days

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h Sun Sep 
13 10:29:51 2009        (r197152)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h Sun Sep 
13 10:33:51 2009        (r197153)
@@ -231,8 +231,27 @@ typedef struct znode {
 /*
  * Convert between znode pointers and vnode pointers
  */
+#ifdef DEBUG
+static __inline vnode_t *
+ZTOV(znode_t *zp)
+{
+       vnode_t *vp = zp->z_vnode;
+
+       ASSERT(vp == NULL || vp->v_data == NULL || vp->v_data == zp);
+       return (vp);
+}
+static __inline znode_t *
+VTOZ(vnode_t *vp)
+{
+       znode_t *zp = (znode_t *)vp->v_data;
+
+       ASSERT(zp == NULL || zp->z_vnode == NULL || zp->z_vnode == vp);
+       return (zp);
+}
+#else
 #define        ZTOV(ZP)        ((ZP)->z_vnode)
 #define        VTOZ(VP)        ((znode_t *)(VP)->v_data)
+#endif
 
 /*
  * ZFS_ENTER() is called on entry to each ZFS vnode and vfs operation.

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sun Sep 
13 10:29:51 2009        (r197152)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sun Sep 
13 10:33:51 2009        (r197153)
@@ -4382,7 +4382,7 @@ zfs_freebsd_reclaim(ap)
 
        mutex_enter(&zp->z_lock);
        ASSERT(zp->z_phys != NULL);
-       ZTOV(zp) = NULL;
+       zp->z_vnode = NULL;
        mutex_exit(&zp->z_lock);
 
        if (zp->z_unlinked)

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Sun Sep 
13 10:29:51 2009        (r197152)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c     Sun Sep 
13 10:33:51 2009        (r197153)
@@ -110,7 +110,7 @@ znode_evict_error(dmu_buf_t *dbuf, void 
                mutex_exit(&zp->z_lock);
                zfs_znode_free(zp);
        } else if (vp->v_count == 0) {
-               ZTOV(zp) = NULL;
+               zp->z_vnode = NULL;
                vhold(vp);
                mutex_exit(&zp->z_lock);
                vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
@@ -1533,7 +1533,7 @@ zfs_create_fs(objset_t *os, cred_t *cr, 
        ZTOV(rootzp)->v_data = NULL;
        ZTOV(rootzp)->v_count = 0;
        ZTOV(rootzp)->v_holdcnt = 0;
-       ZTOV(rootzp) = NULL;
+       rootzp->z_vnode = NULL;
        VOP_UNLOCK(vp, 0);
        vdestroy(vp);
        dmu_buf_rele(rootzp->z_dbuf, NULL);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to