Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Oct 2015 07:48:26 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r288560 - stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201510030748.t937mQqv073717@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sat Oct  3 07:48:25 2015
New Revision: 288560
URL: https://svnweb.freebsd.org/changeset/base/288560

Log:
  MFC r286605: 5812 assertion failed in zrl_tryenter(): zr_owner==NULL
  
  Reviewed by: George Wilson <george@delphix.com>
  Reviewed by: Alex Reece <alex@delphix.com>
  Reviewed by: Will Andrews <will@freebsd.org>
  Approved by: Gordon Ross <gwr@nexenta.com>
  Author: Matthew Ahrens <mahrens@delphix.com>
  
  illumos/illumos-gate@8df173054ca442cd8845a7364c3edad9d6822351

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

Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c	Sat Oct  3 07:47:33 2015	(r288559)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zrlock.c	Sat Oct  3 07:48:25 2015	(r288560)
@@ -20,6 +20,7 @@
  */
 /*
  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014 by Delphix. All rights reserved.
  */
 
 /*
@@ -42,7 +43,7 @@
  * A ZRL can be locked only while there are zero references, so ZRL_LOCKED is
  * treated as zero references.
  */
-#define	ZRL_LOCKED	((uint32_t)-1)
+#define	ZRL_LOCKED	-1
 #define	ZRL_DESTROYED	-2
 
 void
@@ -60,7 +61,7 @@ zrl_init(zrlock_t *zrl)
 void
 zrl_destroy(zrlock_t *zrl)
 {
-	ASSERT(zrl->zr_refcount == 0);
+	ASSERT0(zrl->zr_refcount);
 
 	mutex_destroy(&zrl->zr_mtx);
 	zrl->zr_refcount = ZRL_DESTROYED;
@@ -80,7 +81,7 @@ zrl_add(zrlock_t *zrl)
 		uint32_t cas = atomic_cas_32(
 		    (uint32_t *)&zrl->zr_refcount, n, n + 1);
 		if (cas == n) {
-			ASSERT((int32_t)n >= 0);
+			ASSERT3S((int32_t)n, >=, 0);
 #ifdef	ZFS_DEBUG
 			if (zrl->zr_owner == curthread) {
 				DTRACE_PROBE2(zrlock__reentry,
@@ -98,7 +99,7 @@ zrl_add(zrlock_t *zrl)
 	while (zrl->zr_refcount == ZRL_LOCKED) {
 		cv_wait(&zrl->zr_cv, &zrl->zr_mtx);
 	}
-	ASSERT(zrl->zr_refcount >= 0);
+	ASSERT3S(zrl->zr_refcount, >=, 0);
 	zrl->zr_refcount++;
 #ifdef	ZFS_DEBUG
 	zrl->zr_owner = curthread;
@@ -112,14 +113,14 @@ zrl_remove(zrlock_t *zrl)
 {
 	uint32_t n;
 
-	n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount);
-	ASSERT((int32_t)n >= 0);
 #ifdef	ZFS_DEBUG
 	if (zrl->zr_owner == curthread) {
 		zrl->zr_owner = NULL;
 		zrl->zr_caller = NULL;
 	}
 #endif
+	n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount);
+	ASSERT3S((int32_t)n, >=, 0);
 }
 
 int
@@ -132,14 +133,14 @@ zrl_tryenter(zrlock_t *zrl)
 		    (uint32_t *)&zrl->zr_refcount, 0, ZRL_LOCKED);
 		if (cas == 0) {
 #ifdef	ZFS_DEBUG
-			ASSERT(zrl->zr_owner == NULL);
+			ASSERT3P(zrl->zr_owner, ==, NULL);
 			zrl->zr_owner = curthread;
 #endif
 			return (1);
 		}
 	}
 
-	ASSERT((int32_t)n > ZRL_DESTROYED);
+	ASSERT3S((int32_t)n, >, ZRL_DESTROYED);
 
 	return (0);
 }
@@ -147,11 +148,11 @@ zrl_tryenter(zrlock_t *zrl)
 void
 zrl_exit(zrlock_t *zrl)
 {
-	ASSERT(zrl->zr_refcount == ZRL_LOCKED);
+	ASSERT3S(zrl->zr_refcount, ==, ZRL_LOCKED);
 
 	mutex_enter(&zrl->zr_mtx);
 #ifdef	ZFS_DEBUG
-	ASSERT(zrl->zr_owner == curthread);
+	ASSERT3P(zrl->zr_owner, ==, curthread);
 	zrl->zr_owner = NULL;
 	membar_producer();	/* make sure the owner store happens first */
 #endif
@@ -163,7 +164,7 @@ zrl_exit(zrlock_t *zrl)
 int
 zrl_refcount(zrlock_t *zrl)
 {
-	ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
+	ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED);
 
 	int n = (int)zrl->zr_refcount;
 	return (n <= 0 ? 0 : n);
@@ -172,7 +173,7 @@ zrl_refcount(zrlock_t *zrl)
 int
 zrl_is_zero(zrlock_t *zrl)
 {
-	ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
+	ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED);
 
 	return (zrl->zr_refcount <= 0);
 }
@@ -180,7 +181,7 @@ zrl_is_zero(zrlock_t *zrl)
 int
 zrl_is_locked(zrlock_t *zrl)
 {
-	ASSERT(zrl->zr_refcount > ZRL_DESTROYED);
+	ASSERT3S(zrl->zr_refcount, >, ZRL_DESTROYED);
 
 	return (zrl->zr_refcount == ZRL_LOCKED);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510030748.t937mQqv073717>