Lines Matching defs:spa

32 #include <sys/spa.h>
153 vdev_lookup_top(spa_t *spa, uint64_t vdev)
155 vdev_t *rvd = spa->spa_root_vdev;
157 ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0);
198 vdev_count_leaves(spa_t *spa)
200 return (vdev_count_leaves_impl(spa->spa_root_vdev));
209 spa_t *spa = cvd->vdev_spa;
211 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL);
312 vdev_alloc_common(spa_t *spa, uint_t id, uint64_t guid, vdev_ops_t *ops)
318 if (spa->spa_root_vdev == NULL) {
320 spa->spa_root_vdev = vd;
321 spa->spa_load_guid = spa_generate_guid(NULL);
325 if (spa->spa_root_vdev == vd) {
335 guid = spa_generate_guid(spa);
337 ASSERT(!spa_guid_exists(spa_guid(spa), guid));
340 vd->vdev_spa = spa;
372 vdev_alloc(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent, uint_t id,
380 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL);
415 if (ops != &vdev_root_ops && spa->spa_root_vdev == NULL)
423 if (islog && spa_version(spa) < SPA_VERSION_SLOGS)
426 if (ops == &vdev_hole_ops && spa_version(spa) < SPA_VERSION_HOLES)
443 spa_version(spa) < SPA_VERSION_RAIDZ2)
446 spa_version(spa) < SPA_VERSION_RAIDZ3)
453 if (spa_version(spa) >= SPA_VERSION_RAIDZ2)
465 vd = vdev_alloc_common(spa, id, guid, ops);
527 spa_log_class(spa) : spa_normal_class(spa), vd);
563 if (spa_load_state(spa) == SPA_LOAD_OPEN) {
597 spa_t *spa = vd->vdev_spa;
671 if (vd == spa->spa_root_vdev)
672 spa->spa_root_vdev = NULL;
683 spa_t *spa = svd->vdev_spa;
722 if (txg_list_remove_this(&spa->spa_vdev_txg_list, svd, t))
723 (void) txg_list_add(&spa->spa_vdev_txg_list, tvd, t);
761 spa_t *spa = cvd->vdev_spa;
765 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL);
767 mvd = vdev_alloc_common(spa, cvd->vdev_id, 0, ops);
834 spa_t *spa = vd->vdev_spa;
835 objset_t *mos = spa->spa_meta_objset;
842 ASSERT(txg == 0 || spa_config_held(spa, SCL_ALLOC, RW_WRITER));
891 spa_config_enter(spa, SCL_ALLOC, FTAG, RW_WRITER);
902 spa_config_exit(spa, SCL_ALLOC, FTAG);
935 spa_t *spa = zio->io_spa;
944 if (zio->io_error == 0 && spa_writeable(spa)) {
963 (vdev_writeable(vd) || !spa_writeable(spa))) {
968 spa, vd, NULL, 0, 0);
995 spa_t *spa = vd->vdev_spa;
1021 if (spa_config_held(spa, SCL_ZIO, RW_WRITER)) {
1043 vd->vdev_probe_zio = pio = zio_null(NULL, spa, vd,
1053 spa_async_request(spa, SPA_ASYNC_PROBE);
1138 spa_t *spa = vd->vdev_spa;
1146 spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
1296 (vd->vdev_expanding || spa->spa_autoexpand))
1317 if (vd->vdev_ashift > spa->spa_max_ashift)
1318 spa->spa_max_ashift = vd->vdev_ashift;
1319 if (vd->vdev_ashift < spa->spa_min_ashift)
1320 spa->spa_min_ashift = vd->vdev_ashift;
1328 if (vd->vdev_ops->vdev_op_leaf && !spa->spa_scrub_reopen &&
1330 spa_async_request(spa, SPA_ASYNC_RESILVER);
1340 * If 'strict' is false ignore the spa guid check. This is necessary because
1353 spa_t *spa = vd->vdev_spa;
1370 uint64_t txg = spa_last_synced_txg(spa) != 0 ?
1371 spa_last_synced_txg(spa) : -1ULL;
1384 &aux_guid) == 0 && aux_guid == spa_guid(spa)) {
1393 guid != spa_guid(spa))) {
1443 if (!(spa->spa_import_flags & ZFS_IMPORT_VERBATIM) &&
1444 spa_load_state(spa) == SPA_LOAD_OPEN &&
1466 spa_t *spa = vd->vdev_spa;
1469 ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
1499 spa_t *spa = vd->vdev_spa;
1501 ASSERT(spa_is_root(spa));
1502 if (spa->spa_state == POOL_STATE_UNINITIALIZED)
1515 spa_t *spa = vd->vdev_spa;
1517 ASSERT(spa_is_root(spa));
1534 spa_t *spa = vd->vdev_spa;
1536 ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
1551 vd->vdev_aux == &spa->spa_l2cache &&
1553 l2arc_add_vdev(spa, vd);
1757 spa_t *spa = vd->vdev_spa;
1758 dsl_scan_t *scn = spa->spa_dsl_pool->dp_scan;
1789 spa_t *spa = vd->vdev_spa;
1793 ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0);
1799 if (vd == spa->spa_root_vdev || vd->vdev_ishole || vd->vdev_aux)
1803 dsl_scan_t *scn = spa->spa_dsl_pool->dp_scan;
1814 (spa->spa_scrub_started ||
1900 spa_t *spa = vd->vdev_spa;
1901 objset_t *mos = spa->spa_meta_objset;
1940 spa_t *spa = vd->vdev_spa;
1942 objset_t *mos = spa->spa_meta_objset;
1951 tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg);
1998 zfs_dbgmsg("txg %llu, spa %s, DTL old object %llu, "
1999 "new object %llu", txg, spa_name(spa), object,
2018 spa_t *spa = vd->vdev_spa;
2023 ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
2025 if (vd == spa->spa_root_vdev || vd == tvd)
2156 spa_t *spa = vd->vdev_spa;
2157 objset_t *mos = spa->spa_meta_objset;
2160 tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg);
2223 spa_t *spa = vd->vdev_spa;
2232 tx = dmu_tx_create_assigned(spa->spa_dsl_pool, txg);
2233 vd->vdev_ms_array = dmu_object_alloc(spa->spa_meta_objset,
2254 (void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg));
2268 vdev_fault(spa_t *spa, uint64_t guid, vdev_aux_t aux)
2272 spa_vdev_state_enter(spa, SCL_NONE);
2274 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL)
2275 return (spa_vdev_state_exit(spa, NULL, ENODEV));
2278 return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
2315 return (spa_vdev_state_exit(spa, vd, 0));
2324 vdev_degrade(spa_t *spa, uint64_t guid, vdev_aux_t aux)
2328 spa_vdev_state_enter(spa, SCL_NONE);
2330 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL)
2331 return (spa_vdev_state_exit(spa, NULL, ENODEV));
2334 return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
2340 return (spa_vdev_state_exit(spa, NULL, 0));
2347 return (spa_vdev_state_exit(spa, vd, 0));
2359 vdev_online(spa_t *spa, uint64_t guid, uint64_t flags, vdev_state_t *newstate)
2361 vdev_t *vd, *tvd, *pvd, *rvd = spa->spa_root_vdev;
2364 spa_vdev_state_enter(spa, SCL_NONE);
2366 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL)
2367 return (spa_vdev_state_exit(spa, NULL, ENODEV));
2370 return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
2404 if ((flags & ZFS_ONLINE_EXPAND) || spa->spa_autoexpand) {
2408 return (spa_vdev_state_exit(spa, vd, ENOTSUP));
2409 spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE);
2413 spa_event_notify(spa, vd, ESC_ZFS_VDEV_ONLINE);
2415 return (spa_vdev_state_exit(spa, vd, 0));
2419 vdev_offline_locked(spa_t *spa, uint64_t guid, uint64_t flags)
2427 spa_vdev_state_enter(spa, SCL_ALLOC);
2429 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL)
2430 return (spa_vdev_state_exit(spa, NULL, ENODEV));
2433 return (spa_vdev_state_exit(spa, NULL, ENOTSUP));
2437 generation = spa->spa_config_generation + 1;
2450 return (spa_vdev_state_exit(spa, NULL, EBUSY));
2463 (void) spa_vdev_state_exit(spa, vd, 0);
2465 error = spa_offline_log(spa);
2467 spa_vdev_state_enter(spa, SCL_ALLOC);
2472 if (error || generation != spa->spa_config_generation) {
2475 return (spa_vdev_state_exit(spa,
2477 (void) spa_vdev_state_exit(spa, vd, 0);
2496 return (spa_vdev_state_exit(spa, NULL, EBUSY));
2509 return (spa_vdev_state_exit(spa, vd, 0));
2513 vdev_offline(spa_t *spa, uint64_t guid, uint64_t flags)
2517 mutex_enter(&spa->spa_vdev_top_lock);
2518 error = vdev_offline_locked(spa, guid, flags);
2519 mutex_exit(&spa->spa_vdev_top_lock);
2526 * vdev_offline(), we assume the spa config is locked. We also clear all
2530 vdev_clear(spa_t *spa, vdev_t *vd)
2532 vdev_t *rvd = spa->spa_root_vdev;
2534 ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
2544 vdev_clear(spa, vd->vdev_child[c]);
2574 spa_async_request(spa, SPA_ASYNC_RESILVER);
2576 spa_event_notify(spa, vd, ESC_ZFS_VDEV_CLEAR);
2656 spa_t *spa = vd->vdev_spa;
2657 vdev_t *rvd = spa->spa_root_vdev;
2659 ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0);
2718 spa_t *spa = zio->io_spa;
2719 vdev_t *rvd = spa->spa_root_vdev;
2761 &spa->spa_dsl_pool->dp_scan->scn_phys;
2816 spa->spa_claiming)) {
2824 * so we commit the DTL change in spa_syncing_txg(spa).
2825 * In the zil_claim() case, we commit in spa_first_txg(spa).
2836 ASSERT(spa_sync_pass(spa) == 1);
2838 commit_txg = spa_syncing_txg(spa);
2839 } else if (spa->spa_claiming) {
2841 commit_txg = spa_first_txg(spa);
2843 ASSERT(commit_txg >= spa_syncing_txg(spa));
2864 spa_t *spa = vd->vdev_spa;
2865 vdev_t *rvd = spa->spa_root_vdev;
2888 if (mc == spa_normal_class(spa)) {
2913 spa_t *spa = vd->vdev_spa;
2914 vdev_t *rvd = spa->spa_root_vdev;
2917 ASSERT(spa_writeable(spa));
2956 aux[c] = vdev_config_generate(spa, vd, B_TRUE, 0);
2967 ASSERT(spa_config_held(spa, SCL_CONFIG, RW_WRITER) ||
2968 (dsl_pool_sync_context(spa_get_dsl(spa)) &&
2969 spa_config_held(spa, SCL_CONFIG, RW_READER)));
2979 list_insert_head(&spa->spa_config_dirty_list, vd);
2986 spa_t *spa = vd->vdev_spa;
2988 ASSERT(spa_config_held(spa, SCL_CONFIG, RW_WRITER) ||
2989 (dsl_pool_sync_context(spa_get_dsl(spa)) &&
2990 spa_config_held(spa, SCL_CONFIG, RW_READER)));
2993 list_remove(&spa->spa_config_dirty_list, vd);
3005 spa_t *spa = vd->vdev_spa;
3007 ASSERT(spa_writeable(spa));
3016 ASSERT(spa_config_held(spa, SCL_STATE, RW_WRITER) ||
3017 (dsl_pool_sync_context(spa_get_dsl(spa)) &&
3018 spa_config_held(spa, SCL_STATE, RW_READER)));
3021 list_insert_head(&spa->spa_state_dirty_list, vd);
3027 spa_t *spa = vd->vdev_spa;
3029 ASSERT(spa_config_held(spa, SCL_STATE, RW_WRITER) ||
3030 (dsl_pool_sync_context(spa_get_dsl(spa)) &&
3031 spa_config_held(spa, SCL_STATE, RW_READER)));
3034 list_remove(&spa->spa_state_dirty_list, vd);
3043 spa_t *spa = vd->vdev_spa;
3044 vdev_t *rvd = spa->spa_root_vdev;
3060 (!vdev_writeable(child) && spa_writeable(spa))) {
3108 spa_t *spa = vd->vdev_spa;
3145 zfs_post_state_change(spa, vd);
3170 if ((spa_load_state(spa) == SPA_LOAD_IMPORT ||
3171 spa_load_state(spa) == SPA_LOAD_RECOVER) &&
3192 vd != spa->spa_root_vdev) {
3218 zfs_ereport_post(class, spa, vd, NULL, save_state, 0);
3266 spa_t *spa = nvd->vdev_spa;
3269 ASSERT(spa_config_held(spa, SCL_STATE_ALL, RW_WRITER) == SCL_STATE_ALL);
3353 spa_t *spa = vd->vdev_spa;
3364 if (delta > spa_deadman_synctime(spa)) {
3370 "hung.", spa_name(spa));