svn commit: r243489 - stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Andriy Gapon avg at FreeBSD.org
Sat Nov 24 12:51:58 UTC 2012


Author: avg
Date: Sat Nov 24 12:51:57 2012
New Revision: 243489
URL: http://svnweb.freebsd.org/changeset/base/243489

Log:
  MFC r225153: We need to unlock and destroy vnode attached to znode which
  we are freeing.
  
  MFC slacker:	pjd

Modified:
  stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/cddl/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)

Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	Sat Nov 24 12:46:07 2012	(r243488)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	Sat Nov 24 12:51:57 2012	(r243489)
@@ -628,6 +628,18 @@ zfs_znode_dmu_fini(znode_t *zp)
 	zp->z_sa_hdl = NULL;
 }
 
+static void
+zfs_vnode_forget(vnode_t *vp)
+{
+
+	VOP_UNLOCK(vp, 0);
+	VI_LOCK(vp);
+	vp->v_usecount--;
+	vp->v_iflag |= VI_DOOMED;
+	vp->v_data = NULL;
+	vdropl(vp);
+}
+
 /*
  * Construct a new znode/vnode and intialize.
  *
@@ -689,6 +701,8 @@ zfs_znode_alloc(zfsvfs_t *zfsvfs, dmu_bu
 	if (sa_bulk_lookup(zp->z_sa_hdl, bulk, count) != 0 || zp->z_gen == 0) {
 		if (hdl == NULL)
 			sa_handle_destroy(zp->z_sa_hdl);
+		zfs_vnode_forget(vp);
+		zp->z_vnode = NULL;
 		kmem_cache_free(znode_cache, zp);
 		return (NULL);
 	}


More information about the svn-src-all mailing list