changeset 4480:0976678e58c5

6544140 assertion failed: err == 0 (0x11 == 0x0), file: ../../common/fs/zfs/zfs_znode.c, line: 555 6565044 small race condition between zfs_umount() and ZFS_ENTER()
author gw25295
date Fri, 15 Jun 2007 15:04:37 -0700
parents f252e40a86a6
children 2bb321aaf3c3
files usr/src/uts/common/fs/zfs/dnode_sync.c usr/src/uts/common/fs/zfs/zfs_replay.c usr/src/uts/common/fs/zfs/zfs_vfsops.c
diffstat 3 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/dnode_sync.c	Fri Jun 15 10:21:53 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/dnode_sync.c	Fri Jun 15 15:04:37 2007 -0700
@@ -494,6 +494,7 @@
 	dn->dn_type = DMU_OT_NONE;
 	dn->dn_maxblkid = 0;
 	dn->dn_allocated_txg = 0;
+	dn->dn_free_txg = 0;
 	mutex_exit(&dn->dn_mtx);
 
 	ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT);
--- a/usr/src/uts/common/fs/zfs/zfs_replay.c	Fri Jun 15 10:21:53 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/zfs_replay.c	Fri Jun 15 15:04:37 2007 -0700
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -104,6 +104,10 @@
 	ZFS_TIME_DECODE(&va.va_ctime, lr->lr_crtime);
 	va.va_nblocks = lr->lr_gen;
 
+	error = dmu_object_info(zfsvfs->z_os, lr->lr_foid, NULL);
+	if (error != ENOENT)
+		goto out;
+
 	switch ((int)lr->lr_common.lrc_txtype) {
 	case TX_CREATE:
 		error = VOP_CREATE(ZTOV(dzp), name, &va, 0, 0, &vp, kcred, 0);
@@ -122,6 +126,7 @@
 		error = ENOTSUP;
 	}
 
+out:
 	if (error == 0 && vp != NULL)
 		VN_RELE(vp);
 
--- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c	Fri Jun 15 10:21:53 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c	Fri Jun 15 15:04:37 2007 -0700
@@ -1011,6 +1011,12 @@
 		zfsvfs->z_unmounted1 = B_TRUE;
 
 		/*
+		 * Ensure that z_unmounted1 reaches global visibility
+		 * before z_op_cnt.
+		 */
+		membar_producer();
+
+		/*
 		 * Wait for all zfs threads to leave zfs.
 		 * Grabbing a rwlock as reader in all vops and
 		 * as writer here doesn't work because it too easy to get