Mercurial > illumos > illumos-gate
comparison usr/src/uts/common/fs/zfs/spa.c @ 10956:0c81acaaf614
6897693 deduplication can only go so far
author | George Wilson <George.Wilson@Sun.COM> |
---|---|
date | Wed, 04 Nov 2009 21:23:08 -0800 |
parents | 588ee15c1f19 |
children | 32d689ba6466 |
comparison
equal
deleted
inserted
replaced
10955:9ddb8cec6aa3 | 10956:0c81acaaf614 |
---|---|
144 */ | 144 */ |
145 static void | 145 static void |
146 spa_prop_get_config(spa_t *spa, nvlist_t **nvp) | 146 spa_prop_get_config(spa_t *spa, nvlist_t **nvp) |
147 { | 147 { |
148 uint64_t size; | 148 uint64_t size; |
149 uint64_t used; | 149 uint64_t alloc; |
150 uint64_t cap, version; | 150 uint64_t cap, version; |
151 zprop_source_t src = ZPROP_SRC_NONE; | 151 zprop_source_t src = ZPROP_SRC_NONE; |
152 spa_config_dirent_t *dp; | 152 spa_config_dirent_t *dp; |
153 | 153 |
154 ASSERT(MUTEX_HELD(&spa->spa_props_lock)); | 154 ASSERT(MUTEX_HELD(&spa->spa_props_lock)); |
155 | 155 |
156 if (spa->spa_root_vdev != NULL) { | 156 if (spa->spa_root_vdev != NULL) { |
157 used = metaslab_class_get_alloc(spa_normal_class(spa)); | 157 alloc = metaslab_class_get_alloc(spa_normal_class(spa)); |
158 size = metaslab_class_get_space(spa_normal_class(spa)); | 158 size = metaslab_class_get_space(spa_normal_class(spa)); |
159 spa_prop_add_list(*nvp, ZPOOL_PROP_NAME, spa_name(spa), 0, src); | 159 spa_prop_add_list(*nvp, ZPOOL_PROP_NAME, spa_name(spa), 0, src); |
160 spa_prop_add_list(*nvp, ZPOOL_PROP_SIZE, NULL, size, src); | 160 spa_prop_add_list(*nvp, ZPOOL_PROP_SIZE, NULL, size, src); |
161 spa_prop_add_list(*nvp, ZPOOL_PROP_USED, NULL, used, src); | 161 spa_prop_add_list(*nvp, ZPOOL_PROP_ALLOCATED, NULL, alloc, src); |
162 spa_prop_add_list(*nvp, ZPOOL_PROP_AVAILABLE, NULL, | 162 spa_prop_add_list(*nvp, ZPOOL_PROP_FREE, NULL, |
163 size - used, src); | 163 size - alloc, src); |
164 | 164 |
165 cap = (size == 0) ? 0 : (used * 100 / size); | 165 cap = (size == 0) ? 0 : (alloc * 100 / size); |
166 spa_prop_add_list(*nvp, ZPOOL_PROP_CAPACITY, NULL, cap, src); | 166 spa_prop_add_list(*nvp, ZPOOL_PROP_CAPACITY, NULL, cap, src); |
167 | 167 |
168 spa_prop_add_list(*nvp, ZPOOL_PROP_DEDUPRATIO, NULL, | 168 spa_prop_add_list(*nvp, ZPOOL_PROP_DEDUPRATIO, NULL, |
169 ddt_get_pool_dedup_ratio(spa), src); | 169 ddt_get_pool_dedup_ratio(spa), src); |
170 | 170 |
1681 VDEV_AUX_CORRUPT_DATA); | 1681 VDEV_AUX_CORRUPT_DATA); |
1682 error = EIO; | 1682 error = EIO; |
1683 goto out; | 1683 goto out; |
1684 } | 1684 } |
1685 | 1685 |
1686 spa_update_dspace(spa); | |
1687 | |
1686 if (state != SPA_LOAD_TRYIMPORT) { | 1688 if (state != SPA_LOAD_TRYIMPORT) { |
1687 error = spa_load_verify(spa); | 1689 error = spa_load_verify(spa); |
1688 if (error) { | 1690 if (error) { |
1689 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, | 1691 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, |
1690 VDEV_AUX_CORRUPT_DATA); | 1692 VDEV_AUX_CORRUPT_DATA); |
2493 } | 2495 } |
2494 | 2496 |
2495 spa->spa_dsl_pool = dp = dsl_pool_create(spa, zplprops, txg); | 2497 spa->spa_dsl_pool = dp = dsl_pool_create(spa, zplprops, txg); |
2496 spa->spa_meta_objset = dp->dp_meta_objset; | 2498 spa->spa_meta_objset = dp->dp_meta_objset; |
2497 | 2499 |
2500 /* | |
2501 * Create DDTs (dedup tables). | |
2502 */ | |
2503 ddt_create(spa); | |
2504 | |
2505 spa_update_dspace(spa); | |
2506 | |
2498 tx = dmu_tx_create_assigned(dp, txg); | 2507 tx = dmu_tx_create_assigned(dp, txg); |
2499 | 2508 |
2500 /* | 2509 /* |
2501 * Create the pool config object. | 2510 * Create the pool config object. |
2502 */ | 2511 */ |
2552 | 2561 |
2553 if (props != NULL) { | 2562 if (props != NULL) { |
2554 spa_configfile_set(spa, props, B_FALSE); | 2563 spa_configfile_set(spa, props, B_FALSE); |
2555 spa_sync_props(spa, props, CRED(), tx); | 2564 spa_sync_props(spa, props, CRED(), tx); |
2556 } | 2565 } |
2557 | |
2558 /* | |
2559 * Create DDTs (dedup tables). | |
2560 */ | |
2561 ddt_create(spa); | |
2562 | 2566 |
2563 dmu_tx_commit(tx); | 2567 dmu_tx_commit(tx); |
2564 | 2568 |
2565 spa->spa_sync_on = B_TRUE; | 2569 spa->spa_sync_on = B_TRUE; |
2566 txg_sync_start(spa->spa_dsl_pool); | 2570 txg_sync_start(spa->spa_dsl_pool); |
4816 * Update usable space statistics. | 4820 * Update usable space statistics. |
4817 */ | 4821 */ |
4818 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg))) | 4822 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg))) |
4819 vdev_sync_done(vd, txg); | 4823 vdev_sync_done(vd, txg); |
4820 | 4824 |
4825 spa_update_dspace(spa); | |
4826 | |
4821 /* | 4827 /* |
4822 * It had better be the case that we didn't dirty anything | 4828 * It had better be the case that we didn't dirty anything |
4823 * since vdev_config_sync(). | 4829 * since vdev_config_sync(). |
4824 */ | 4830 */ |
4825 ASSERT(txg_list_empty(&dp->dp_dirty_datasets, txg)); | 4831 ASSERT(txg_list_empty(&dp->dp_dirty_datasets, txg)); |