changeset 4808:63629eaeb41a

6498144 ::kmastat could be even easier to read 6580855 spa_scrub() should be called with spa_namespace_lock held, not the config lock
author ek110237
date Mon, 06 Aug 2007 15:11:21 -0700
parents 661e1fe142fa
children 449081c7eb0a
files usr/src/cmd/mdb/common/modules/genunix/genunix.c usr/src/cmd/ztest/ztest.c usr/src/uts/common/fs/zfs/spa.c usr/src/uts/common/fs/zfs/vdev.c usr/src/uts/common/fs/zfs/zfs_ioctl.c
diffstat 5 files changed, 39 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/mdb/common/modules/genunix/genunix.c	Mon Aug 06 15:02:44 2007 -0700
+++ b/usr/src/cmd/mdb/common/modules/genunix/genunix.c	Mon Aug 06 15:11:21 2007 -0700
@@ -110,6 +110,10 @@
  */
 #define	NINTR		16
 
+#define	KILOS		10
+#define	MEGS		20
+#define	GIGS		30
+
 #ifndef STACK_BIAS
 #define	STACK_BIAS	0
 #endif
@@ -1092,7 +1096,7 @@
 	{ "   buf",	"  size",	"------",	"%6u "		},
 	{ "   buf",	"in use",	"------",	"%6u "		},
 	{ "   buf",	" total",	"------",	"%6u "		},
-	{ "   memory",	"   in use",	"---------",	"%9u "		},
+	{ "   memory",	"   in use",	"----------",	"%9u%c "	},
 	{ "    alloc",	"  succeed",	"---------",	"%9u "		},
 	{ "alloc",	" fail",	"-----",	"%5u "		},
 	{ NULL,		NULL,		NULL,		NULL		}
@@ -1101,9 +1105,9 @@
 static datafmt_t vmemfmt[] = {
 	{ "vmem                     ", "name                     ",
 	"-------------------------", "%-*s "				},
-	{ "   memory",	"   in use",	"---------",	"%9llu "	},
-	{ "    memory",	"     total",	"----------",	"%10llu "	},
-	{ "   memory",	"   import",	"---------",	"%9llu "	},
+	{ "   memory",	"   in use",	"----------",	"%9llu%c "	},
+	{ "    memory",	"     total",	"-----------",	"%10llu%c "	},
+	{ "   memory",	"   import",	"----------",	"%9llu%c "	},
 	{ "    alloc",	"  succeed",	"---------",	"%9llu "	},
 	{ "alloc",	" fail",	"-----",	"%5llu "	},
 	{ NULL,		NULL,		NULL,		NULL		}
@@ -1196,7 +1200,9 @@
 	mdb_printf((dfp++)->fmt, cp->cache_bufsize);
 	mdb_printf((dfp++)->fmt, total - avail);
 	mdb_printf((dfp++)->fmt, total);
-	mdb_printf((dfp++)->fmt, meminuse >> kap->ka_shift);
+	mdb_printf((dfp++)->fmt, meminuse >> kap->ka_shift,
+	    kap->ka_shift == GIGS ? 'G' : kap->ka_shift == MEGS ? 'M' :
+	    kap->ka_shift == KILOS ? 'K' : 'B');
 	mdb_printf((dfp++)->fmt, alloc);
 	mdb_printf((dfp++)->fmt, cp->cache_alloc_fail);
 	mdb_printf("\n");
@@ -1218,9 +1224,11 @@
 
 	len = MIN(17, strlen(v->vm_name));
 
-	mdb_printf("Total [%s]%*s %6s %6s %6s %9u %9u %5u\n", v->vm_name,
+	mdb_printf("Total [%s]%*s %6s %6s %6s %9u%c %9u %5u\n", v->vm_name,
 	    17 - len, "", "", "", "",
-	    kv->kv_meminuse >> kap->ka_shift, kv->kv_alloc, kv->kv_fail);
+	    kv->kv_meminuse >> kap->ka_shift,
+	    kap->ka_shift == GIGS ? 'G' : kap->ka_shift == MEGS ? 'M' :
+	    kap->ka_shift == KILOS ? 'K' : 'B', kv->kv_alloc, kv->kv_fail);
 
 	return (WALK_NEXT);
 }
@@ -1246,9 +1254,15 @@
 
 	mdb_printf("%*s", ident, "");
 	mdb_printf((dfp++)->fmt, 25 - ident, v->vm_name);
