svn commit: r197153 - in
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs: . sys
Pawel Jakub Dawidek
pjd at FreeBSD.org
Sun Sep 13 10:33:52 UTC 2009
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);
More information about the svn-src-head
mailing list