usr/src/uts/common/fs/zfs/spa.c
changeset 10956 0c81acaaf614
parent 10950 588ee15c1f19
child 10974 32d689ba6466
--- a/usr/src/uts/common/fs/zfs/spa.c	Thu Nov 05 10:44:03 2009 +0530
+++ b/usr/src/uts/common/fs/zfs/spa.c	Wed Nov 04 21:23:08 2009 -0800
@@ -146,7 +146,7 @@
 spa_prop_get_config(spa_t *spa, nvlist_t **nvp)
 {
 	uint64_t size;
-	uint64_t used;
+	uint64_t alloc;
 	uint64_t cap, version;
 	zprop_source_t src = ZPROP_SRC_NONE;
 	spa_config_dirent_t *dp;
@@ -154,15 +154,15 @@
 	ASSERT(MUTEX_HELD(&spa->spa_props_lock));
 
 	if (spa->spa_root_vdev != NULL) {
-		used = metaslab_class_get_alloc(spa_normal_class(spa));
+		alloc = metaslab_class_get_alloc(spa_normal_class(spa));
 		size = metaslab_class_get_space(spa_normal_class(spa));
 		spa_prop_add_list(*nvp, ZPOOL_PROP_NAME, spa_name(spa), 0, src);
 		spa_prop_add_list(*nvp, ZPOOL_PROP_SIZE, NULL, size, src);
-		spa_prop_add_list(*nvp, ZPOOL_PROP_USED, NULL, used, src);
-		spa_prop_add_list(*nvp, ZPOOL_PROP_AVAILABLE, NULL,
-		    size - used, src);
-
-		cap = (size == 0) ? 0 : (used * 100 / size);
+		spa_prop_add_list(*nvp, ZPOOL_PROP_ALLOCATED, NULL, alloc, src);
+		spa_prop_add_list(*nvp, ZPOOL_PROP_FREE, NULL,
+		    size - alloc, src);
+
+		cap = (size == 0) ? 0 : (alloc * 100 / size);
 		spa_prop_add_list(*nvp, ZPOOL_PROP_CAPACITY, NULL, cap, src);
 
 		spa_prop_add_list(*nvp, ZPOOL_PROP_DEDUPRATIO, NULL,
@@ -1683,6 +1683,8 @@
 		goto out;
 	}
 
+	spa_update_dspace(spa);
+
 	if (state != SPA_LOAD_TRYIMPORT) {
 		error = spa_load_verify(spa);
 		if (error) {
@@ -2495,6 +2497,13 @@
 	spa->spa_dsl_pool = dp = dsl_pool_create(spa, zplprops, txg);
 	spa->spa_meta_objset = dp->dp_meta_objset;
 
+	/*
+	 * Create DDTs (dedup tables).
+	 */
+	ddt_create(spa);
+
+	spa_update_dspace(spa);
+
 	tx = dmu_tx_create_assigned(dp, txg);
 
 	/*
@@ -2555,11 +2564,6 @@
 		spa_sync_props(spa, props, CRED(), tx);
 	}
 
-	/*
-	 * Create DDTs (dedup tables).
-	 */
-	ddt_create(spa);
-
 	dmu_tx_commit(tx);
 
 	spa->spa_sync_on = B_TRUE;
@@ -4818,6 +4822,8 @@
 	while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg)))
 		vdev_sync_done(vd, txg);
 
+	spa_update_dspace(spa);
+
 	/*
 	 * It had better be the case that we didn't dirty anything
 	 * since vdev_config_sync().