-	mdb_printf((dfp++)->fmt, vkp->vk_mem_inuse.value.ui64);
-	mdb_printf((dfp++)->fmt, vkp->vk_mem_total.value.ui64);
-	mdb_printf((dfp++)->fmt, vkp->vk_mem_import.value.ui64 >> *shiftp);
+	mdb_printf((dfp++)->fmt, vkp->vk_mem_inuse.value.ui64 >> *shiftp,
+	    *shiftp == GIGS ? 'G' : *shiftp == MEGS ? 'M' :
+	    *shiftp == KILOS ? 'K' : 'B');
+	mdb_printf((dfp++)->fmt, vkp->vk_mem_total.value.ui64 >> *shiftp,
+	    *shiftp == GIGS ? 'G' : *shiftp == MEGS ? 'M' :
+	    *shiftp == KILOS ? 'K' : 'B');
+	mdb_printf((dfp++)->fmt, vkp->vk_mem_import.value.ui64 >> *shiftp,
+	    *shiftp == GIGS ? 'G' : *shiftp == MEGS ? 'M' :
+	    *shiftp == KILOS ? 'K' : 'B');
 	mdb_printf((dfp++)->fmt, vkp->vk_alloc.value.ui64);
 	mdb_printf((dfp++)->fmt, vkp->vk_fail.value.ui64);
 
@@ -1267,9 +1281,9 @@
 
 	ka.ka_shift = 0;
 	if (mdb_getopts(argc, argv,
-	    'k', MDB_OPT_SETBITS, 10, &ka.ka_shift,
-	    'm', MDB_OPT_SETBITS, 20, &ka.ka_shift,
-	    'g', MDB_OPT_SETBITS, 30, &ka.ka_shift, NULL) != argc)
+	    'k', MDB_OPT_SETBITS, KILOS, &ka.ka_shift,
+	    'm', MDB_OPT_SETBITS, MEGS, &ka.ka_shift,
+	    'g', MDB_OPT_SETBITS, GIGS, &ka.ka_shift, NULL) != argc)
 		return (DCMD_USAGE);
 
 	for (dfp = kmemfmt; dfp->hdr1 != NULL; dfp++)
--- a/usr/src/cmd/ztest/ztest.c	Mon Aug 06 15:02:44 2007 -0700
+++ b/usr/src/cmd/ztest/ztest.c	Mon Aug 06 15:11:21 2007 -0700
@@ -2663,9 +2663,13 @@
 {
 	spa_t *spa = dmu_objset_spa(za->za_os);
 
+	mutex_enter(&spa_namespace_lock);
 	(void) spa_scrub(spa, POOL_SCRUB_EVERYTHING, B_FALSE);
+	mutex_exit(&spa_namespace_lock);
 	(void) poll(NULL, 0, 1000); /* wait a second, then force a restart */
+	mutex_enter(&spa_namespace_lock);
 	(void) spa_scrub(spa, POOL_SCRUB_EVERYTHING, B_FALSE);
+	mutex_exit(&spa_namespace_lock);
 }
 
 /*
--- a/usr/src/uts/common/fs/zfs/spa.c	Mon Aug 06 15:02:44 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/spa.c	Mon Aug 06 15:11:21 2007 -0700
@@ -2609,6 +2609,9 @@
 	uint64_t mintxg, maxtxg;
 	vdev_t *rvd = spa->spa_root_vdev;
 
+	ASSERT(MUTEX_HELD(&spa_namespace_lock));
+	ASSERT(!spa_config_held(spa, RW_WRITER));
+
 	if ((uint_t)type >= POOL_SCRUB_TYPES)
 		return (ENOTSUP);
 
@@ -3247,8 +3250,8 @@
 		spa_open_ref(spa, FTAG);
 		mutex_exit(&spa_namespace_lock);
 		spa_async_suspend(spa);
+		mutex_enter(&spa_namespace_lock);
 		VERIFY(spa_scrub(spa, POOL_SCRUB_NONE, B_TRUE) == 0);
-		mutex_enter(&spa_namespace_lock);
 		spa_close(spa, FTAG);
 
 		if (spa->spa_state != POOL_STATE_UNINITIALIZED) {
--- a/usr/src/uts/common/fs/zfs/vdev.c	Mon Aug 06 15:02:44 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/vdev.c	Mon Aug 06 15:11:21 2007 -0700
@@ -1689,8 +1689,7 @@
 		vdev_config_dirty(vd->vdev_top);
 
 		if (vd->vdev_faulted)
-			VERIFY(spa_scrub(spa, POOL_SCRUB_RESILVER,
-			    B_TRUE) == 0);
+			spa_async_request(spa, SPA_ASYNC_RESILVER);
 
 		spa_event_notify(spa, vd, ESC_ZFS_VDEV_CLEAR);
 	}
--- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Mon Aug 06 15:02:44 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Mon Aug 06 15:11:21 2007 -0700
@@ -796,9 +796,9 @@
 	if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
 		return (error);
 
-	spa_config_enter(spa, RW_READER, FTAG);
+	mutex_enter(&spa_namespace_lock);
 	error = spa_scrub(spa, zc->zc_cookie, B_FALSE);
-	spa_config_exit(spa, FTAG);
+	mutex_exit(&spa_namespace_lock);
 
 	spa_close(spa, FTAG);
 
@@ -2014,8 +2014,8 @@
 {
 	spa_t *spa;
 	vdev_t *vd;
+	uint64_t txg;
 	int error;
-	uint64_t txg;
 
 	if ((error = spa_open(zc->zc_name, &spa, FTAG)) != 0)
 		return (error);