1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * This file contains all the routines used when modifying on-disk SPA state. 29 * This includes opening, importing, destroying, exporting a pool, and syncing a 30 * pool. 31 */ 32 33 #include <sys/zfs_context.h> 34 #include <sys/fm/fs/zfs.h> 35 #include <sys/spa_impl.h> 36 #include <sys/zio.h> 37 #include <sys/zio_checksum.h> 38 #include <sys/dmu.h> 39 #include <sys/dmu_tx.h> 40 #include <sys/zap.h> 41 #include <sys/zil.h> 42 #include <sys/ddt.h> 43 #include <sys/vdev_impl.h> 44 #include <sys/metaslab.h> 45 #include <sys/metaslab_impl.h> 46 #include <sys/uberblock_impl.h> 47 #include <sys/txg.h> 48 #include <sys/avl.h> 49 #include <sys/dmu_traverse.h> 50 #include <sys/dmu_objset.h> 51 #include <sys/unique.h> 52 #include <sys/dsl_pool.h> 53 #include <sys/dsl_dataset.h> 54 #include <sys/dsl_dir.h> 55 #include <sys/dsl_prop.h> 56 #include <sys/dsl_synctask.h> 57 #include <sys/fs/zfs.h> 58 #include <sys/arc.h> 59 #include <sys/callb.h> 60 #include <sys/systeminfo.h> 61 #include <sys/sunddi.h> 62 #include <sys/spa_boot.h> 63 #include <sys/zfs_ioctl.h> 64 65 #ifdef _KERNEL 66 #include <sys/zone.h> 67 #include <sys/bootprops.h> 68 #endif /* _KERNEL */ 69 70 #include "zfs_prop.h" 71 #include "zfs_comutil.h" 72 73 enum zti_modes { 74 zti_mode_fixed, /* value is # of threads (min 1) */ 75 zti_mode_online_percent, /* value is % of online CPUs */ 76 zti_mode_tune, /* fill from zio_taskq_tune_* */ 77 zti_nmodes 78 }; 79 80 #define ZTI_THREAD_FIX(n) { zti_mode_fixed, (n) } 81 #define ZTI_THREAD_PCT(n) { zti_mode_online_percent, (n) } 82 #define ZTI_THREAD_TUNE { zti_mode_tune, 0 } 83 84 #define ZTI_THREAD_ONE ZTI_THREAD_FIX(1) 85 86 typedef struct zio_taskq_info { 87 const char *zti_name; 88 struct { 89 enum zti_modes zti_mode; 90 uint_t zti_value; 91 } zti_nthreads[ZIO_TASKQ_TYPES]; 92 } zio_taskq_info_t; 93 94 static const char *const zio_taskq_types[ZIO_TASKQ_TYPES] = { 95 "issue", "intr" 96 }; 97 98 const zio_taskq_info_t zio_taskqs[ZIO_TYPES] = { 99 /* ISSUE INTR */ 100 { "spa_zio_null", { ZTI_THREAD_ONE, ZTI_THREAD_ONE } }, 101 { "spa_zio_read", { ZTI_THREAD_FIX(8), ZTI_THREAD_TUNE } }, 102 { "spa_zio_write", { ZTI_THREAD_TUNE, ZTI_THREAD_FIX(8) } }, 103 { "spa_zio_free", { ZTI_THREAD_ONE, ZTI_THREAD_ONE } }, 104 { "spa_zio_claim", { ZTI_THREAD_ONE, ZTI_THREAD_ONE } }, 105 { "spa_zio_ioctl", { ZTI_THREAD_ONE, ZTI_THREAD_ONE } }, 106 }; 107 108 enum zti_modes zio_taskq_tune_mode = zti_mode_online_percent; 109 uint_t zio_taskq_tune_value = 80; /* #threads = 80% of # online CPUs */ 110 111 static void spa_sync_props(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx); 112 static boolean_t spa_has_active_shared_spare(spa_t *spa); 113 114 /* 115 * ========================================================================== 116 * SPA properties routines 117 * ========================================================================== 118 */ 119 120 /* 121 * Add a (source=src, propname=propval) list to an nvlist. 122 */ 123 static void 124 spa_prop_add_list(nvlist_t *nvl, zpool_prop_t prop, char *strval, 125 uint64_t intval, zprop_source_t src) 126 { 127 const char *propname = zpool_prop_to_name(prop); 128 nvlist_t *propval; 129 130 VERIFY(nvlist_alloc(&propval, NV_UNIQUE_NAME, KM_SLEEP) == 0); 131 VERIFY(nvlist_add_uint64(propval, ZPROP_SOURCE, src) == 0); 132 133 if (strval != NULL) 134 VERIFY(nvlist_add_string(propval, ZPROP_VALUE, strval) == 0); 135 else 136 VERIFY(nvlist_add_uint64(propval, ZPROP_VALUE, intval) == 0); 137 138 VERIFY(nvlist_add_nvlist(nvl, propname, propval) == 0); 139 nvlist_free(propval); 140 } 141 142 /* 143 * Get property values from the spa configuration. 144 */ 145 static void 146 spa_prop_get_config(spa_t *spa, nvlist_t **nvp) 147 { 148 uint64_t size; 149 uint64_t alloc; 150 uint64_t cap, version; 151 zprop_source_t src = ZPROP_SRC_NONE; 152 spa_config_dirent_t *dp; 153 154 ASSERT(MUTEX_HELD(&spa->spa_props_lock)); 155 156 if (spa->spa_root_vdev != NULL) { 157 alloc = metaslab_class_get_alloc(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); 160 spa_prop_add_list(*nvp, ZPOOL_PROP_SIZE, NULL, size, src); 161 spa_prop_add_list(*nvp, ZPOOL_PROP_ALLOCATED, NULL, alloc, src); 162 spa_prop_add_list(*nvp, ZPOOL_PROP_FREE, NULL, 163 size - alloc, src); 164 165 cap = (size == 0) ? 0 : (alloc * 100 / size); 166 spa_prop_add_list(*nvp, ZPOOL_PROP_CAPACITY, NULL, cap, src); 167 168 spa_prop_add_list(*nvp, ZPOOL_PROP_DEDUPRATIO, NULL, 169 ddt_get_pool_dedup_ratio(spa), src); 170 171 spa_prop_add_list(*nvp, ZPOOL_PROP_HEALTH, NULL, 172 spa->spa_root_vdev->vdev_state, src); 173 174 version = spa_version(spa); 175 if (version == zpool_prop_default_numeric(ZPOOL_PROP_VERSION)) 176 src = ZPROP_SRC_DEFAULT; 177 else 178 src = ZPROP_SRC_LOCAL; 179 spa_prop_add_list(*nvp, ZPOOL_PROP_VERSION, NULL, version, src); 180 } 181 182 spa_prop_add_list(*nvp, ZPOOL_PROP_GUID, NULL, spa_guid(spa), src); 183 184 if (spa->spa_root != NULL) 185 spa_prop_add_list(*nvp, ZPOOL_PROP_ALTROOT, spa->spa_root, 186 0, ZPROP_SRC_LOCAL); 187 188 if ((dp = list_head(&spa->spa_config_list)) != NULL) { 189 if (dp->scd_path == NULL) { 190 spa_prop_add_list(*nvp, ZPOOL_PROP_CACHEFILE, 191 "none", 0, ZPROP_SRC_LOCAL); 192 } else if (strcmp(dp->scd_path, spa_config_path) != 0) { 193 spa_prop_add_list(*nvp, ZPOOL_PROP_CACHEFILE, 194 dp->scd_path, 0, ZPROP_SRC_LOCAL); 195 } 196 } 197 } 198 199 /* 200 * Get zpool property values. 201 */ 202 int 203 spa_prop_get(spa_t *spa, nvlist_t **nvp) 204 { 205 objset_t *mos = spa->spa_meta_objset; 206 zap_cursor_t zc; 207 zap_attribute_t za; 208 int err; 209 210 VERIFY(nvlist_alloc(nvp, NV_UNIQUE_NAME, KM_SLEEP) == 0); 211 212 mutex_enter(&spa->spa_props_lock); 213 214 /* 215 * Get properties from the spa config. 216 */ 217 spa_prop_get_config(spa, nvp); 218 219 /* If no pool property object, no more prop to get. */ 220 if (spa->spa_pool_props_object == 0) { 221 mutex_exit(&spa->spa_props_lock); 222 return (0); 223 } 224 225 /* 226 * Get properties from the MOS pool property object. 227 */ 228 for (zap_cursor_init(&zc, mos, spa->spa_pool_props_object); 229 (err = zap_cursor_retrieve(&zc, &za)) == 0; 230 zap_cursor_advance(&zc)) { 231 uint64_t intval = 0; 232 char *strval = NULL; 233 zprop_source_t src = ZPROP_SRC_DEFAULT; 234 zpool_prop_t prop; 235 236 if ((prop = zpool_name_to_prop(za.za_name)) == ZPROP_INVAL) 237 continue; 238 239 switch (za.za_integer_length) { 240 case 8: 241 /* integer property */ 242 if (za.za_first_integer != 243 zpool_prop_default_numeric(prop)) 244 src = ZPROP_SRC_LOCAL; 245 246 if (prop == ZPOOL_PROP_BOOTFS) { 247 dsl_pool_t *dp; 248 dsl_dataset_t *ds = NULL; 249 250 dp = spa_get_dsl(spa); 251 rw_enter(&dp->dp_config_rwlock, RW_READER); 252 if (err = dsl_dataset_hold_obj(dp, 253 za.za_first_integer, FTAG, &ds)) { 254 rw_exit(&dp->dp_config_rwlock); 255 break; 256 } 257 258 strval = kmem_alloc( 259 MAXNAMELEN + strlen(MOS_DIR_NAME) + 1, 260 KM_SLEEP); 261 dsl_dataset_name(ds, strval); 262 dsl_dataset_rele(ds, FTAG); 263 rw_exit(&dp->dp_config_rwlock); 264 } else { 265 strval = NULL; 266 intval = za.za_first_integer; 267 } 268 269 spa_prop_add_list(*nvp, prop, strval, intval, src); 270 271 if (strval != NULL) 272 kmem_free(strval, 273 MAXNAMELEN + strlen(MOS_DIR_NAME) + 1); 274 275 break; 276 277 case 1: 278 /* string property */ 279 strval = kmem_alloc(za.za_num_integers, KM_SLEEP); 280 err = zap_lookup(mos, spa->spa_pool_props_object, 281 za.za_name, 1, za.za_num_integers, strval); 282 if (err) { 283 kmem_free(strval, za.za_num_integers); 284 break; 285 } 286 spa_prop_add_list(*nvp, prop, strval, 0, src); 287 kmem_free(strval, za.za_num_integers); 288 break; 289 290 default: 291 break; 292 } 293 } 294 zap_cursor_fini(&zc); 295 mutex_exit(&spa->spa_props_lock); 296 out: 297 if (err && err != ENOENT) { 298 nvlist_free(*nvp); 299 *nvp = NULL; 300 return (err); 301 } 302 303 return (0); 304 } 305 306 /* 307 * Validate the given pool properties nvlist and modify the list 308 * for the property values to be set. 309 */ 310 static int 311 spa_prop_validate(spa_t *spa, nvlist_t *props) 312 { 313 nvpair_t *elem; 314 int error = 0, reset_bootfs = 0; 315 uint64_t objnum; 316 317 elem = NULL; 318 while ((elem = nvlist_next_nvpair(props, elem)) != NULL) { 319 zpool_prop_t prop; 320 char *propname, *strval; 321 uint64_t intval; 322 objset_t *os; 323 char *slash; 324 325 propname = nvpair_name(elem); 326 327 if ((prop = zpool_name_to_prop(propname)) == ZPROP_INVAL) 328 return (EINVAL); 329 330 switch (prop) { 331 case ZPOOL_PROP_VERSION: 332 error = nvpair_value_uint64(elem, &intval); 333 if (!error && 334 (intval < spa_version(spa) || intval > SPA_VERSION)) 335 error = EINVAL; 336 break; 337 338 case ZPOOL_PROP_DELEGATION: 339 case ZPOOL_PROP_AUTOREPLACE: 340 case ZPOOL_PROP_LISTSNAPS: 341 case ZPOOL_PROP_AUTOEXPAND: 342 error = nvpair_value_uint64(elem, &intval); 343 if (!error && intval > 1) 344 error = EINVAL; 345 break; 346 347 case ZPOOL_PROP_BOOTFS: 348 /* 349 * If the pool version is less than SPA_VERSION_BOOTFS, 350 * or the pool is still being created (version == 0), 351 * the bootfs property cannot be set. 352 */ 353 if (spa_version(spa) < SPA_VERSION_BOOTFS) { 354 error = ENOTSUP; 355 break; 356 } 357 358 /* 359 * Make sure the vdev config is bootable 360 */ 361 if (!vdev_is_bootable(spa->spa_root_vdev)) { 362 error = ENOTSUP; 363 break; 364 } 365 366 reset_bootfs = 1; 367 368 error = nvpair_value_string(elem, &strval); 369 370 if (!error) { 371 uint64_t compress; 372 373 if (strval == NULL || strval[0] == '\0') { 374 objnum = zpool_prop_default_numeric( 375 ZPOOL_PROP_BOOTFS); 376 break; 377 } 378 379 if (error = dmu_objset_hold(strval, FTAG, &os)) 380 break; 381 382 /* Must be ZPL and not gzip compressed. */ 383 384 if (dmu_objset_type(os) != DMU_OST_ZFS) { 385 error = ENOTSUP; 386 } else if ((error = dsl_prop_get_integer(strval, 387 zfs_prop_to_name(ZFS_PROP_COMPRESSION), 388 &compress, NULL)) == 0 && 389 !BOOTFS_COMPRESS_VALID(compress)) { 390 error = ENOTSUP; 391 } else { 392 objnum = dmu_objset_id(os); 393 } 394 dmu_objset_rele(os, FTAG); 395 } 396 break; 397 398 case ZPOOL_PROP_FAILUREMODE: 399 error = nvpair_value_uint64(elem, &intval); 400 if (!error && (intval < ZIO_FAILURE_MODE_WAIT || 401 intval > ZIO_FAILURE_MODE_PANIC)) 402 error = EINVAL; 403 404 /* 405 * This is a special case which only occurs when 406 * the pool has completely failed. This allows 407 * the user to change the in-core failmode property 408 * without syncing it out to disk (I/Os might 409 * currently be blocked). We do this by returning 410 * EIO to the caller (spa_prop_set) to trick it 411 * into thinking we encountered a property validation 412 * error. 413 */ 414 if (!error && spa_suspended(spa)) { 415 spa->spa_failmode = intval; 416 error = EIO; 417 } 418 break; 419 420 case ZPOOL_PROP_CACHEFILE: 421 if ((error = nvpair_value_string(elem, &strval)) != 0) 422 break; 423 424 if (strval[0] == '\0') 425 break; 426 427 if (strcmp(strval, "none") == 0) 428 break; 429 430 if (strval[0] != '/') { 431 error = EINVAL; 432 break; 433 } 434 435 slash = strrchr(strval, '/'); 436 ASSERT(slash != NULL); 437 438 if (slash[1] == '\0' || strcmp(slash, "/.") == 0 || 439 strcmp(slash, "/..") == 0) 440 error = EINVAL; 441 break; 442 443 case ZPOOL_PROP_DEDUPDITTO: 444 if (spa_version(spa) < SPA_VERSION_DEDUP) 445 error = ENOTSUP; 446 else 447 error = nvpair_value_uint64(elem, &intval); 448 if (error == 0 && 449 intval != 0 && intval < ZIO_DEDUPDITTO_MIN) 450 error = EINVAL; 451 break; 452 } 453 454 if (error) 455 break; 456 } 457 458 if (!error && reset_bootfs) { 459 error = nvlist_remove(props, 460 zpool_prop_to_name(ZPOOL_PROP_BOOTFS), DATA_TYPE_STRING); 461 462 if (!error) { 463 error = nvlist_add_uint64(props, 464 zpool_prop_to_name(ZPOOL_PROP_BOOTFS), objnum); 465 } 466 } 467 468 return (error); 469 } 470 471 void 472 spa_configfile_set(spa_t *spa, nvlist_t *nvp, boolean_t need_sync) 473 { 474 char *cachefile; 475 spa_config_dirent_t *dp; 476 477 if (nvlist_lookup_string(nvp, zpool_prop_to_name(ZPOOL_PROP_CACHEFILE), 478 &cachefile) != 0) 479 return; 480 481 dp = kmem_alloc(sizeof (spa_config_dirent_t), 482 KM_SLEEP); 483 484 if (cachefile[0] == '\0') 485 dp->scd_path = spa_strdup(spa_config_path); 486 else if (strcmp(cachefile, "none") == 0) 487 dp->scd_path = NULL; 488 else 489 dp->scd_path = spa_strdup(cachefile); 490 491 list_insert_head(&spa->spa_config_list, dp); 492 if (need_sync) 493 spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); 494 } 495 496 int 497 spa_prop_set(spa_t *spa, nvlist_t *nvp) 498 { 499 int error; 500 nvpair_t *elem; 501 boolean_t need_sync = B_FALSE; 502 zpool_prop_t prop; 503 504 if ((error = spa_prop_validate(spa, nvp)) != 0) 505 return (error); 506 507 elem = NULL; 508 while ((elem = nvlist_next_nvpair(nvp, elem)) != NULL) { 509 if ((prop = zpool_name_to_prop( 510 nvpair_name(elem))) == ZPROP_INVAL) 511 return (EINVAL); 512 513 if (prop == ZPOOL_PROP_CACHEFILE || prop == ZPOOL_PROP_ALTROOT) 514 continue; 515 516 need_sync = B_TRUE; 517 break; 518 } 519 520 if (need_sync) 521 return (dsl_sync_task_do(spa_get_dsl(spa), NULL, spa_sync_props, 522 spa, nvp, 3)); 523 else 524 return (0); 525 } 526 527 /* 528 * If the bootfs property value is dsobj, clear it. 529 */ 530 void 531 spa_prop_clear_bootfs(spa_t *spa, uint64_t dsobj, dmu_tx_t *tx) 532 { 533 if (spa->spa_bootfs == dsobj && spa->spa_pool_props_object != 0) { 534 VERIFY(zap_remove(spa->spa_meta_objset, 535 spa->spa_pool_props_object, 536 zpool_prop_to_name(ZPOOL_PROP_BOOTFS), tx) == 0); 537 spa->spa_bootfs = 0; 538 } 539 } 540 541 /* 542 * ========================================================================== 543 * SPA state manipulation (open/create/destroy/import/export) 544 * ========================================================================== 545 */ 546 547 static int 548 spa_error_entry_compare(const void *a, const void *b) 549 { 550 spa_error_entry_t *sa = (spa_error_entry_t *)a; 551 spa_error_entry_t *sb = (spa_error_entry_t *)b; 552 int ret; 553 554 ret = bcmp(&sa->se_bookmark, &sb->se_bookmark, 555 sizeof (zbookmark_t)); 556 557 if (ret < 0) 558 return (-1); 559 else if (ret > 0) 560 return (1); 561 else 562 return (0); 563 } 564 565 /* 566 * Utility function which retrieves copies of the current logs and 567 * re-initializes them in the process. 568 */ 569 void 570 spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub) 571 { 572 ASSERT(MUTEX_HELD(&spa->spa_errlist_lock)); 573 574 bcopy(&spa->spa_errlist_last, last, sizeof (avl_tree_t)); 575 bcopy(&spa->spa_errlist_scrub, scrub, sizeof (avl_tree_t)); 576 577 avl_create(&spa->spa_errlist_scrub, 578 spa_error_entry_compare, sizeof (spa_error_entry_t), 579 offsetof(spa_error_entry_t, se_avl)); 580 avl_create(&spa->spa_errlist_last, 581 spa_error_entry_compare, sizeof (spa_error_entry_t), 582 offsetof(spa_error_entry_t, se_avl)); 583 } 584 585 /* 586 * Activate an uninitialized pool. 587 */ 588 static void 589 spa_activate(spa_t *spa, int mode) 590 { 591 ASSERT(spa->spa_state == POOL_STATE_UNINITIALIZED); 592 593 spa->spa_state = POOL_STATE_ACTIVE; 594 spa->spa_mode = mode; 595 596 spa->spa_normal_class = metaslab_class_create(spa, zfs_metaslab_ops); 597 spa->spa_log_class = metaslab_class_create(spa, zfs_metaslab_ops); 598 599 for (int t = 0; t < ZIO_TYPES; t++) { 600 const zio_taskq_info_t *ztip = &zio_taskqs[t]; 601 for (int q = 0; q < ZIO_TASKQ_TYPES; q++) { 602 enum zti_modes mode = ztip->zti_nthreads[q].zti_mode; 603 uint_t value = ztip->zti_nthreads[q].zti_value; 604 char name[32]; 605 606 (void) snprintf(name, sizeof (name), 607 "%s_%s", ztip->zti_name, zio_taskq_types[q]); 608 609 if (mode == zti_mode_tune) { 610 mode = zio_taskq_tune_mode; 611 value = zio_taskq_tune_value; 612 if (mode == zti_mode_tune) 613 mode = zti_mode_online_percent; 614 } 615 616 switch (mode) { 617 case zti_mode_fixed: 618 ASSERT3U(value, >=, 1); 619 value = MAX(value, 1); 620 621 spa->spa_zio_taskq[t][q] = taskq_create(name, 622 value, maxclsyspri, 50, INT_MAX, 623 TASKQ_PREPOPULATE); 624 break; 625 626 case zti_mode_online_percent: 627 spa->spa_zio_taskq[t][q] = taskq_create(name, 628 value, maxclsyspri, 50, INT_MAX, 629 TASKQ_PREPOPULATE | TASKQ_THREADS_CPU_PCT); 630 break; 631 632 case zti_mode_tune: 633 default: 634 panic("unrecognized mode for " 635 "zio_taskqs[%u]->zti_nthreads[%u] (%u:%u) " 636 "in spa_activate()", 637 t, q, mode, value); 638 break; 639 } 640 } 641 } 642 643 list_create(&spa->spa_config_dirty_list, sizeof (vdev_t), 644 offsetof(vdev_t, vdev_config_dirty_node)); 645 list_create(&spa->spa_state_dirty_list, sizeof (vdev_t), 646 offsetof(vdev_t, vdev_state_dirty_node)); 647 648 txg_list_create(&spa->spa_vdev_txg_list, 649 offsetof(struct vdev, vdev_txg_node)); 650 651 avl_create(&spa->spa_errlist_scrub, 652 spa_error_entry_compare, sizeof (spa_error_entry_t), 653 offsetof(spa_error_entry_t, se_avl)); 654 avl_create(&spa->spa_errlist_last, 655 spa_error_entry_compare, sizeof (spa_error_entry_t), 656 offsetof(spa_error_entry_t, se_avl)); 657 } 658 659 /* 660 * Opposite of spa_activate(). 661 */ 662 static void 663 spa_deactivate(spa_t *spa) 664 { 665 ASSERT(spa->spa_sync_on == B_FALSE); 666 ASSERT(spa->spa_dsl_pool == NULL); 667 ASSERT(spa->spa_root_vdev == NULL); 668 ASSERT(spa->spa_async_zio_root == NULL); 669 ASSERT(spa->spa_state != POOL_STATE_UNINITIALIZED); 670 671 txg_list_destroy(&spa->spa_vdev_txg_list); 672 673 list_destroy(&spa->spa_config_dirty_list); 674 list_destroy(&spa->spa_state_dirty_list); 675 676 for (int t = 0; t < ZIO_TYPES; t++) { 677 for (int q = 0; q < ZIO_TASKQ_TYPES; q++) { 678 taskq_destroy(spa->spa_zio_taskq[t][q]); 679 spa->spa_zio_taskq[t][q] = NULL; 680 } 681 } 682 683 metaslab_class_destroy(spa->spa_normal_class); 684 spa->spa_normal_class = NULL; 685 686 metaslab_class_destroy(spa->spa_log_class); 687 spa->spa_log_class = NULL; 688 689 /* 690 * If this was part of an import or the open otherwise failed, we may 691 * still have errors left in the queues. Empty them just in case. 692 */ 693 spa_errlog_drain(spa); 694 695 avl_destroy(&spa->spa_errlist_scrub); 696 avl_destroy(&spa->spa_errlist_last); 697 698 spa->spa_state = POOL_STATE_UNINITIALIZED; 699 } 700 701 /* 702 * Verify a pool configuration, and construct the vdev tree appropriately. This 703 * will create all the necessary vdevs in the appropriate layout, with each vdev 704 * in the CLOSED state. This will prep the pool before open/creation/import. 705 * All vdev validation is done by the vdev_alloc() routine. 706 */ 707 static int 708 spa_config_parse(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent, 709 uint_t id, int atype) 710 { 711 nvlist_t **child; 712 uint_t children; 713 int error; 714 715 if ((error = vdev_alloc(spa, vdp, nv, parent, id, atype)) != 0) 716 return (error); 717 718 if ((*vdp)->vdev_ops->vdev_op_leaf) 719 return (0); 720 721 error = nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, 722 &child, &children); 723 724 if (error == ENOENT) 725 return (0); 726 727 if (error) { 728 vdev_free(*vdp); 729 *vdp = NULL; 730 return (EINVAL); 731 } 732 733 for (int c = 0; c < children; c++) { 734 vdev_t *vd; 735 if ((error = spa_config_parse(spa, &vd, child[c], *vdp, c, 736 atype)) != 0) { 737 vdev_free(*vdp); 738 *vdp = NULL; 739 return (error); 740 } 741 } 742 743 ASSERT(*vdp != NULL); 744 745 return (0); 746 } 747 748 /* 749 * Opposite of spa_load(). 750 */ 751 static void 752 spa_unload(spa_t *spa) 753 { 754 int i; 755 756 ASSERT(MUTEX_HELD(&spa_namespace_lock)); 757 758 /* 759 * Stop async tasks. 760 */ 761 spa_async_suspend(spa); 762 763 /* 764 * Stop syncing. 765 */ 766 if (spa->spa_sync_on) { 767 txg_sync_stop(spa->spa_dsl_pool); 768 spa->spa_sync_on = B_FALSE; 769 } 770 771 /* 772 * Wait for any outstanding async I/O to complete. 773 */ 774 if (spa->spa_async_zio_root != NULL) { 775 (void) zio_wait(spa->spa_async_zio_root); 776 spa->spa_async_zio_root = NULL; 777 } 778 779 /* 780 * Close the dsl pool. 781 */ 782 if (spa->spa_dsl_pool) { 783 dsl_pool_close(spa->spa_dsl_pool); 784 spa->spa_dsl_pool = NULL; 785 } 786 787 ddt_unload(spa); 788 789 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 790 791 /* 792 * Drop and purge level 2 cache 793 */ 794 spa_l2cache_drop(spa); 795 796 /* 797 * Close all vdevs. 798 */ 799 if (spa->spa_root_vdev) 800 vdev_free(spa->spa_root_vdev); 801 ASSERT(spa->spa_root_vdev == NULL); 802 803 for (i = 0; i < spa->spa_spares.sav_count; i++) 804 vdev_free(spa->spa_spares.sav_vdevs[i]); 805 if (spa->spa_spares.sav_vdevs) { 806 kmem_free(spa->spa_spares.sav_vdevs, 807 spa->spa_spares.sav_count * sizeof (void *)); 808 spa->spa_spares.sav_vdevs = NULL; 809 } 810 if (spa->spa_spares.sav_config) { 811 nvlist_free(spa->spa_spares.sav_config); 812 spa->spa_spares.sav_config = NULL; 813 } 814 spa->spa_spares.sav_count = 0; 815 816 for (i = 0; i < spa->spa_l2cache.sav_count; i++) 817 vdev_free(spa->spa_l2cache.sav_vdevs[i]); 818 if (spa->spa_l2cache.sav_vdevs) { 819 kmem_free(spa->spa_l2cache.sav_vdevs, 820 spa->spa_l2cache.sav_count * sizeof (void *)); 821 spa->spa_l2cache.sav_vdevs = NULL; 822 } 823 if (spa->spa_l2cache.sav_config) { 824 nvlist_free(spa->spa_l2cache.sav_config); 825 spa->spa_l2cache.sav_config = NULL; 826 } 827 spa->spa_l2cache.sav_count = 0; 828 829 spa->spa_async_suspended = 0; 830 831 spa_config_exit(spa, SCL_ALL, FTAG); 832 } 833 834 /* 835 * Load (or re-load) the current list of vdevs describing the active spares for 836 * this pool. When this is called, we have some form of basic information in 837 * 'spa_spares.sav_config'. We parse this into vdevs, try to open them, and 838 * then re-generate a more complete list including status information. 839 */ 840 static void 841 spa_load_spares(spa_t *spa) 842 { 843 nvlist_t **spares; 844 uint_t nspares; 845 int i; 846 vdev_t *vd, *tvd; 847 848 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 849 850 /* 851 * First, close and free any existing spare vdevs. 852 */ 853 for (i = 0; i < spa->spa_spares.sav_count; i++) { 854 vd = spa->spa_spares.sav_vdevs[i]; 855 856 /* Undo the call to spa_activate() below */ 857 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, 858 B_FALSE)) != NULL && tvd->vdev_isspare) 859 spa_spare_remove(tvd); 860 vdev_close(vd); 861 vdev_free(vd); 862 } 863 864 if (spa->spa_spares.sav_vdevs) 865 kmem_free(spa->spa_spares.sav_vdevs, 866 spa->spa_spares.sav_count * sizeof (void *)); 867 868 if (spa->spa_spares.sav_config == NULL) 869 nspares = 0; 870 else 871 VERIFY(nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, 872 ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); 873 874 spa->spa_spares.sav_count = (int)nspares; 875 spa->spa_spares.sav_vdevs = NULL; 876 877 if (nspares == 0) 878 return; 879 880 /* 881 * Construct the array of vdevs, opening them to get status in the 882 * process. For each spare, there is potentially two different vdev_t 883 * structures associated with it: one in the list of spares (used only 884 * for basic validation purposes) and one in the active vdev 885 * configuration (if it's spared in). During this phase we open and 886 * validate each vdev on the spare list. If the vdev also exists in the 887 * active configuration, then we also mark this vdev as an active spare. 888 */ 889 spa->spa_spares.sav_vdevs = kmem_alloc(nspares * sizeof (void *), 890 KM_SLEEP); 891 for (i = 0; i < spa->spa_spares.sav_count; i++) { 892 VERIFY(spa_config_parse(spa, &vd, spares[i], NULL, 0, 893 VDEV_ALLOC_SPARE) == 0); 894 ASSERT(vd != NULL); 895 896 spa->spa_spares.sav_vdevs[i] = vd; 897 898 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, 899 B_FALSE)) != NULL) { 900 if (!tvd->vdev_isspare) 901 spa_spare_add(tvd); 902 903 /* 904 * We only mark the spare active if we were successfully 905 * able to load the vdev. Otherwise, importing a pool 906 * with a bad active spare would result in strange 907 * behavior, because multiple pool would think the spare 908 * is actively in use. 909 * 910 * There is a vulnerability here to an equally bizarre 911 * circumstance, where a dead active spare is later 912 * brought back to life (onlined or otherwise). Given 913 * the rarity of this scenario, and the extra complexity 914 * it adds, we ignore the possibility. 915 */ 916 if (!vdev_is_dead(tvd)) 917 spa_spare_activate(tvd); 918 } 919 920 vd->vdev_top = vd; 921 vd->vdev_aux = &spa->spa_spares; 922 923 if (vdev_open(vd) != 0) 924 continue; 925 926 if (vdev_validate_aux(vd) == 0) 927 spa_spare_add(vd); 928 } 929 930 /* 931 * Recompute the stashed list of spares, with status information 932 * this time. 933 */ 934 VERIFY(nvlist_remove(spa->spa_spares.sav_config, ZPOOL_CONFIG_SPARES, 935 DATA_TYPE_NVLIST_ARRAY) == 0); 936 937 spares = kmem_alloc(spa->spa_spares.sav_count * sizeof (void *), 938 KM_SLEEP); 939 for (i = 0; i < spa->spa_spares.sav_count; i++) 940 spares[i] = vdev_config_generate(spa, 941 spa->spa_spares.sav_vdevs[i], B_TRUE, B_TRUE, B_FALSE); 942 VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, 943 ZPOOL_CONFIG_SPARES, spares, spa->spa_spares.sav_count) == 0); 944 for (i = 0; i < spa->spa_spares.sav_count; i++) 945 nvlist_free(spares[i]); 946 kmem_free(spares, spa->spa_spares.sav_count * sizeof (void *)); 947 } 948 949 /* 950 * Load (or re-load) the current list of vdevs describing the active l2cache for 951 * this pool. When this is called, we have some form of basic information in 952 * 'spa_l2cache.sav_config'. We parse this into vdevs, try to open them, and 953 * then re-generate a more complete list including status information. 954 * Devices which are already active have their details maintained, and are 955 * not re-opened. 956 */ 957 static void 958 spa_load_l2cache(spa_t *spa) 959 { 960 nvlist_t **l2cache; 961 uint_t nl2cache; 962 int i, j, oldnvdevs; 963 uint64_t guid; 964 vdev_t *vd, **oldvdevs, **newvdevs; 965 spa_aux_vdev_t *sav = &spa->spa_l2cache; 966 967 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 968 969 if (sav->sav_config != NULL) { 970 VERIFY(nvlist_lookup_nvlist_array(sav->sav_config, 971 ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); 972 newvdevs = kmem_alloc(nl2cache * sizeof (void *), KM_SLEEP); 973 } else { 974 nl2cache = 0; 975 } 976 977 oldvdevs = sav->sav_vdevs; 978 oldnvdevs = sav->sav_count; 979 sav->sav_vdevs = NULL; 980 sav->sav_count = 0; 981 982 /* 983 * Process new nvlist of vdevs. 984 */ 985 for (i = 0; i < nl2cache; i++) { 986 VERIFY(nvlist_lookup_uint64(l2cache[i], ZPOOL_CONFIG_GUID, 987 &guid) == 0); 988 989 newvdevs[i] = NULL; 990 for (j = 0; j < oldnvdevs; j++) { 991 vd = oldvdevs[j]; 992 if (vd != NULL && guid == vd->vdev_guid) { 993 /* 994 * Retain previous vdev for add/remove ops. 995 */ 996 newvdevs[i] = vd; 997 oldvdevs[j] = NULL; 998 break; 999 } 1000 } 1001 1002 if (newvdevs[i] == NULL) { 1003 /* 1004 * Create new vdev 1005 */ 1006 VERIFY(spa_config_parse(spa, &vd, l2cache[i], NULL, 0, 1007 VDEV_ALLOC_L2CACHE) == 0); 1008 ASSERT(vd != NULL); 1009 newvdevs[i] = vd; 1010 1011 /* 1012 * Commit this vdev as an l2cache device, 1013 * even if it fails to open. 1014 */ 1015 spa_l2cache_add(vd); 1016 1017 vd->vdev_top = vd; 1018 vd->vdev_aux = sav; 1019 1020 spa_l2cache_activate(vd); 1021 1022 if (vdev_open(vd) != 0) 1023 continue; 1024 1025 (void) vdev_validate_aux(vd); 1026 1027 if (!vdev_is_dead(vd)) 1028 l2arc_add_vdev(spa, vd); 1029 } 1030 } 1031 1032 /* 1033 * Purge vdevs that were dropped 1034 */ 1035 for (i = 0; i < oldnvdevs; i++) { 1036 uint64_t pool; 1037 1038 vd = oldvdevs[i]; 1039 if (vd != NULL) { 1040 if (spa_l2cache_exists(vd->vdev_guid, &pool) && 1041 pool != 0ULL && l2arc_vdev_present(vd)) 1042 l2arc_remove_vdev(vd); 1043 (void) vdev_close(vd); 1044 spa_l2cache_remove(vd); 1045 } 1046 } 1047 1048 if (oldvdevs) 1049 kmem_free(oldvdevs, oldnvdevs * sizeof (void *)); 1050 1051 if (sav->sav_config == NULL) 1052 goto out; 1053 1054 sav->sav_vdevs = newvdevs; 1055 sav->sav_count = (int)nl2cache; 1056 1057 /* 1058 * Recompute the stashed list of l2cache devices, with status 1059 * information this time. 1060 */ 1061 VERIFY(nvlist_remove(sav->sav_config, ZPOOL_CONFIG_L2CACHE, 1062 DATA_TYPE_NVLIST_ARRAY) == 0); 1063 1064 l2cache = kmem_alloc(sav->sav_count * sizeof (void *), KM_SLEEP); 1065 for (i = 0; i < sav->sav_count; i++) 1066 l2cache[i] = vdev_config_generate(spa, 1067 sav->sav_vdevs[i], B_TRUE, B_FALSE, B_TRUE); 1068 VERIFY(nvlist_add_nvlist_array(sav->sav_config, 1069 ZPOOL_CONFIG_L2CACHE, l2cache, sav->sav_count) == 0); 1070 out: 1071 for (i = 0; i < sav->sav_count; i++) 1072 nvlist_free(l2cache[i]); 1073 if (sav->sav_count) 1074 kmem_free(l2cache, sav->sav_count * sizeof (void *)); 1075 } 1076 1077 static int 1078 load_nvlist(spa_t *spa, uint64_t obj, nvlist_t **value) 1079 { 1080 dmu_buf_t *db; 1081 char *packed = NULL; 1082 size_t nvsize = 0; 1083 int error; 1084 *value = NULL; 1085 1086 VERIFY(0 == dmu_bonus_hold(spa->spa_meta_objset, obj, FTAG, &db)); 1087 nvsize = *(uint64_t *)db->db_data; 1088 dmu_buf_rele(db, FTAG); 1089 1090 packed = kmem_alloc(nvsize, KM_SLEEP); 1091 error = dmu_read(spa->spa_meta_objset, obj, 0, nvsize, packed, 1092 DMU_READ_PREFETCH); 1093 if (error == 0) 1094 error = nvlist_unpack(packed, nvsize, value, 0); 1095 kmem_free(packed, nvsize); 1096 1097 return (error); 1098 } 1099 1100 /* 1101 * Checks to see if the given vdev could not be opened, in which case we post a 1102 * sysevent to notify the autoreplace code that the device has been removed. 1103 */ 1104 static void 1105 spa_check_removed(vdev_t *vd) 1106 { 1107 for (int c = 0; c < vd->vdev_children; c++) 1108 spa_check_removed(vd->vdev_child[c]); 1109 1110 if (vd->vdev_ops->vdev_op_leaf && vdev_is_dead(vd)) { 1111 zfs_post_autoreplace(vd->vdev_spa, vd); 1112 spa_event_notify(vd->vdev_spa, vd, ESC_ZFS_VDEV_CHECK); 1113 } 1114 } 1115 1116 /* 1117 * Load the slog device state from the config object since it's possible 1118 * that the label does not contain the most up-to-date information. 1119 */ 1120 void 1121 spa_load_log_state(spa_t *spa, nvlist_t *nv) 1122 { 1123 vdev_t *ovd, *rvd = spa->spa_root_vdev; 1124 1125 /* 1126 * Load the original root vdev tree from the passed config. 1127 */ 1128 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1129 VERIFY(spa_config_parse(spa, &ovd, nv, NULL, 0, VDEV_ALLOC_LOAD) == 0); 1130 1131 for (int c = 0; c < rvd->vdev_children; c++) { 1132 vdev_t *cvd = rvd->vdev_child[c]; 1133 if (cvd->vdev_islog) 1134 vdev_load_log_state(cvd, ovd->vdev_child[c]); 1135 } 1136 vdev_free(ovd); 1137 spa_config_exit(spa, SCL_ALL, FTAG); 1138 } 1139 1140 /* 1141 * Check for missing log devices 1142 */ 1143 int 1144 spa_check_logs(spa_t *spa) 1145 { 1146 switch (spa->spa_log_state) { 1147 case SPA_LOG_MISSING: 1148 /* need to recheck in case slog has been restored */ 1149 case SPA_LOG_UNKNOWN: 1150 if (dmu_objset_find(spa->spa_name, zil_check_log_chain, NULL, 1151 DS_FIND_CHILDREN)) { 1152 spa->spa_log_state = SPA_LOG_MISSING; 1153 return (1); 1154 } 1155 break; 1156 } 1157 return (0); 1158 } 1159 1160 static void 1161 spa_aux_check_removed(spa_aux_vdev_t *sav) 1162 { 1163 for (int i = 0; i < sav->sav_count; i++) 1164 spa_check_removed(sav->sav_vdevs[i]); 1165 } 1166 1167 void 1168 spa_claim_notify(zio_t *zio) 1169 { 1170 spa_t *spa = zio->io_spa; 1171 1172 if (zio->io_error) 1173 return; 1174 1175 mutex_enter(&spa->spa_props_lock); /* any mutex will do */ 1176 if (spa->spa_claim_max_txg < zio->io_bp->blk_birth) 1177 spa->spa_claim_max_txg = zio->io_bp->blk_birth; 1178 mutex_exit(&spa->spa_props_lock); 1179 } 1180 1181 typedef struct spa_load_error { 1182 uint64_t sle_metadata_count; 1183 uint64_t sle_data_count; 1184 } spa_load_error_t; 1185 1186 static void 1187 spa_load_verify_done(zio_t *zio) 1188 { 1189 blkptr_t *bp = zio->io_bp; 1190 spa_load_error_t *sle = zio->io_private; 1191 dmu_object_type_t type = BP_GET_TYPE(bp); 1192 int error = zio->io_error; 1193 1194 if (error) { 1195 if ((BP_GET_LEVEL(bp) != 0 || dmu_ot[type].ot_metadata) && 1196 type != DMU_OT_INTENT_LOG) 1197 atomic_add_64(&sle->sle_metadata_count, 1); 1198 else 1199 atomic_add_64(&sle->sle_data_count, 1); 1200 } 1201 zio_data_buf_free(zio->io_data, zio->io_size); 1202 } 1203 1204 /*ARGSUSED*/ 1205 static int 1206 spa_load_verify_cb(spa_t *spa, zilog_t *zilog, const blkptr_t *bp, 1207 const zbookmark_t *zb, const dnode_phys_t *dnp, void *arg) 1208 { 1209 if (bp != NULL) { 1210 zio_t *rio = arg; 1211 size_t size = BP_GET_PSIZE(bp); 1212 void *data = zio_data_buf_alloc(size); 1213 1214 zio_nowait(zio_read(rio, spa, bp, data, size, 1215 spa_load_verify_done, rio->io_private, ZIO_PRIORITY_SCRUB, 1216 ZIO_FLAG_SPECULATIVE | ZIO_FLAG_CANFAIL | 1217 ZIO_FLAG_SCRUB | ZIO_FLAG_RAW, zb)); 1218 } 1219 return (0); 1220 } 1221 1222 static int 1223 spa_load_verify(spa_t *spa) 1224 { 1225 zio_t *rio; 1226 spa_load_error_t sle = { 0 }; 1227 zpool_rewind_policy_t policy; 1228 boolean_t verify_ok = B_FALSE; 1229 int error; 1230 1231 rio = zio_root(spa, NULL, &sle, 1232 ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE); 1233 1234 error = traverse_pool(spa, spa_load_verify_cb, rio, 1235 spa->spa_verify_min_txg); 1236 1237 (void) zio_wait(rio); 1238 1239 zpool_get_rewind_policy(spa->spa_config, &policy); 1240 1241 spa->spa_load_meta_errors = sle.sle_metadata_count; 1242 spa->spa_load_data_errors = sle.sle_data_count; 1243 1244 if (!error && sle.sle_metadata_count <= policy.zrp_maxmeta && 1245 sle.sle_data_count <= policy.zrp_maxdata) { 1246 verify_ok = B_TRUE; 1247 spa->spa_load_txg = spa->spa_uberblock.ub_txg; 1248 spa->spa_load_txg_ts = spa->spa_uberblock.ub_timestamp; 1249 } 1250 1251 if (error) { 1252 if (error != ENXIO && error != EIO) 1253 error = EIO; 1254 return (error); 1255 } 1256 1257 return (verify_ok ? 0 : EIO); 1258 } 1259 1260 /* 1261 * Load an existing storage pool, using the pool's builtin spa_config as a 1262 * source of configuration information. 1263 */ 1264 static int 1265 spa_load(spa_t *spa, spa_load_state_t state, int mosconfig) 1266 { 1267 int error = 0; 1268 nvlist_t *nvconfig, *nvroot = NULL; 1269 vdev_t *rvd; 1270 uberblock_t *ub = &spa->spa_uberblock; 1271 uint64_t config_cache_txg = spa->spa_config_txg; 1272 uint64_t pool_guid; 1273 uint64_t version; 1274 uint64_t autoreplace = 0; 1275 int orig_mode = spa->spa_mode; 1276 char *ereport = FM_EREPORT_ZFS_POOL; 1277 nvlist_t *config = spa->spa_config; 1278 1279 /* 1280 * If this is an untrusted config, access the pool in read-only mode. 1281 * This prevents things like resilvering recently removed devices. 1282 */ 1283 if (!mosconfig) 1284 spa->spa_mode = FREAD; 1285 1286 ASSERT(MUTEX_HELD(&spa_namespace_lock)); 1287 1288 spa->spa_load_state = state; 1289 1290 if (nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvroot) || 1291 nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_GUID, &pool_guid)) { 1292 error = EINVAL; 1293 goto out; 1294 } 1295 1296 /* 1297 * Versioning wasn't explicitly added to the label until later, so if 1298 * it's not present treat it as the initial version. 1299 */ 1300 if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION, &version) != 0) 1301 version = SPA_VERSION_INITIAL; 1302 1303 (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_TXG, 1304 &spa->spa_config_txg); 1305 1306 if ((state == SPA_LOAD_IMPORT || state == SPA_LOAD_TRYIMPORT) && 1307 spa_guid_exists(pool_guid, 0)) { 1308 error = EEXIST; 1309 goto out; 1310 } 1311 1312 spa->spa_load_guid = pool_guid; 1313 1314 /* 1315 * Create "The Godfather" zio to hold all async IOs 1316 */ 1317 spa->spa_async_zio_root = zio_root(spa, NULL, NULL, 1318 ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_GODFATHER); 1319 1320 /* 1321 * Parse the configuration into a vdev tree. We explicitly set the 1322 * value that will be returned by spa_version() since parsing the 1323 * configuration requires knowing the version number. 1324 */ 1325 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1326 spa->spa_ubsync.ub_version = version; 1327 error = spa_config_parse(spa, &rvd, nvroot, NULL, 0, VDEV_ALLOC_LOAD); 1328 spa_config_exit(spa, SCL_ALL, FTAG); 1329 1330 if (error != 0) 1331 goto out; 1332 1333 ASSERT(spa->spa_root_vdev == rvd); 1334 ASSERT(spa_guid(spa) == pool_guid); 1335 1336 /* 1337 * Try to open all vdevs, loading each label in the process. 1338 */ 1339 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1340 error = vdev_open(rvd); 1341 spa_config_exit(spa, SCL_ALL, FTAG); 1342 if (error != 0) 1343 goto out; 1344 1345 /* 1346 * We need to validate the vdev labels against the configuration that 1347 * we have in hand, which is dependent on the setting of mosconfig. If 1348 * mosconfig is true then we're validating the vdev labels based on 1349 * that config. Otherwise, we're validating against the cached config 1350 * (zpool.cache) that was read when we loaded the zfs module, and then 1351 * later we will recursively call spa_load() and validate against 1352 * the vdev config. 1353 */ 1354 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1355 error = vdev_validate(rvd); 1356 spa_config_exit(spa, SCL_ALL, FTAG); 1357 if (error != 0) 1358 goto out; 1359 1360 if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) { 1361 error = ENXIO; 1362 goto out; 1363 } 1364 1365 /* 1366 * Find the best uberblock. 1367 */ 1368 vdev_uberblock_load(NULL, rvd, ub); 1369 1370 /* 1371 * If we weren't able to find a single valid uberblock, return failure. 1372 */ 1373 if (ub->ub_txg == 0) { 1374 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1375 VDEV_AUX_CORRUPT_DATA); 1376 error = ENXIO; 1377 goto out; 1378 } 1379 1380 /* 1381 * If the pool is newer than the code, we can't open it. 1382 */ 1383 if (ub->ub_version > SPA_VERSION) { 1384 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1385 VDEV_AUX_VERSION_NEWER); 1386 error = ENOTSUP; 1387 goto out; 1388 } 1389 1390 /* 1391 * If the vdev guid sum doesn't match the uberblock, we have an 1392 * incomplete configuration. 1393 */ 1394 if (rvd->vdev_guid_sum != ub->ub_guid_sum && mosconfig) { 1395 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1396 VDEV_AUX_BAD_GUID_SUM); 1397 error = ENXIO; 1398 goto out; 1399 } 1400 1401 /* 1402 * Initialize internal SPA structures. 1403 */ 1404 spa->spa_state = POOL_STATE_ACTIVE; 1405 spa->spa_ubsync = spa->spa_uberblock; 1406 spa->spa_verify_min_txg = spa->spa_extreme_rewind ? 1407 TXG_INITIAL : spa_last_synced_txg(spa) - TXG_DEFER_SIZE; 1408 spa->spa_first_txg = spa->spa_last_ubsync_txg ? 1409 spa->spa_last_ubsync_txg : spa_last_synced_txg(spa) + 1; 1410 spa->spa_claim_max_txg = spa->spa_first_txg; 1411 1412 error = dsl_pool_open(spa, spa->spa_first_txg, &spa->spa_dsl_pool); 1413 if (error) { 1414 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1415 VDEV_AUX_CORRUPT_DATA); 1416 error = EIO; 1417 goto out; 1418 } 1419 spa->spa_meta_objset = spa->spa_dsl_pool->dp_meta_objset; 1420 1421 if (zap_lookup(spa->spa_meta_objset, 1422 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_CONFIG, 1423 sizeof (uint64_t), 1, &spa->spa_config_object) != 0) { 1424 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1425 VDEV_AUX_CORRUPT_DATA); 1426 error = EIO; 1427 goto out; 1428 } 1429 1430 if (load_nvlist(spa, spa->spa_config_object, &nvconfig) != 0) { 1431 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1432 VDEV_AUX_CORRUPT_DATA); 1433 error = EIO; 1434 goto out; 1435 } 1436 1437 if (!mosconfig) { 1438 uint64_t hostid; 1439 1440 if (!spa_is_root(spa) && nvlist_lookup_uint64(nvconfig, 1441 ZPOOL_CONFIG_HOSTID, &hostid) == 0) { 1442 char *hostname; 1443 unsigned long myhostid = 0; 1444 1445 VERIFY(nvlist_lookup_string(nvconfig, 1446 ZPOOL_CONFIG_HOSTNAME, &hostname) == 0); 1447 1448 #ifdef _KERNEL 1449 myhostid = zone_get_hostid(NULL); 1450 #else /* _KERNEL */ 1451 /* 1452 * We're emulating the system's hostid in userland, so 1453 * we can't use zone_get_hostid(). 1454 */ 1455 (void) ddi_strtoul(hw_serial, NULL, 10, &myhostid); 1456 #endif /* _KERNEL */ 1457 if (hostid != 0 && myhostid != 0 && 1458 hostid != myhostid) { 1459 cmn_err(CE_WARN, "pool '%s' could not be " 1460 "loaded as it was last accessed by " 1461 "another system (host: %s hostid: 0x%lx). " 1462 "See: http://www.sun.com/msg/ZFS-8000-EY", 1463 spa_name(spa), hostname, 1464 (unsigned long)hostid); 1465 error = EBADF; 1466 goto out; 1467 } 1468 } 1469 1470 spa_config_set(spa, nvconfig); 1471 spa_unload(spa); 1472 spa_deactivate(spa); 1473 spa_activate(spa, orig_mode); 1474 1475 return (spa_load(spa, state, B_TRUE)); 1476 } 1477 1478 if (zap_lookup(spa->spa_meta_objset, 1479 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_SYNC_BPLIST, 1480 sizeof (uint64_t), 1, &spa->spa_deferred_bplist_obj) != 0) { 1481 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1482 VDEV_AUX_CORRUPT_DATA); 1483 error = EIO; 1484 goto out; 1485 } 1486 1487 /* 1488 * Load the bit that tells us to use the new accounting function 1489 * (raid-z deflation). If we have an older pool, this will not 1490 * be present. 1491 */ 1492 error = zap_lookup(spa->spa_meta_objset, 1493 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_DEFLATE, 1494 sizeof (uint64_t), 1, &spa->spa_deflate); 1495 if (error != 0 && error != ENOENT) { 1496 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1497 VDEV_AUX_CORRUPT_DATA); 1498 error = EIO; 1499 goto out; 1500 } 1501 1502 /* 1503 * Load the persistent error log. If we have an older pool, this will 1504 * not be present. 1505 */ 1506 error = zap_lookup(spa->spa_meta_objset, 1507 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_ERRLOG_LAST, 1508 sizeof (uint64_t), 1, &spa->spa_errlog_last); 1509 if (error != 0 && error != ENOENT) { 1510 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1511 VDEV_AUX_CORRUPT_DATA); 1512 error = EIO; 1513 goto out; 1514 } 1515 1516 error = zap_lookup(spa->spa_meta_objset, 1517 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_ERRLOG_SCRUB, 1518 sizeof (uint64_t), 1, &spa->spa_errlog_scrub); 1519 if (error != 0 && error != ENOENT) { 1520 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1521 VDEV_AUX_CORRUPT_DATA); 1522 error = EIO; 1523 goto out; 1524 } 1525 1526 /* 1527 * Load the history object. If we have an older pool, this 1528 * will not be present. 1529 */ 1530 error = zap_lookup(spa->spa_meta_objset, 1531 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_HISTORY, 1532 sizeof (uint64_t), 1, &spa->spa_history); 1533 if (error != 0 && error != ENOENT) { 1534 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1535 VDEV_AUX_CORRUPT_DATA); 1536 error = EIO; 1537 goto out; 1538 } 1539 1540 /* 1541 * Load any hot spares for this pool. 1542 */ 1543 error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, 1544 DMU_POOL_SPARES, sizeof (uint64_t), 1, &spa->spa_spares.sav_object); 1545 if (error != 0 && error != ENOENT) { 1546 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1547 VDEV_AUX_CORRUPT_DATA); 1548 error = EIO; 1549 goto out; 1550 } 1551 if (error == 0) { 1552 ASSERT(spa_version(spa) >= SPA_VERSION_SPARES); 1553 if (load_nvlist(spa, spa->spa_spares.sav_object, 1554 &spa->spa_spares.sav_config) != 0) { 1555 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1556 VDEV_AUX_CORRUPT_DATA); 1557 error = EIO; 1558 goto out; 1559 } 1560 1561 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1562 spa_load_spares(spa); 1563 spa_config_exit(spa, SCL_ALL, FTAG); 1564 } 1565 1566 /* 1567 * Load any level 2 ARC devices for this pool. 1568 */ 1569 error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, 1570 DMU_POOL_L2CACHE, sizeof (uint64_t), 1, 1571 &spa->spa_l2cache.sav_object); 1572 if (error != 0 && error != ENOENT) { 1573 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1574 VDEV_AUX_CORRUPT_DATA); 1575 error = EIO; 1576 goto out; 1577 } 1578 if (error == 0) { 1579 ASSERT(spa_version(spa) >= SPA_VERSION_L2CACHE); 1580 if (load_nvlist(spa, spa->spa_l2cache.sav_object, 1581 &spa->spa_l2cache.sav_config) != 0) { 1582 vdev_set_state(rvd, B_TRUE, 1583 VDEV_STATE_CANT_OPEN, 1584 VDEV_AUX_CORRUPT_DATA); 1585 error = EIO; 1586 goto out; 1587 } 1588 1589 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1590 spa_load_l2cache(spa); 1591 spa_config_exit(spa, SCL_ALL, FTAG); 1592 } 1593 1594 spa->spa_delegation = zpool_prop_default_numeric(ZPOOL_PROP_DELEGATION); 1595 1596 error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, 1597 DMU_POOL_PROPS, sizeof (uint64_t), 1, &spa->spa_pool_props_object); 1598 1599 if (error && error != ENOENT) { 1600 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1601 VDEV_AUX_CORRUPT_DATA); 1602 error = EIO; 1603 goto out; 1604 } 1605 1606 if (error == 0) { 1607 (void) zap_lookup(spa->spa_meta_objset, 1608 spa->spa_pool_props_object, 1609 zpool_prop_to_name(ZPOOL_PROP_BOOTFS), 1610 sizeof (uint64_t), 1, &spa->spa_bootfs); 1611 (void) zap_lookup(spa->spa_meta_objset, 1612 spa->spa_pool_props_object, 1613 zpool_prop_to_name(ZPOOL_PROP_AUTOREPLACE), 1614 sizeof (uint64_t), 1, &autoreplace); 1615 spa->spa_autoreplace = (autoreplace != 0); 1616 (void) zap_lookup(spa->spa_meta_objset, 1617 spa->spa_pool_props_object, 1618 zpool_prop_to_name(ZPOOL_PROP_DELEGATION), 1619 sizeof (uint64_t), 1, &spa->spa_delegation); 1620 (void) zap_lookup(spa->spa_meta_objset, 1621 spa->spa_pool_props_object, 1622 zpool_prop_to_name(ZPOOL_PROP_FAILUREMODE), 1623 sizeof (uint64_t), 1, &spa->spa_failmode); 1624 (void) zap_lookup(spa->spa_meta_objset, 1625 spa->spa_pool_props_object, 1626 zpool_prop_to_name(ZPOOL_PROP_AUTOEXPAND), 1627 sizeof (uint64_t), 1, &spa->spa_autoexpand); 1628 (void) zap_lookup(spa->spa_meta_objset, 1629 spa->spa_pool_props_object, 1630 zpool_prop_to_name(ZPOOL_PROP_DEDUPDITTO), 1631 sizeof (uint64_t), 1, &spa->spa_dedup_ditto); 1632 } 1633 1634 /* 1635 * If the 'autoreplace' property is set, then post a resource notifying 1636 * the ZFS DE that it should not issue any faults for unopenable 1637 * devices. We also iterate over the vdevs, and post a sysevent for any 1638 * unopenable vdevs so that the normal autoreplace handler can take 1639 * over. 1640 */ 1641 if (spa->spa_autoreplace && state != SPA_LOAD_TRYIMPORT) { 1642 spa_check_removed(spa->spa_root_vdev); 1643 /* 1644 * For the import case, this is done in spa_import(), because 1645 * at this point we're using the spare definitions from 1646 * the MOS config, not necessarily from the userland config. 1647 */ 1648 if (state != SPA_LOAD_IMPORT) { 1649 spa_aux_check_removed(&spa->spa_spares); 1650 spa_aux_check_removed(&spa->spa_l2cache); 1651 } 1652 } 1653 1654 /* 1655 * Load the vdev state for all toplevel vdevs. 1656 */ 1657 vdev_load(rvd); 1658 1659 /* 1660 * Propagate the leaf DTLs we just loaded all the way up the tree. 1661 */ 1662 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 1663 vdev_dtl_reassess(rvd, 0, 0, B_FALSE); 1664 spa_config_exit(spa, SCL_ALL, FTAG); 1665 1666 /* 1667 * Check the state of the root vdev. If it can't be opened, it 1668 * indicates one or more toplevel vdevs are faulted. 1669 */ 1670 if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) { 1671 error = ENXIO; 1672 goto out; 1673 } 1674 1675 /* 1676 * Load the DDTs (dedup tables). 1677 */ 1678 error = ddt_load(spa); 1679 if (error != 0) { 1680 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1681 VDEV_AUX_CORRUPT_DATA); 1682 error = EIO; 1683 goto out; 1684 } 1685 1686 spa_update_dspace(spa); 1687 1688 if (state != SPA_LOAD_TRYIMPORT) { 1689 error = spa_load_verify(spa); 1690 if (error) { 1691 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1692 VDEV_AUX_CORRUPT_DATA); 1693 goto out; 1694 } 1695 } 1696 1697 /* 1698 * Load the intent log state and check log integrity. 1699 */ 1700 VERIFY(nvlist_lookup_nvlist(nvconfig, ZPOOL_CONFIG_VDEV_TREE, 1701 &nvroot) == 0); 1702 spa_load_log_state(spa, nvroot); 1703 nvlist_free(nvconfig); 1704 1705 if (spa_check_logs(spa)) { 1706 vdev_set_state(rvd, B_TRUE, VDEV_STATE_CANT_OPEN, 1707 VDEV_AUX_BAD_LOG); 1708 error = ENXIO; 1709 ereport = FM_EREPORT_ZFS_LOG_REPLAY; 1710 goto out; 1711 } 1712 1713 if (spa_writeable(spa) && (state == SPA_LOAD_RECOVER || 1714 spa->spa_load_max_txg == UINT64_MAX)) { 1715 dmu_tx_t *tx; 1716 int need_update = B_FALSE; 1717 1718 ASSERT(state != SPA_LOAD_TRYIMPORT); 1719 1720 /* 1721 * Claim log blocks that haven't been committed yet. 1722 * This must all happen in a single txg. 1723 * Note: spa_claim_max_txg is updated by spa_claim_notify(), 1724 * invoked from zil_claim_log_block()'s i/o done callback. 1725 * Price of rollback is that we abandon the log. 1726 */ 1727 spa->spa_claiming = B_TRUE; 1728 1729 tx = dmu_tx_create_assigned(spa_get_dsl(spa), 1730 spa_first_txg(spa)); 1731 (void) dmu_objset_find(spa_name(spa), 1732 zil_claim, tx, DS_FIND_CHILDREN); 1733 dmu_tx_commit(tx); 1734 1735 spa->spa_claiming = B_FALSE; 1736 1737 spa->spa_log_state = SPA_LOG_GOOD; 1738 spa->spa_sync_on = B_TRUE; 1739 txg_sync_start(spa->spa_dsl_pool); 1740 1741 /* 1742 * Wait for all claims to sync. We sync up to the highest 1743 * claimed log block birth time so that claimed log blocks 1744 * don't appear to be from the future. spa_claim_max_txg 1745 * will have been set for us by either zil_check_log_chain() 1746 * (invoked from spa_check_logs()) or zil_claim() above. 1747 */ 1748 txg_wait_synced(spa->spa_dsl_pool, spa->spa_claim_max_txg); 1749 1750 /* 1751 * If the config cache is stale, or we have uninitialized 1752 * metaslabs (see spa_vdev_add()), then update the config. 1753 * 1754 * If spa_load_verbatim is true, trust the current 1755 * in-core spa_config and update the disk labels. 1756 */ 1757 if (config_cache_txg != spa->spa_config_txg || 1758 state == SPA_LOAD_IMPORT || spa->spa_load_verbatim || 1759 state == SPA_LOAD_RECOVER) 1760 need_update = B_TRUE; 1761 1762 for (int c = 0; c < rvd->vdev_children; c++) 1763 if (rvd->vdev_child[c]->vdev_ms_array == 0) 1764 need_update = B_TRUE; 1765 1766 /* 1767 * Update the config cache asychronously in case we're the 1768 * root pool, in which case the config cache isn't writable yet. 1769 */ 1770 if (need_update) 1771 spa_async_request(spa, SPA_ASYNC_CONFIG_UPDATE); 1772 1773 /* 1774 * Check all DTLs to see if anything needs resilvering. 1775 */ 1776 if (vdev_resilver_needed(rvd, NULL, NULL)) 1777 spa_async_request(spa, SPA_ASYNC_RESILVER); 1778 1779 /* 1780 * Delete any inconsistent datasets. 1781 */ 1782 (void) dmu_objset_find(spa_name(spa), 1783 dsl_destroy_inconsistent, NULL, DS_FIND_CHILDREN); 1784 1785 /* 1786 * Clean up any stale temporary dataset userrefs. 1787 */ 1788 dsl_pool_clean_tmp_userrefs(spa->spa_dsl_pool); 1789 } 1790 1791 error = 0; 1792 out: 1793 1794 spa->spa_minref = refcount_count(&spa->spa_refcount); 1795 if (error && error != EBADF) 1796 zfs_ereport_post(ereport, spa, NULL, NULL, 0, 0); 1797 spa->spa_load_state = SPA_LOAD_NONE; 1798 spa->spa_ena = 0; 1799 1800 return (error); 1801 } 1802 1803 static int 1804 spa_load_retry(spa_t *spa, spa_load_state_t state, int mosconfig) 1805 { 1806 spa_unload(spa); 1807 spa_deactivate(spa); 1808 1809 spa->spa_load_max_txg--; 1810 1811 spa_activate(spa, spa_mode_global); 1812 spa_async_suspend(spa); 1813 1814 return (spa_load(spa, state, mosconfig)); 1815 } 1816 1817 static int 1818 spa_load_best(spa_t *spa, spa_load_state_t state, int mosconfig, 1819 uint64_t max_request, boolean_t extreme) 1820 { 1821 nvlist_t *config = NULL; 1822 int load_error, rewind_error; 1823 uint64_t safe_rollback_txg; 1824 uint64_t min_txg; 1825 1826 if (spa->spa_load_txg && state == SPA_LOAD_RECOVER) 1827 spa->spa_load_max_txg = spa->spa_load_txg; 1828 else 1829 spa->spa_load_max_txg = max_request; 1830 1831 load_error = rewind_error = spa_load(spa, state, mosconfig); 1832 if (load_error == 0) 1833 return (0); 1834 1835 if (spa->spa_root_vdev != NULL) 1836 config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); 1837 1838 spa->spa_last_ubsync_txg = spa->spa_uberblock.ub_txg; 1839 spa->spa_last_ubsync_txg_ts = spa->spa_uberblock.ub_timestamp; 1840 1841 /* specific txg requested */ 1842 if (spa->spa_load_max_txg != UINT64_MAX && !extreme) { 1843 nvlist_free(config); 1844 return (load_error); 1845 } 1846 1847 /* Price of rolling back is discarding txgs, including log */ 1848 if (state == SPA_LOAD_RECOVER) 1849 spa->spa_log_state = SPA_LOG_CLEAR; 1850 1851 spa->spa_load_max_txg = spa->spa_uberblock.ub_txg; 1852 safe_rollback_txg = spa->spa_uberblock.ub_txg - TXG_DEFER_SIZE; 1853 1854 min_txg = extreme ? TXG_INITIAL : safe_rollback_txg; 1855 while (rewind_error && (spa->spa_uberblock.ub_txg >= min_txg)) { 1856 if (spa->spa_load_max_txg < safe_rollback_txg) 1857 spa->spa_extreme_rewind = B_TRUE; 1858 rewind_error = spa_load_retry(spa, state, mosconfig); 1859 } 1860 1861 if (config) 1862 spa_rewind_data_to_nvlist(spa, config); 1863 1864 spa->spa_extreme_rewind = B_FALSE; 1865 spa->spa_load_max_txg = UINT64_MAX; 1866 1867 if (config && (rewind_error || state != SPA_LOAD_RECOVER)) 1868 spa_config_set(spa, config); 1869 1870 return (state == SPA_LOAD_RECOVER ? rewind_error : load_error); 1871 } 1872 1873 /* 1874 * Pool Open/Import 1875 * 1876 * The import case is identical to an open except that the configuration is sent 1877 * down from userland, instead of grabbed from the configuration cache. For the 1878 * case of an open, the pool configuration will exist in the 1879 * POOL_STATE_UNINITIALIZED state. 1880 * 1881 * The stats information (gen/count/ustats) is used to gather vdev statistics at 1882 * the same time open the pool, without having to keep around the spa_t in some 1883 * ambiguous state. 1884 */ 1885 static int 1886 spa_open_common(const char *pool, spa_t **spapp, void *tag, nvlist_t *nvpolicy, 1887 nvlist_t **config) 1888 { 1889 spa_t *spa; 1890 boolean_t norewind; 1891 boolean_t extreme; 1892 zpool_rewind_policy_t policy; 1893 spa_load_state_t state = SPA_LOAD_OPEN; 1894 int error; 1895 int locked = B_FALSE; 1896 1897 *spapp = NULL; 1898 1899 zpool_get_rewind_policy(nvpolicy, &policy); 1900 if (policy.zrp_request & ZPOOL_DO_REWIND) 1901 state = SPA_LOAD_RECOVER; 1902 norewind = (policy.zrp_request == ZPOOL_NO_REWIND); 1903 extreme = ((policy.zrp_request & ZPOOL_EXTREME_REWIND) != 0); 1904 1905 /* 1906 * As disgusting as this is, we need to support recursive calls to this 1907 * function because dsl_dir_open() is called during spa_load(), and ends 1908 * up calling spa_open() again. The real fix is to figure out how to 1909 * avoid dsl_dir_open() calling this in the first place. 1910 */ 1911 if (mutex_owner(&spa_namespace_lock) != curthread) { 1912 mutex_enter(&spa_namespace_lock); 1913 locked = B_TRUE; 1914 } 1915 1916 if ((spa = spa_lookup(pool)) == NULL) { 1917 if (locked) 1918 mutex_exit(&spa_namespace_lock); 1919 return (ENOENT); 1920 } 1921 1922 if (spa->spa_state == POOL_STATE_UNINITIALIZED) { 1923 1924 spa_activate(spa, spa_mode_global); 1925 1926 if (spa->spa_last_open_failed && norewind) { 1927 if (config != NULL && spa->spa_config) 1928 VERIFY(nvlist_dup(spa->spa_config, 1929 config, KM_SLEEP) == 0); 1930 spa_deactivate(spa); 1931 if (locked) 1932 mutex_exit(&spa_namespace_lock); 1933 return (spa->spa_last_open_failed); 1934 } 1935 1936 if (state != SPA_LOAD_RECOVER) 1937 spa->spa_last_ubsync_txg = spa->spa_load_txg = 0; 1938 1939 error = spa_load_best(spa, state, B_FALSE, policy.zrp_txg, 1940 extreme); 1941 1942 if (error == EBADF) { 1943 /* 1944 * If vdev_validate() returns failure (indicated by 1945 * EBADF), it indicates that one of the vdevs indicates 1946 * that the pool has been exported or destroyed. If 1947 * this is the case, the config cache is out of sync and 1948 * we should remove the pool from the namespace. 1949 */ 1950 spa_unload(spa); 1951 spa_deactivate(spa); 1952 spa_config_sync(spa, B_TRUE, B_TRUE); 1953 spa_remove(spa); 1954 if (locked) 1955 mutex_exit(&spa_namespace_lock); 1956 return (ENOENT); 1957 } 1958 1959 if (error) { 1960 /* 1961 * We can't open the pool, but we still have useful 1962 * information: the state of each vdev after the 1963 * attempted vdev_open(). Return this to the user. 1964 */ 1965 if (config != NULL && spa->spa_config) 1966 VERIFY(nvlist_dup(spa->spa_config, config, 1967 KM_SLEEP) == 0); 1968 spa_unload(spa); 1969 spa_deactivate(spa); 1970 spa->spa_last_open_failed = error; 1971 if (locked) 1972 mutex_exit(&spa_namespace_lock); 1973 *spapp = NULL; 1974 return (error); 1975 } 1976 1977 } 1978 1979 spa_open_ref(spa, tag); 1980 1981 spa->spa_last_open_failed = 0; 1982 1983 if (config != NULL) 1984 *config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); 1985 1986 spa->spa_last_ubsync_txg = 0; 1987 spa->spa_load_txg = 0; 1988 1989 if (locked) 1990 mutex_exit(&spa_namespace_lock); 1991 1992 *spapp = spa; 1993 1994 return (0); 1995 } 1996 1997 int 1998 spa_open_rewind(const char *name, spa_t **spapp, void *tag, nvlist_t *policy, 1999 nvlist_t **config) 2000 { 2001 return (spa_open_common(name, spapp, tag, policy, config)); 2002 } 2003 2004 int 2005 spa_open(const char *name, spa_t **spapp, void *tag) 2006 { 2007 return (spa_open_common(name, spapp, tag, NULL, NULL)); 2008 } 2009 2010 /* 2011 * Lookup the given spa_t, incrementing the inject count in the process, 2012 * preventing it from being exported or destroyed. 2013 */ 2014 spa_t * 2015 spa_inject_addref(char *name) 2016 { 2017 spa_t *spa; 2018 2019 mutex_enter(&spa_namespace_lock); 2020 if ((spa = spa_lookup(name)) == NULL) { 2021 mutex_exit(&spa_namespace_lock); 2022 return (NULL); 2023 } 2024 spa->spa_inject_ref++; 2025 mutex_exit(&spa_namespace_lock); 2026 2027 return (spa); 2028 } 2029 2030 void 2031 spa_inject_delref(spa_t *spa) 2032 { 2033 mutex_enter(&spa_namespace_lock); 2034 spa->spa_inject_ref--; 2035 mutex_exit(&spa_namespace_lock); 2036 } 2037 2038 /* 2039 * Add spares device information to the nvlist. 2040 */ 2041 static void 2042 spa_add_spares(spa_t *spa, nvlist_t *config) 2043 { 2044 nvlist_t **spares; 2045 uint_t i, nspares; 2046 nvlist_t *nvroot; 2047 uint64_t guid; 2048 vdev_stat_t *vs; 2049 uint_t vsc; 2050 uint64_t pool; 2051 2052 ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER)); 2053 2054 if (spa->spa_spares.sav_count == 0) 2055 return; 2056 2057 VERIFY(nvlist_lookup_nvlist(config, 2058 ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0); 2059 VERIFY(nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, 2060 ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); 2061 if (nspares != 0) { 2062 VERIFY(nvlist_add_nvlist_array(nvroot, 2063 ZPOOL_CONFIG_SPARES, spares, nspares) == 0); 2064 VERIFY(nvlist_lookup_nvlist_array(nvroot, 2065 ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0); 2066 2067 /* 2068 * Go through and find any spares which have since been 2069 * repurposed as an active spare. If this is the case, update 2070 * their status appropriately. 2071 */ 2072 for (i = 0; i < nspares; i++) { 2073 VERIFY(nvlist_lookup_uint64(spares[i], 2074 ZPOOL_CONFIG_GUID, &guid) == 0); 2075 if (spa_spare_exists(guid, &pool, NULL) && 2076 pool != 0ULL) { 2077 VERIFY(nvlist_lookup_uint64_array( 2078 spares[i], ZPOOL_CONFIG_STATS, 2079 (uint64_t **)&vs, &vsc) == 0); 2080 vs->vs_state = VDEV_STATE_CANT_OPEN; 2081 vs->vs_aux = VDEV_AUX_SPARED; 2082 } 2083 } 2084 } 2085 } 2086 2087 /* 2088 * Add l2cache device information to the nvlist, including vdev stats. 2089 */ 2090 static void 2091 spa_add_l2cache(spa_t *spa, nvlist_t *config) 2092 { 2093 nvlist_t **l2cache; 2094 uint_t i, j, nl2cache; 2095 nvlist_t *nvroot; 2096 uint64_t guid; 2097 vdev_t *vd; 2098 vdev_stat_t *vs; 2099 uint_t vsc; 2100 2101 ASSERT(spa_config_held(spa, SCL_CONFIG, RW_READER)); 2102 2103 if (spa->spa_l2cache.sav_count == 0) 2104 return; 2105 2106 VERIFY(nvlist_lookup_nvlist(config, 2107 ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0); 2108 VERIFY(nvlist_lookup_nvlist_array(spa->spa_l2cache.sav_config, 2109 ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); 2110 if (nl2cache != 0) { 2111 VERIFY(nvlist_add_nvlist_array(nvroot, 2112 ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); 2113 VERIFY(nvlist_lookup_nvlist_array(nvroot, 2114 ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0); 2115 2116 /* 2117 * Update level 2 cache device stats. 2118 */ 2119 2120 for (i = 0; i < nl2cache; i++) { 2121 VERIFY(nvlist_lookup_uint64(l2cache[i], 2122 ZPOOL_CONFIG_GUID, &guid) == 0); 2123 2124 vd = NULL; 2125 for (j = 0; j < spa->spa_l2cache.sav_count; j++) { 2126 if (guid == 2127 spa->spa_l2cache.sav_vdevs[j]->vdev_guid) { 2128 vd = spa->spa_l2cache.sav_vdevs[j]; 2129 break; 2130 } 2131 } 2132 ASSERT(vd != NULL); 2133 2134 VERIFY(nvlist_lookup_uint64_array(l2cache[i], 2135 ZPOOL_CONFIG_STATS, (uint64_t **)&vs, &vsc) == 0); 2136 vdev_get_stats(vd, vs); 2137 } 2138 } 2139 } 2140 2141 int 2142 spa_get_stats(const char *name, nvlist_t **config, char *altroot, size_t buflen) 2143 { 2144 int error; 2145 spa_t *spa; 2146 2147 *config = NULL; 2148 error = spa_open_common(name, &spa, FTAG, NULL, config); 2149 2150 if (spa != NULL) { 2151 /* 2152 * This still leaves a window of inconsistency where the spares 2153 * or l2cache devices could change and the config would be 2154 * self-inconsistent. 2155 */ 2156 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); 2157 2158 if (*config != NULL) { 2159 VERIFY(nvlist_add_uint64(*config, 2160 ZPOOL_CONFIG_ERRCOUNT, 2161 spa_get_errlog_size(spa)) == 0); 2162 2163 if (spa_suspended(spa)) 2164 VERIFY(nvlist_add_uint64(*config, 2165 ZPOOL_CONFIG_SUSPENDED, 2166 spa->spa_failmode) == 0); 2167 2168 spa_add_spares(spa, *config); 2169 spa_add_l2cache(spa, *config); 2170 } 2171 } 2172 2173 /* 2174 * We want to get the alternate root even for faulted pools, so we cheat 2175 * and call spa_lookup() directly. 2176 */ 2177 if (altroot) { 2178 if (spa == NULL) { 2179 mutex_enter(&spa_namespace_lock); 2180 spa = spa_lookup(name); 2181 if (spa) 2182 spa_altroot(spa, altroot, buflen); 2183 else 2184 altroot[0] = '\0'; 2185 spa = NULL; 2186 mutex_exit(&spa_namespace_lock); 2187 } else { 2188 spa_altroot(spa, altroot, buflen); 2189 } 2190 } 2191 2192 if (spa != NULL) { 2193 spa_config_exit(spa, SCL_CONFIG, FTAG); 2194 spa_close(spa, FTAG); 2195 } 2196 2197 return (error); 2198 } 2199 2200 /* 2201 * Validate that the auxiliary device array is well formed. We must have an 2202 * array of nvlists, each which describes a valid leaf vdev. If this is an 2203 * import (mode is VDEV_ALLOC_SPARE), then we allow corrupted spares to be 2204 * specified, as long as they are well-formed. 2205 */ 2206 static int 2207 spa_validate_aux_devs(spa_t *spa, nvlist_t *nvroot, uint64_t crtxg, int mode, 2208 spa_aux_vdev_t *sav, const char *config, uint64_t version, 2209 vdev_labeltype_t label) 2210 { 2211 nvlist_t **dev; 2212 uint_t i, ndev; 2213 vdev_t *vd; 2214 int error; 2215 2216 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 2217 2218 /* 2219 * It's acceptable to have no devs specified. 2220 */ 2221 if (nvlist_lookup_nvlist_array(nvroot, config, &dev, &ndev) != 0) 2222 return (0); 2223 2224 if (ndev == 0) 2225 return (EINVAL); 2226 2227 /* 2228 * Make sure the pool is formatted with a version that supports this 2229 * device type. 2230 */ 2231 if (spa_version(spa) < version) 2232 return (ENOTSUP); 2233 2234 /* 2235 * Set the pending device list so we correctly handle device in-use 2236 * checking. 2237 */ 2238 sav->sav_pending = dev; 2239 sav->sav_npending = ndev; 2240 2241 for (i = 0; i < ndev; i++) { 2242 if ((error = spa_config_parse(spa, &vd, dev[i], NULL, 0, 2243 mode)) != 0) 2244 goto out; 2245 2246 if (!vd->vdev_ops->vdev_op_leaf) { 2247 vdev_free(vd); 2248 error = EINVAL; 2249 goto out; 2250 } 2251 2252 /* 2253 * The L2ARC currently only supports disk devices in 2254 * kernel context. For user-level testing, we allow it. 2255 */ 2256 #ifdef _KERNEL 2257 if ((strcmp(config, ZPOOL_CONFIG_L2CACHE) == 0) && 2258 strcmp(vd->vdev_ops->vdev_op_type, VDEV_TYPE_DISK) != 0) { 2259 error = ENOTBLK; 2260 goto out; 2261 } 2262 #endif 2263 vd->vdev_top = vd; 2264 2265 if ((error = vdev_open(vd)) == 0 && 2266 (error = vdev_label_init(vd, crtxg, label)) == 0) { 2267 VERIFY(nvlist_add_uint64(dev[i], ZPOOL_CONFIG_GUID, 2268 vd->vdev_guid) == 0); 2269 } 2270 2271 vdev_free(vd); 2272 2273 if (error && 2274 (mode != VDEV_ALLOC_SPARE && mode != VDEV_ALLOC_L2CACHE)) 2275 goto out; 2276 else 2277 error = 0; 2278 } 2279 2280 out: 2281 sav->sav_pending = NULL; 2282 sav->sav_npending = 0; 2283 return (error); 2284 } 2285 2286 static int 2287 spa_validate_aux(spa_t *spa, nvlist_t *nvroot, uint64_t crtxg, int mode) 2288 { 2289 int error; 2290 2291 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 2292 2293 if ((error = spa_validate_aux_devs(spa, nvroot, crtxg, mode, 2294 &spa->spa_spares, ZPOOL_CONFIG_SPARES, SPA_VERSION_SPARES, 2295 VDEV_LABEL_SPARE)) != 0) { 2296 return (error); 2297 } 2298 2299 return (spa_validate_aux_devs(spa, nvroot, crtxg, mode, 2300 &spa->spa_l2cache, ZPOOL_CONFIG_L2CACHE, SPA_VERSION_L2CACHE, 2301 VDEV_LABEL_L2CACHE)); 2302 } 2303 2304 static void 2305 spa_set_aux_vdevs(spa_aux_vdev_t *sav, nvlist_t **devs, int ndevs, 2306 const char *config) 2307 { 2308 int i; 2309 2310 if (sav->sav_config != NULL) { 2311 nvlist_t **olddevs; 2312 uint_t oldndevs; 2313 nvlist_t **newdevs; 2314 2315 /* 2316 * Generate new dev list by concatentating with the 2317 * current dev list. 2318 */ 2319 VERIFY(nvlist_lookup_nvlist_array(sav->sav_config, config, 2320 &olddevs, &oldndevs) == 0); 2321 2322 newdevs = kmem_alloc(sizeof (void *) * 2323 (ndevs + oldndevs), KM_SLEEP); 2324 for (i = 0; i < oldndevs; i++) 2325 VERIFY(nvlist_dup(olddevs[i], &newdevs[i], 2326 KM_SLEEP) == 0); 2327 for (i = 0; i < ndevs; i++) 2328 VERIFY(nvlist_dup(devs[i], &newdevs[i + oldndevs], 2329 KM_SLEEP) == 0); 2330 2331 VERIFY(nvlist_remove(sav->sav_config, config, 2332 DATA_TYPE_NVLIST_ARRAY) == 0); 2333 2334 VERIFY(nvlist_add_nvlist_array(sav->sav_config, 2335 config, newdevs, ndevs + oldndevs) == 0); 2336 for (i = 0; i < oldndevs + ndevs; i++) 2337 nvlist_free(newdevs[i]); 2338 kmem_free(newdevs, (oldndevs + ndevs) * sizeof (void *)); 2339 } else { 2340 /* 2341 * Generate a new dev list. 2342 */ 2343 VERIFY(nvlist_alloc(&sav->sav_config, NV_UNIQUE_NAME, 2344 KM_SLEEP) == 0); 2345 VERIFY(nvlist_add_nvlist_array(sav->sav_config, config, 2346 devs, ndevs) == 0); 2347 } 2348 } 2349 2350 /* 2351 * Stop and drop level 2 ARC devices 2352 */ 2353 void 2354 spa_l2cache_drop(spa_t *spa) 2355 { 2356 vdev_t *vd; 2357 int i; 2358 spa_aux_vdev_t *sav = &spa->spa_l2cache; 2359 2360 for (i = 0; i < sav->sav_count; i++) { 2361 uint64_t pool; 2362 2363 vd = sav->sav_vdevs[i]; 2364 ASSERT(vd != NULL); 2365 2366 if (spa_l2cache_exists(vd->vdev_guid, &pool) && 2367 pool != 0ULL && l2arc_vdev_present(vd)) 2368 l2arc_remove_vdev(vd); 2369 if (vd->vdev_isl2cache) 2370 spa_l2cache_remove(vd); 2371 vdev_clear_stats(vd); 2372 (void) vdev_close(vd); 2373 } 2374 } 2375 2376 /* 2377 * Pool Creation 2378 */ 2379 int 2380 spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props, 2381 const char *history_str, nvlist_t *zplprops) 2382 { 2383 spa_t *spa; 2384 char *altroot = NULL; 2385 vdev_t *rvd; 2386 dsl_pool_t *dp; 2387 dmu_tx_t *tx; 2388 int error = 0; 2389 uint64_t txg = TXG_INITIAL; 2390 nvlist_t **spares, **l2cache; 2391 uint_t nspares, nl2cache; 2392 uint64_t version; 2393 2394 /* 2395 * If this pool already exists, return failure. 2396 */ 2397 mutex_enter(&spa_namespace_lock); 2398 if (spa_lookup(pool) != NULL) { 2399 mutex_exit(&spa_namespace_lock); 2400 return (EEXIST); 2401 } 2402 2403 /* 2404 * Allocate a new spa_t structure. 2405 */ 2406 (void) nvlist_lookup_string(props, 2407 zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); 2408 spa = spa_add(pool, NULL, altroot); 2409 spa_activate(spa, spa_mode_global); 2410 2411 if (props && (error = spa_prop_validate(spa, props))) { 2412 spa_deactivate(spa); 2413 spa_remove(spa); 2414 mutex_exit(&spa_namespace_lock); 2415 return (error); 2416 } 2417 2418 if (nvlist_lookup_uint64(props, zpool_prop_to_name(ZPOOL_PROP_VERSION), 2419 &version) != 0) 2420 version = SPA_VERSION; 2421 ASSERT(version <= SPA_VERSION); 2422 2423 spa->spa_first_txg = txg; 2424 spa->spa_uberblock.ub_txg = txg - 1; 2425 spa->spa_uberblock.ub_version = version; 2426 spa->spa_ubsync = spa->spa_uberblock; 2427 2428 /* 2429 * Create "The Godfather" zio to hold all async IOs 2430 */ 2431 spa->spa_async_zio_root = zio_root(spa, NULL, NULL, 2432 ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_GODFATHER); 2433 2434 /* 2435 * Create the root vdev. 2436 */ 2437 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2438 2439 error = spa_config_parse(spa, &rvd, nvroot, NULL, 0, VDEV_ALLOC_ADD); 2440 2441 ASSERT(error != 0 || rvd != NULL); 2442 ASSERT(error != 0 || spa->spa_root_vdev == rvd); 2443 2444 if (error == 0 && !zfs_allocatable_devs(nvroot)) 2445 error = EINVAL; 2446 2447 if (error == 0 && 2448 (error = vdev_create(rvd, txg, B_FALSE)) == 0 && 2449 (error = spa_validate_aux(spa, nvroot, txg, 2450 VDEV_ALLOC_ADD)) == 0) { 2451 for (int c = 0; c < rvd->vdev_children; c++) { 2452 vdev_metaslab_set_size(rvd->vdev_child[c]); 2453 vdev_expand(rvd->vdev_child[c], txg); 2454 } 2455 } 2456 2457 spa_config_exit(spa, SCL_ALL, FTAG); 2458 2459 if (error != 0) { 2460 spa_unload(spa); 2461 spa_deactivate(spa); 2462 spa_remove(spa); 2463 mutex_exit(&spa_namespace_lock); 2464 return (error); 2465 } 2466 2467 /* 2468 * Get the list of spares, if specified. 2469 */ 2470 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, 2471 &spares, &nspares) == 0) { 2472 VERIFY(nvlist_alloc(&spa->spa_spares.sav_config, NV_UNIQUE_NAME, 2473 KM_SLEEP) == 0); 2474 VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, 2475 ZPOOL_CONFIG_SPARES, spares, nspares) == 0); 2476 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2477 spa_load_spares(spa); 2478 spa_config_exit(spa, SCL_ALL, FTAG); 2479 spa->spa_spares.sav_sync = B_TRUE; 2480 } 2481 2482 /* 2483 * Get the list of level 2 cache devices, if specified. 2484 */ 2485 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, 2486 &l2cache, &nl2cache) == 0) { 2487 VERIFY(nvlist_alloc(&spa->spa_l2cache.sav_config, 2488 NV_UNIQUE_NAME, KM_SLEEP) == 0); 2489 VERIFY(nvlist_add_nvlist_array(spa->spa_l2cache.sav_config, 2490 ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); 2491 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2492 spa_load_l2cache(spa); 2493 spa_config_exit(spa, SCL_ALL, FTAG); 2494 spa->spa_l2cache.sav_sync = B_TRUE; 2495 } 2496 2497 spa->spa_dsl_pool = dp = dsl_pool_create(spa, zplprops, txg); 2498 spa->spa_meta_objset = dp->dp_meta_objset; 2499 2500 /* 2501 * Create DDTs (dedup tables). 2502 */ 2503 ddt_create(spa); 2504 2505 spa_update_dspace(spa); 2506 2507 tx = dmu_tx_create_assigned(dp, txg); 2508 2509 /* 2510 * Create the pool config object. 2511 */ 2512 spa->spa_config_object = dmu_object_alloc(spa->spa_meta_objset, 2513 DMU_OT_PACKED_NVLIST, SPA_CONFIG_BLOCKSIZE, 2514 DMU_OT_PACKED_NVLIST_SIZE, sizeof (uint64_t), tx); 2515 2516 if (zap_add(spa->spa_meta_objset, 2517 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_CONFIG, 2518 sizeof (uint64_t), 1, &spa->spa_config_object, tx) != 0) { 2519 cmn_err(CE_PANIC, "failed to add pool config"); 2520 } 2521 2522 /* Newly created pools with the right version are always deflated. */ 2523 if (version >= SPA_VERSION_RAIDZ_DEFLATE) { 2524 spa->spa_deflate = TRUE; 2525 if (zap_add(spa->spa_meta_objset, 2526 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_DEFLATE, 2527 sizeof (uint64_t), 1, &spa->spa_deflate, tx) != 0) { 2528 cmn_err(CE_PANIC, "failed to add deflate"); 2529 } 2530 } 2531 2532 /* 2533 * Create the deferred-free bplist object. Turn off compression 2534 * because sync-to-convergence takes longer if the blocksize 2535 * keeps changing. 2536 */ 2537 spa->spa_deferred_bplist_obj = bplist_create(spa->spa_meta_objset, 2538 1 << 14, tx); 2539 dmu_object_set_compress(spa->spa_meta_objset, 2540 spa->spa_deferred_bplist_obj, ZIO_COMPRESS_OFF, tx); 2541 2542 if (zap_add(spa->spa_meta_objset, 2543 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_SYNC_BPLIST, 2544 sizeof (uint64_t), 1, &spa->spa_deferred_bplist_obj, tx) != 0) { 2545 cmn_err(CE_PANIC, "failed to add bplist"); 2546 } 2547 2548 /* 2549 * Create the pool's history object. 2550 */ 2551 if (version >= SPA_VERSION_ZPOOL_HISTORY) 2552 spa_history_create_obj(spa, tx); 2553 2554 /* 2555 * Set pool properties. 2556 */ 2557 spa->spa_bootfs = zpool_prop_default_numeric(ZPOOL_PROP_BOOTFS); 2558 spa->spa_delegation = zpool_prop_default_numeric(ZPOOL_PROP_DELEGATION); 2559 spa->spa_failmode = zpool_prop_default_numeric(ZPOOL_PROP_FAILUREMODE); 2560 spa->spa_autoexpand = zpool_prop_default_numeric(ZPOOL_PROP_AUTOEXPAND); 2561 2562 if (props != NULL) { 2563 spa_configfile_set(spa, props, B_FALSE); 2564 spa_sync_props(spa, props, CRED(), tx); 2565 } 2566 2567 dmu_tx_commit(tx); 2568 2569 spa->spa_sync_on = B_TRUE; 2570 txg_sync_start(spa->spa_dsl_pool); 2571 2572 /* 2573 * We explicitly wait for the first transaction to complete so that our 2574 * bean counters are appropriately updated. 2575 */ 2576 txg_wait_synced(spa->spa_dsl_pool, txg); 2577 2578 spa_config_sync(spa, B_FALSE, B_TRUE); 2579 2580 if (version >= SPA_VERSION_ZPOOL_HISTORY && history_str != NULL) 2581 (void) spa_history_log(spa, history_str, LOG_CMD_POOL_CREATE); 2582 spa_history_log_version(spa, LOG_POOL_CREATE); 2583 2584 spa->spa_minref = refcount_count(&spa->spa_refcount); 2585 2586 mutex_exit(&spa_namespace_lock); 2587 2588 return (0); 2589 } 2590 2591 #ifdef _KERNEL 2592 /* 2593 * Get the root pool information from the root disk, then import the root pool 2594 * during the system boot up time. 2595 */ 2596 extern int vdev_disk_read_rootlabel(char *, char *, nvlist_t **); 2597 2598 static nvlist_t * 2599 spa_generate_rootconf(char *devpath, char *devid, uint64_t *guid) 2600 { 2601 nvlist_t *config; 2602 nvlist_t *nvtop, *nvroot; 2603 uint64_t pgid; 2604 2605 if (vdev_disk_read_rootlabel(devpath, devid, &config) != 0) 2606 return (NULL); 2607 2608 /* 2609 * Add this top-level vdev to the child array. 2610 */ 2611 VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, 2612 &nvtop) == 0); 2613 VERIFY(nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_GUID, 2614 &pgid) == 0); 2615 VERIFY(nvlist_lookup_uint64(config, ZPOOL_CONFIG_GUID, guid) == 0); 2616 2617 /* 2618 * Put this pool's top-level vdevs into a root vdev. 2619 */ 2620 VERIFY(nvlist_alloc(&nvroot, NV_UNIQUE_NAME, KM_SLEEP) == 0); 2621 VERIFY(nvlist_add_string(nvroot, ZPOOL_CONFIG_TYPE, 2622 VDEV_TYPE_ROOT) == 0); 2623 VERIFY(nvlist_add_uint64(nvroot, ZPOOL_CONFIG_ID, 0ULL) == 0); 2624 VERIFY(nvlist_add_uint64(nvroot, ZPOOL_CONFIG_GUID, pgid) == 0); 2625 VERIFY(nvlist_add_nvlist_array(nvroot, ZPOOL_CONFIG_CHILDREN, 2626 &nvtop, 1) == 0); 2627 2628 /* 2629 * Replace the existing vdev_tree with the new root vdev in 2630 * this pool's configuration (remove the old, add the new). 2631 */ 2632 VERIFY(nvlist_add_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, nvroot) == 0); 2633 nvlist_free(nvroot); 2634 return (config); 2635 } 2636 2637 /* 2638 * Walk the vdev tree and see if we can find a device with "better" 2639 * configuration. A configuration is "better" if the label on that 2640 * device has a more recent txg. 2641 */ 2642 static void 2643 spa_alt_rootvdev(vdev_t *vd, vdev_t **avd, uint64_t *txg) 2644 { 2645 for (int c = 0; c < vd->vdev_children; c++) 2646 spa_alt_rootvdev(vd->vdev_child[c], avd, txg); 2647 2648 if (vd->vdev_ops->vdev_op_leaf) { 2649 nvlist_t *label; 2650 uint64_t label_txg; 2651 2652 if (vdev_disk_read_rootlabel(vd->vdev_physpath, vd->vdev_devid, 2653 &label) != 0) 2654 return; 2655 2656 VERIFY(nvlist_lookup_uint64(label, ZPOOL_CONFIG_POOL_TXG, 2657 &label_txg) == 0); 2658 2659 /* 2660 * Do we have a better boot device? 2661 */ 2662 if (label_txg > *txg) { 2663 *txg = label_txg; 2664 *avd = vd; 2665 } 2666 nvlist_free(label); 2667 } 2668 } 2669 2670 /* 2671 * Import a root pool. 2672 * 2673 * For x86. devpath_list will consist of devid and/or physpath name of 2674 * the vdev (e.g. "id1,sd@SSEAGATE..." or "/pci@1f,0/ide@d/disk@0,0:a"). 2675 * The GRUB "findroot" command will return the vdev we should boot. 2676 * 2677 * For Sparc, devpath_list consists the physpath name of the booting device 2678 * no matter the rootpool is a single device pool or a mirrored pool. 2679 * e.g. 2680 * "/pci@1f,0/ide@d/disk@0,0:a" 2681 */ 2682 int 2683 spa_import_rootpool(char *devpath, char *devid) 2684 { 2685 spa_t *spa; 2686 vdev_t *rvd, *bvd, *avd = NULL; 2687 nvlist_t *config, *nvtop; 2688 uint64_t guid, txg; 2689 char *pname; 2690 int error; 2691 2692 /* 2693 * Read the label from the boot device and generate a configuration. 2694 */ 2695 config = spa_generate_rootconf(devpath, devid, &guid); 2696 #if defined(_OBP) && defined(_KERNEL) 2697 if (config == NULL) { 2698 if (strstr(devpath, "/iscsi/ssd") != NULL) { 2699 /* iscsi boot */ 2700 get_iscsi_bootpath_phy(devpath); 2701 config = spa_generate_rootconf(devpath, devid, &guid); 2702 } 2703 } 2704 #endif 2705 if (config == NULL) { 2706 cmn_err(CE_NOTE, "Can not read the pool label from '%s'", 2707 devpath); 2708 return (EIO); 2709 } 2710 2711 VERIFY(nvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME, 2712 &pname) == 0); 2713 VERIFY(nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_TXG, &txg) == 0); 2714 2715 mutex_enter(&spa_namespace_lock); 2716 if ((spa = spa_lookup(pname)) != NULL) { 2717 /* 2718 * Remove the existing root pool from the namespace so that we 2719 * can replace it with the correct config we just read in. 2720 */ 2721 spa_remove(spa); 2722 } 2723 2724 spa = spa_add(pname, config, NULL); 2725 spa->spa_is_root = B_TRUE; 2726 spa->spa_load_verbatim = B_TRUE; 2727 2728 /* 2729 * Build up a vdev tree based on the boot device's label config. 2730 */ 2731 VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, 2732 &nvtop) == 0); 2733 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2734 error = spa_config_parse(spa, &rvd, nvtop, NULL, 0, 2735 VDEV_ALLOC_ROOTPOOL); 2736 spa_config_exit(spa, SCL_ALL, FTAG); 2737 if (error) { 2738 mutex_exit(&spa_namespace_lock); 2739 nvlist_free(config); 2740 cmn_err(CE_NOTE, "Can not parse the config for pool '%s'", 2741 pname); 2742 return (error); 2743 } 2744 2745 /* 2746 * Get the boot vdev. 2747 */ 2748 if ((bvd = vdev_lookup_by_guid(rvd, guid)) == NULL) { 2749 cmn_err(CE_NOTE, "Can not find the boot vdev for guid %llu", 2750 (u_longlong_t)guid); 2751 error = ENOENT; 2752 goto out; 2753 } 2754 2755 /* 2756 * Determine if there is a better boot device. 2757 */ 2758 avd = bvd; 2759 spa_alt_rootvdev(rvd, &avd, &txg); 2760 if (avd != bvd) { 2761 cmn_err(CE_NOTE, "The boot device is 'degraded'. Please " 2762 "try booting from '%s'", avd->vdev_path); 2763 error = EINVAL; 2764 goto out; 2765 } 2766 2767 /* 2768 * If the boot device is part of a spare vdev then ensure that 2769 * we're booting off the active spare. 2770 */ 2771 if (bvd->vdev_parent->vdev_ops == &vdev_spare_ops && 2772 !bvd->vdev_isspare) { 2773 cmn_err(CE_NOTE, "The boot device is currently spared. Please " 2774 "try booting from '%s'", 2775 bvd->vdev_parent->vdev_child[1]->vdev_path); 2776 error = EINVAL; 2777 goto out; 2778 } 2779 2780 error = 0; 2781 spa_history_log_version(spa, LOG_POOL_IMPORT); 2782 out: 2783 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2784 vdev_free(rvd); 2785 spa_config_exit(spa, SCL_ALL, FTAG); 2786 mutex_exit(&spa_namespace_lock); 2787 2788 nvlist_free(config); 2789 return (error); 2790 } 2791 2792 #endif 2793 2794 /* 2795 * Take a pool and insert it into the namespace as if it had been loaded at 2796 * boot. 2797 */ 2798 int 2799 spa_import_verbatim(const char *pool, nvlist_t *config, nvlist_t *props) 2800 { 2801 spa_t *spa; 2802 zpool_rewind_policy_t policy; 2803 char *altroot = NULL; 2804 2805 mutex_enter(&spa_namespace_lock); 2806 if (spa_lookup(pool) != NULL) { 2807 mutex_exit(&spa_namespace_lock); 2808 return (EEXIST); 2809 } 2810 2811 (void) nvlist_lookup_string(props, 2812 zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); 2813 spa = spa_add(pool, config, altroot); 2814 2815 zpool_get_rewind_policy(config, &policy); 2816 spa->spa_load_max_txg = policy.zrp_txg; 2817 2818 spa->spa_load_verbatim = B_TRUE; 2819 2820 if (props != NULL) 2821 spa_configfile_set(spa, props, B_FALSE); 2822 2823 spa_config_sync(spa, B_FALSE, B_TRUE); 2824 2825 mutex_exit(&spa_namespace_lock); 2826 spa_history_log_version(spa, LOG_POOL_IMPORT); 2827 2828 return (0); 2829 } 2830 2831 /* 2832 * Import a non-root pool into the system. 2833 */ 2834 int 2835 spa_import(const char *pool, nvlist_t *config, nvlist_t *props) 2836 { 2837 spa_t *spa; 2838 char *altroot = NULL; 2839 spa_load_state_t state = SPA_LOAD_IMPORT; 2840 zpool_rewind_policy_t policy; 2841 int error; 2842 nvlist_t *nvroot; 2843 nvlist_t **spares, **l2cache; 2844 uint_t nspares, nl2cache; 2845 2846 /* 2847 * If a pool with this name exists, return failure. 2848 */ 2849 mutex_enter(&spa_namespace_lock); 2850 if ((spa = spa_lookup(pool)) != NULL) { 2851 mutex_exit(&spa_namespace_lock); 2852 return (EEXIST); 2853 } 2854 2855 zpool_get_rewind_policy(config, &policy); 2856 if (policy.zrp_request & ZPOOL_DO_REWIND) 2857 state = SPA_LOAD_RECOVER; 2858 2859 /* 2860 * Create and initialize the spa structure. 2861 */ 2862 (void) nvlist_lookup_string(props, 2863 zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot); 2864 spa = spa_add(pool, config, altroot); 2865 spa_activate(spa, spa_mode_global); 2866 2867 /* 2868 * Don't start async tasks until we know everything is healthy. 2869 */ 2870 spa_async_suspend(spa); 2871 2872 /* 2873 * Pass off the heavy lifting to spa_load(). Pass TRUE for mosconfig 2874 * because the user-supplied config is actually the one to trust when 2875 * doing an import. 2876 */ 2877 if (state != SPA_LOAD_RECOVER) 2878 spa->spa_last_ubsync_txg = spa->spa_load_txg = 0; 2879 error = spa_load_best(spa, state, B_TRUE, policy.zrp_txg, 2880 ((policy.zrp_request & ZPOOL_EXTREME_REWIND) != 0)); 2881 2882 /* 2883 * Propagate anything learned about failing or best txgs 2884 * back to caller 2885 */ 2886 spa_rewind_data_to_nvlist(spa, config); 2887 2888 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2889 /* 2890 * Toss any existing sparelist, as it doesn't have any validity 2891 * anymore, and conflicts with spa_has_spare(). 2892 */ 2893 if (spa->spa_spares.sav_config) { 2894 nvlist_free(spa->spa_spares.sav_config); 2895 spa->spa_spares.sav_config = NULL; 2896 spa_load_spares(spa); 2897 } 2898 if (spa->spa_l2cache.sav_config) { 2899 nvlist_free(spa->spa_l2cache.sav_config); 2900 spa->spa_l2cache.sav_config = NULL; 2901 spa_load_l2cache(spa); 2902 } 2903 2904 VERIFY(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, 2905 &nvroot) == 0); 2906 if (error == 0) 2907 error = spa_validate_aux(spa, nvroot, -1ULL, 2908 VDEV_ALLOC_SPARE); 2909 if (error == 0) 2910 error = spa_validate_aux(spa, nvroot, -1ULL, 2911 VDEV_ALLOC_L2CACHE); 2912 spa_config_exit(spa, SCL_ALL, FTAG); 2913 2914 if (props != NULL) 2915 spa_configfile_set(spa, props, B_FALSE); 2916 2917 if (error != 0 || (props && spa_writeable(spa) && 2918 (error = spa_prop_set(spa, props)))) { 2919 spa_unload(spa); 2920 spa_deactivate(spa); 2921 spa_remove(spa); 2922 mutex_exit(&spa_namespace_lock); 2923 return (error); 2924 } 2925 2926 spa_async_resume(spa); 2927 2928 /* 2929 * Override any spares and level 2 cache devices as specified by 2930 * the user, as these may have correct device names/devids, etc. 2931 */ 2932 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, 2933 &spares, &nspares) == 0) { 2934 if (spa->spa_spares.sav_config) 2935 VERIFY(nvlist_remove(spa->spa_spares.sav_config, 2936 ZPOOL_CONFIG_SPARES, DATA_TYPE_NVLIST_ARRAY) == 0); 2937 else 2938 VERIFY(nvlist_alloc(&spa->spa_spares.sav_config, 2939 NV_UNIQUE_NAME, KM_SLEEP) == 0); 2940 VERIFY(nvlist_add_nvlist_array(spa->spa_spares.sav_config, 2941 ZPOOL_CONFIG_SPARES, spares, nspares) == 0); 2942 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2943 spa_load_spares(spa); 2944 spa_config_exit(spa, SCL_ALL, FTAG); 2945 spa->spa_spares.sav_sync = B_TRUE; 2946 } 2947 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, 2948 &l2cache, &nl2cache) == 0) { 2949 if (spa->spa_l2cache.sav_config) 2950 VERIFY(nvlist_remove(spa->spa_l2cache.sav_config, 2951 ZPOOL_CONFIG_L2CACHE, DATA_TYPE_NVLIST_ARRAY) == 0); 2952 else 2953 VERIFY(nvlist_alloc(&spa->spa_l2cache.sav_config, 2954 NV_UNIQUE_NAME, KM_SLEEP) == 0); 2955 VERIFY(nvlist_add_nvlist_array(spa->spa_l2cache.sav_config, 2956 ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache) == 0); 2957 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 2958 spa_load_l2cache(spa); 2959 spa_config_exit(spa, SCL_ALL, FTAG); 2960 spa->spa_l2cache.sav_sync = B_TRUE; 2961 } 2962 2963 /* 2964 * Check for any removed devices. 2965 */ 2966 if (spa->spa_autoreplace) { 2967 spa_aux_check_removed(&spa->spa_spares); 2968 spa_aux_check_removed(&spa->spa_l2cache); 2969 } 2970 2971 if (spa_writeable(spa)) { 2972 /* 2973 * Update the config cache to include the newly-imported pool. 2974 */ 2975 spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); 2976 } 2977 2978 /* 2979 * It's possible that the pool was expanded while it was exported. 2980 * We kick off an async task to handle this for us. 2981 */ 2982 spa_async_request(spa, SPA_ASYNC_AUTOEXPAND); 2983 2984 mutex_exit(&spa_namespace_lock); 2985 spa_history_log_version(spa, LOG_POOL_IMPORT); 2986 2987 return (0); 2988 } 2989 2990 2991 /* 2992 * This (illegal) pool name is used when temporarily importing a spa_t in order 2993 * to get the vdev stats associated with the imported devices. 2994 */ 2995 #define TRYIMPORT_NAME "$import" 2996 2997 nvlist_t * 2998 spa_tryimport(nvlist_t *tryconfig) 2999 { 3000 nvlist_t *config = NULL; 3001 char *poolname; 3002 spa_t *spa; 3003 uint64_t state; 3004 int error; 3005 3006 if (nvlist_lookup_string(tryconfig, ZPOOL_CONFIG_POOL_NAME, &poolname)) 3007 return (NULL); 3008 3009 if (nvlist_lookup_uint64(tryconfig, ZPOOL_CONFIG_POOL_STATE, &state)) 3010 return (NULL); 3011 3012 /* 3013 * Create and initialize the spa structure. 3014 */ 3015 mutex_enter(&spa_namespace_lock); 3016 spa = spa_add(TRYIMPORT_NAME, tryconfig, NULL); 3017 spa_activate(spa, FREAD); 3018 3019 /* 3020 * Pass off the heavy lifting to spa_load(). 3021 * Pass TRUE for mosconfig because the user-supplied config 3022 * is actually the one to trust when doing an import. 3023 */ 3024 error = spa_load(spa, SPA_LOAD_TRYIMPORT, B_TRUE); 3025 3026 /* 3027 * If 'tryconfig' was at least parsable, return the current config. 3028 */ 3029 if (spa->spa_root_vdev != NULL) { 3030 config = spa_config_generate(spa, NULL, -1ULL, B_TRUE); 3031 VERIFY(nvlist_add_string(config, ZPOOL_CONFIG_POOL_NAME, 3032 poolname) == 0); 3033 VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_POOL_STATE, 3034 state) == 0); 3035 VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_TIMESTAMP, 3036 spa->spa_uberblock.ub_timestamp) == 0); 3037 3038 /* 3039 * If the bootfs property exists on this pool then we 3040 * copy it out so that external consumers can tell which 3041 * pools are bootable. 3042 */ 3043 if ((!error || error == EEXIST) && spa->spa_bootfs) { 3044 char *tmpname = kmem_alloc(MAXPATHLEN, KM_SLEEP); 3045 3046 /* 3047 * We have to play games with the name since the 3048 * pool was opened as TRYIMPORT_NAME. 3049 */ 3050 if (dsl_dsobj_to_dsname(spa_name(spa), 3051 spa->spa_bootfs, tmpname) == 0) { 3052 char *cp; 3053 char *dsname = kmem_alloc(MAXPATHLEN, KM_SLEEP); 3054 3055 cp = strchr(tmpname, '/'); 3056 if (cp == NULL) { 3057 (void) strlcpy(dsname, tmpname, 3058 MAXPATHLEN); 3059 } else { 3060 (void) snprintf(dsname, MAXPATHLEN, 3061 "%s/%s", poolname, ++cp); 3062 } 3063 VERIFY(nvlist_add_string(config, 3064 ZPOOL_CONFIG_BOOTFS, dsname) == 0); 3065 kmem_free(dsname, MAXPATHLEN); 3066 } 3067 kmem_free(tmpname, MAXPATHLEN); 3068 } 3069 3070 /* 3071 * Add the list of hot spares and level 2 cache devices. 3072 */ 3073 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); 3074 spa_add_spares(spa, config); 3075 spa_add_l2cache(spa, config); 3076 spa_config_exit(spa, SCL_CONFIG, FTAG); 3077 } 3078 3079 spa_unload(spa); 3080 spa_deactivate(spa); 3081 spa_remove(spa); 3082 mutex_exit(&spa_namespace_lock); 3083 3084 return (config); 3085 } 3086 3087 /* 3088 * Pool export/destroy 3089 * 3090 * The act of destroying or exporting a pool is very simple. We make sure there 3091 * is no more pending I/O and any references to the pool are gone. Then, we 3092 * update the pool state and sync all the labels to disk, removing the 3093 * configuration from the cache afterwards. If the 'hardforce' flag is set, then 3094 * we don't sync the labels or remove the configuration cache. 3095 */ 3096 static int 3097 spa_export_common(char *pool, int new_state, nvlist_t **oldconfig, 3098 boolean_t force, boolean_t hardforce) 3099 { 3100 spa_t *spa; 3101 3102 if (oldconfig) 3103 *oldconfig = NULL; 3104 3105 if (!(spa_mode_global & FWRITE)) 3106 return (EROFS); 3107 3108 mutex_enter(&spa_namespace_lock); 3109 if ((spa = spa_lookup(pool)) == NULL) { 3110 mutex_exit(&spa_namespace_lock); 3111 return (ENOENT); 3112 } 3113 3114 /* 3115 * Put a hold on the pool, drop the namespace lock, stop async tasks, 3116 * reacquire the namespace lock, and see if we can export. 3117 */ 3118 spa_open_ref(spa, FTAG); 3119 mutex_exit(&spa_namespace_lock); 3120 spa_async_suspend(spa); 3121 mutex_enter(&spa_namespace_lock); 3122 spa_close(spa, FTAG); 3123 3124 /* 3125 * The pool will be in core if it's openable, 3126 * in which case we can modify its state. 3127 */ 3128 if (spa->spa_state != POOL_STATE_UNINITIALIZED && spa->spa_sync_on) { 3129 /* 3130 * Objsets may be open only because they're dirty, so we 3131 * have to force it to sync before checking spa_refcnt. 3132 */ 3133 txg_wait_synced(spa->spa_dsl_pool, 0); 3134 3135 /* 3136 * A pool cannot be exported or destroyed if there are active 3137 * references. If we are resetting a pool, allow references by 3138 * fault injection handlers. 3139 */ 3140 if (!spa_refcount_zero(spa) || 3141 (spa->spa_inject_ref != 0 && 3142 new_state != POOL_STATE_UNINITIALIZED)) { 3143 spa_async_resume(spa); 3144 mutex_exit(&spa_namespace_lock); 3145 return (EBUSY); 3146 } 3147 3148 /* 3149 * A pool cannot be exported if it has an active shared spare. 3150 * This is to prevent other pools stealing the active spare 3151 * from an exported pool. At user's own will, such pool can 3152 * be forcedly exported. 3153 */ 3154 if (!force && new_state == POOL_STATE_EXPORTED && 3155 spa_has_active_shared_spare(spa)) { 3156 spa_async_resume(spa); 3157 mutex_exit(&spa_namespace_lock); 3158 return (EXDEV); 3159 } 3160 3161 /* 3162 * We want this to be reflected on every label, 3163 * so mark them all dirty. spa_unload() will do the 3164 * final sync that pushes these changes out. 3165 */ 3166 if (new_state != POOL_STATE_UNINITIALIZED && !hardforce) { 3167 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 3168 spa->spa_state = new_state; 3169 spa->spa_final_txg = spa_last_synced_txg(spa) + 1; 3170 vdev_config_dirty(spa->spa_root_vdev); 3171 spa_config_exit(spa, SCL_ALL, FTAG); 3172 } 3173 } 3174 3175 spa_event_notify(spa, NULL, ESC_ZFS_POOL_DESTROY); 3176 3177 if (spa->spa_state != POOL_STATE_UNINITIALIZED) { 3178 spa_unload(spa); 3179 spa_deactivate(spa); 3180 } 3181 3182 if (oldconfig && spa->spa_config) 3183 VERIFY(nvlist_dup(spa->spa_config, oldconfig, 0) == 0); 3184 3185 if (new_state != POOL_STATE_UNINITIALIZED) { 3186 if (!hardforce) 3187 spa_config_sync(spa, B_TRUE, B_TRUE); 3188 spa_remove(spa); 3189 } 3190 mutex_exit(&spa_namespace_lock); 3191 3192 return (0); 3193 } 3194 3195 /* 3196 * Destroy a storage pool. 3197 */ 3198 int 3199 spa_destroy(char *pool) 3200 { 3201 return (spa_export_common(pool, POOL_STATE_DESTROYED, NULL, 3202 B_FALSE, B_FALSE)); 3203 } 3204 3205 /* 3206 * Export a storage pool. 3207 */ 3208 int 3209 spa_export(char *pool, nvlist_t **oldconfig, boolean_t force, 3210 boolean_t hardforce) 3211 { 3212 return (spa_export_common(pool, POOL_STATE_EXPORTED, oldconfig, 3213 force, hardforce)); 3214 } 3215 3216 /* 3217 * Similar to spa_export(), this unloads the spa_t without actually removing it 3218 * from the namespace in any way. 3219 */ 3220 int 3221 spa_reset(char *pool) 3222 { 3223 return (spa_export_common(pool, POOL_STATE_UNINITIALIZED, NULL, 3224 B_FALSE, B_FALSE)); 3225 } 3226 3227 /* 3228 * ========================================================================== 3229 * Device manipulation 3230 * ========================================================================== 3231 */ 3232 3233 /* 3234 * Add a device to a storage pool. 3235 */ 3236 int 3237 spa_vdev_add(spa_t *spa, nvlist_t *nvroot) 3238 { 3239 uint64_t txg, id; 3240 int error; 3241 vdev_t *rvd = spa->spa_root_vdev; 3242 vdev_t *vd, *tvd; 3243 nvlist_t **spares, **l2cache; 3244 uint_t nspares, nl2cache; 3245 3246 txg = spa_vdev_enter(spa); 3247 3248 if ((error = spa_config_parse(spa, &vd, nvroot, NULL, 0, 3249 VDEV_ALLOC_ADD)) != 0) 3250 return (spa_vdev_exit(spa, NULL, txg, error)); 3251 3252 spa->spa_pending_vdev = vd; /* spa_vdev_exit() will clear this */ 3253 3254 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_SPARES, &spares, 3255 &nspares) != 0) 3256 nspares = 0; 3257 3258 if (nvlist_lookup_nvlist_array(nvroot, ZPOOL_CONFIG_L2CACHE, &l2cache, 3259 &nl2cache) != 0) 3260 nl2cache = 0; 3261 3262 if (vd->vdev_children == 0 && nspares == 0 && nl2cache == 0) 3263 return (spa_vdev_exit(spa, vd, txg, EINVAL)); 3264 3265 if (vd->vdev_children != 0 && 3266 (error = vdev_create(vd, txg, B_FALSE)) != 0) 3267 return (spa_vdev_exit(spa, vd, txg, error)); 3268 3269 /* 3270 * We must validate the spares and l2cache devices after checking the 3271 * children. Otherwise, vdev_inuse() will blindly overwrite the spare. 3272 */ 3273 if ((error = spa_validate_aux(spa, nvroot, txg, VDEV_ALLOC_ADD)) != 0) 3274 return (spa_vdev_exit(spa, vd, txg, error)); 3275 3276 /* 3277 * Transfer each new top-level vdev from vd to rvd. 3278 */ 3279 for (int c = 0; c < vd->vdev_children; c++) { 3280 3281 /* 3282 * Set the vdev id to the first hole, if one exists. 3283 */ 3284 for (id = 0; id < rvd->vdev_children; id++) { 3285 if (rvd->vdev_child[id]->vdev_ishole) { 3286 vdev_free(rvd->vdev_child[id]); 3287 break; 3288 } 3289 } 3290 tvd = vd->vdev_child[c]; 3291 vdev_remove_child(vd, tvd); 3292 tvd->vdev_id = id; 3293 vdev_add_child(rvd, tvd); 3294 vdev_config_dirty(tvd); 3295 } 3296 3297 if (nspares != 0) { 3298 spa_set_aux_vdevs(&spa->spa_spares, spares, nspares, 3299 ZPOOL_CONFIG_SPARES); 3300 spa_load_spares(spa); 3301 spa->spa_spares.sav_sync = B_TRUE; 3302 } 3303 3304 if (nl2cache != 0) { 3305 spa_set_aux_vdevs(&spa->spa_l2cache, l2cache, nl2cache, 3306 ZPOOL_CONFIG_L2CACHE); 3307 spa_load_l2cache(spa); 3308 spa->spa_l2cache.sav_sync = B_TRUE; 3309 } 3310 3311 /* 3312 * We have to be careful when adding new vdevs to an existing pool. 3313 * If other threads start allocating from these vdevs before we 3314 * sync the config cache, and we lose power, then upon reboot we may 3315 * fail to open the pool because there are DVAs that the config cache 3316 * can't translate. Therefore, we first add the vdevs without 3317 * initializing metaslabs; sync the config cache (via spa_vdev_exit()); 3318 * and then let spa_config_update() initialize the new metaslabs. 3319 * 3320 * spa_load() checks for added-but-not-initialized vdevs, so that 3321 * if we lose power at any point in this sequence, the remaining 3322 * steps will be completed the next time we load the pool. 3323 */ 3324 (void) spa_vdev_exit(spa, vd, txg, 0); 3325 3326 mutex_enter(&spa_namespace_lock); 3327 spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); 3328 mutex_exit(&spa_namespace_lock); 3329 3330 return (0); 3331 } 3332 3333 /* 3334 * Attach a device to a mirror. The arguments are the path to any device 3335 * in the mirror, and the nvroot for the new device. If the path specifies 3336 * a device that is not mirrored, we automatically insert the mirror vdev. 3337 * 3338 * If 'replacing' is specified, the new device is intended to replace the 3339 * existing device; in this case the two devices are made into their own 3340 * mirror using the 'replacing' vdev, which is functionally identical to 3341 * the mirror vdev (it actually reuses all the same ops) but has a few 3342 * extra rules: you can't attach to it after it's been created, and upon 3343 * completion of resilvering, the first disk (the one being replaced) 3344 * is automatically detached. 3345 */ 3346 int 3347 spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing) 3348 { 3349 uint64_t txg, open_txg; 3350 vdev_t *rvd = spa->spa_root_vdev; 3351 vdev_t *oldvd, *newvd, *newrootvd, *pvd, *tvd; 3352 vdev_ops_t *pvops; 3353 char *oldvdpath, *newvdpath; 3354 int newvd_isspare; 3355 int error; 3356 3357 txg = spa_vdev_enter(spa); 3358 3359 oldvd = spa_lookup_by_guid(spa, guid, B_FALSE); 3360 3361 if (oldvd == NULL) 3362 return (spa_vdev_exit(spa, NULL, txg, ENODEV)); 3363 3364 if (!oldvd->vdev_ops->vdev_op_leaf) 3365 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 3366 3367 pvd = oldvd->vdev_parent; 3368 3369 if ((error = spa_config_parse(spa, &newrootvd, nvroot, NULL, 0, 3370 VDEV_ALLOC_ADD)) != 0) 3371 return (spa_vdev_exit(spa, NULL, txg, EINVAL)); 3372 3373 if (newrootvd->vdev_children != 1) 3374 return (spa_vdev_exit(spa, newrootvd, txg, EINVAL)); 3375 3376 newvd = newrootvd->vdev_child[0]; 3377 3378 if (!newvd->vdev_ops->vdev_op_leaf) 3379 return (spa_vdev_exit(spa, newrootvd, txg, EINVAL)); 3380 3381 if ((error = vdev_create(newrootvd, txg, replacing)) != 0) 3382 return (spa_vdev_exit(spa, newrootvd, txg, error)); 3383 3384 /* 3385 * Spares can't replace logs 3386 */ 3387 if (oldvd->vdev_top->vdev_islog && newvd->vdev_isspare) 3388 return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); 3389 3390 if (!replacing) { 3391 /* 3392 * For attach, the only allowable parent is a mirror or the root 3393 * vdev. 3394 */ 3395 if (pvd->vdev_ops != &vdev_mirror_ops && 3396 pvd->vdev_ops != &vdev_root_ops) 3397 return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); 3398 3399 pvops = &vdev_mirror_ops; 3400 } else { 3401 /* 3402 * Active hot spares can only be replaced by inactive hot 3403 * spares. 3404 */ 3405 if (pvd->vdev_ops == &vdev_spare_ops && 3406 pvd->vdev_child[1] == oldvd && 3407 !spa_has_spare(spa, newvd->vdev_guid)) 3408 return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); 3409 3410 /* 3411 * If the source is a hot spare, and the parent isn't already a 3412 * spare, then we want to create a new hot spare. Otherwise, we 3413 * want to create a replacing vdev. The user is not allowed to 3414 * attach to a spared vdev child unless the 'isspare' state is 3415 * the same (spare replaces spare, non-spare replaces 3416 * non-spare). 3417 */ 3418 if (pvd->vdev_ops == &vdev_replacing_ops) 3419 return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); 3420 else if (pvd->vdev_ops == &vdev_spare_ops && 3421 newvd->vdev_isspare != oldvd->vdev_isspare) 3422 return (spa_vdev_exit(spa, newrootvd, txg, ENOTSUP)); 3423 else if (pvd->vdev_ops != &vdev_spare_ops && 3424 newvd->vdev_isspare) 3425 pvops = &vdev_spare_ops; 3426 else 3427 pvops = &vdev_replacing_ops; 3428 } 3429 3430 /* 3431 * Make sure the new device is big enough. 3432 */ 3433 if (newvd->vdev_asize < vdev_get_min_asize(oldvd)) 3434 return (spa_vdev_exit(spa, newrootvd, txg, EOVERFLOW)); 3435 3436 /* 3437 * The new device cannot have a higher alignment requirement 3438 * than the top-level vdev. 3439 */ 3440 if (newvd->vdev_ashift > oldvd->vdev_top->vdev_ashift) 3441 return (spa_vdev_exit(spa, newrootvd, txg, EDOM)); 3442 3443 /* 3444 * If this is an in-place replacement, update oldvd's path and devid 3445 * to make it distinguishable from newvd, and unopenable from now on. 3446 */ 3447 if (strcmp(oldvd->vdev_path, newvd->vdev_path) == 0) { 3448 spa_strfree(oldvd->vdev_path); 3449 oldvd->vdev_path = kmem_alloc(strlen(newvd->vdev_path) + 5, 3450 KM_SLEEP); 3451 (void) sprintf(oldvd->vdev_path, "%s/%s", 3452 newvd->vdev_path, "old"); 3453 if (oldvd->vdev_devid != NULL) { 3454 spa_strfree(oldvd->vdev_devid); 3455 oldvd->vdev_devid = NULL; 3456 } 3457 } 3458 3459 /* 3460 * If the parent is not a mirror, or if we're replacing, insert the new 3461 * mirror/replacing/spare vdev above oldvd. 3462 */ 3463 if (pvd->vdev_ops != pvops) 3464 pvd = vdev_add_parent(oldvd, pvops); 3465 3466 ASSERT(pvd->vdev_top->vdev_parent == rvd); 3467 ASSERT(pvd->vdev_ops == pvops); 3468 ASSERT(oldvd->vdev_parent == pvd); 3469 3470 /* 3471 * Extract the new device from its root and add it to pvd. 3472 */ 3473 vdev_remove_child(newrootvd, newvd); 3474 newvd->vdev_id = pvd->vdev_children; 3475 newvd->vdev_crtxg = oldvd->vdev_crtxg; 3476 vdev_add_child(pvd, newvd); 3477 3478 tvd = newvd->vdev_top; 3479 ASSERT(pvd->vdev_top == tvd); 3480 ASSERT(tvd->vdev_parent == rvd); 3481 3482 vdev_config_dirty(tvd); 3483 3484 /* 3485 * Set newvd's DTL to [TXG_INITIAL, open_txg]. It will propagate 3486 * upward when spa_vdev_exit() calls vdev_dtl_reassess(). 3487 */ 3488 open_txg = txg + TXG_CONCURRENT_STATES - 1; 3489 3490 vdev_dtl_dirty(newvd, DTL_MISSING, 3491 TXG_INITIAL, open_txg - TXG_INITIAL + 1); 3492 3493 if (newvd->vdev_isspare) { 3494 spa_spare_activate(newvd); 3495 spa_event_notify(spa, newvd, ESC_ZFS_VDEV_SPARE); 3496 } 3497 3498 oldvdpath = spa_strdup(oldvd->vdev_path); 3499 newvdpath = spa_strdup(newvd->vdev_path); 3500 newvd_isspare = newvd->vdev_isspare; 3501 3502 /* 3503 * Mark newvd's DTL dirty in this txg. 3504 */ 3505 vdev_dirty(tvd, VDD_DTL, newvd, txg); 3506 3507 (void) spa_vdev_exit(spa, newrootvd, open_txg, 0); 3508 3509 spa_history_internal_log(LOG_POOL_VDEV_ATTACH, spa, NULL, 3510 CRED(), "%s vdev=%s %s vdev=%s", 3511 replacing && newvd_isspare ? "spare in" : 3512 replacing ? "replace" : "attach", newvdpath, 3513 replacing ? "for" : "to", oldvdpath); 3514 3515 spa_strfree(oldvdpath); 3516 spa_strfree(newvdpath); 3517 3518 /* 3519 * Kick off a resilver to update newvd. 3520 */ 3521 VERIFY3U(spa_scrub(spa, POOL_SCRUB_RESILVER), ==, 0); 3522 3523 return (0); 3524 } 3525 3526 /* 3527 * Detach a device from a mirror or replacing vdev. 3528 * If 'replace_done' is specified, only detach if the parent 3529 * is a replacing vdev. 3530 */ 3531 int 3532 spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid, int replace_done) 3533 { 3534 uint64_t txg; 3535 int error; 3536 vdev_t *rvd = spa->spa_root_vdev; 3537 vdev_t *vd, *pvd, *cvd, *tvd; 3538 boolean_t unspare = B_FALSE; 3539 uint64_t unspare_guid; 3540 size_t len; 3541 3542 txg = spa_vdev_enter(spa); 3543 3544 vd = spa_lookup_by_guid(spa, guid, B_FALSE); 3545 3546 if (vd == NULL) 3547 return (spa_vdev_exit(spa, NULL, txg, ENODEV)); 3548 3549 if (!vd->vdev_ops->vdev_op_leaf) 3550 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 3551 3552 pvd = vd->vdev_parent; 3553 3554 /* 3555 * If the parent/child relationship is not as expected, don't do it. 3556 * Consider M(A,R(B,C)) -- that is, a mirror of A with a replacing 3557 * vdev that's replacing B with C. The user's intent in replacing 3558 * is to go from M(A,B) to M(A,C). If the user decides to cancel 3559 * the replace by detaching C, the expected behavior is to end up 3560 * M(A,B). But suppose that right after deciding to detach C, 3561 * the replacement of B completes. We would have M(A,C), and then 3562 * ask to detach C, which would leave us with just A -- not what 3563 * the user wanted. To prevent this, we make sure that the 3564 * parent/child relationship hasn't changed -- in this example, 3565 * that C's parent is still the replacing vdev R. 3566 */ 3567 if (pvd->vdev_guid != pguid && pguid != 0) 3568 return (spa_vdev_exit(spa, NULL, txg, EBUSY)); 3569 3570 /* 3571 * If replace_done is specified, only remove this device if it's 3572 * the first child of a replacing vdev. For the 'spare' vdev, either 3573 * disk can be removed. 3574 */ 3575 if (replace_done) { 3576 if (pvd->vdev_ops == &vdev_replacing_ops) { 3577 if (vd->vdev_id != 0) 3578 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 3579 } else if (pvd->vdev_ops != &vdev_spare_ops) { 3580 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 3581 } 3582 } 3583 3584 ASSERT(pvd->vdev_ops != &vdev_spare_ops || 3585 spa_version(spa) >= SPA_VERSION_SPARES); 3586 3587 /* 3588 * Only mirror, replacing, and spare vdevs support detach. 3589 */ 3590 if (pvd->vdev_ops != &vdev_replacing_ops && 3591 pvd->vdev_ops != &vdev_mirror_ops && 3592 pvd->vdev_ops != &vdev_spare_ops) 3593 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 3594 3595 /* 3596 * If this device has the only valid copy of some data, 3597 * we cannot safely detach it. 3598 */ 3599 if (vdev_dtl_required(vd)) 3600 return (spa_vdev_exit(spa, NULL, txg, EBUSY)); 3601 3602 ASSERT(pvd->vdev_children >= 2); 3603 3604 /* 3605 * If we are detaching the second disk from a replacing vdev, then 3606 * check to see if we changed the original vdev's path to have "/old" 3607 * at the end in spa_vdev_attach(). If so, undo that change now. 3608 */ 3609 if (pvd->vdev_ops == &vdev_replacing_ops && vd->vdev_id == 1 && 3610 pvd->vdev_child[0]->vdev_path != NULL && 3611 pvd->vdev_child[1]->vdev_path != NULL) { 3612 ASSERT(pvd->vdev_child[1] == vd); 3613 cvd = pvd->vdev_child[0]; 3614 len = strlen(vd->vdev_path); 3615 if (strncmp(cvd->vdev_path, vd->vdev_path, len) == 0 && 3616 strcmp(cvd->vdev_path + len, "/old") == 0) { 3617 spa_strfree(cvd->vdev_path); 3618 cvd->vdev_path = spa_strdup(vd->vdev_path); 3619 } 3620 } 3621 3622 /* 3623 * If we are detaching the original disk from a spare, then it implies 3624 * that the spare should become a real disk, and be removed from the 3625 * active spare list for the pool. 3626 */ 3627 if (pvd->vdev_ops == &vdev_spare_ops && 3628 vd->vdev_id == 0 && pvd->vdev_child[1]->vdev_isspare) 3629 unspare = B_TRUE; 3630 3631 /* 3632 * Erase the disk labels so the disk can be used for other things. 3633 * This must be done after all other error cases are handled, 3634 * but before we disembowel vd (so we can still do I/O to it). 3635 * But if we can't do it, don't treat the error as fatal -- 3636 * it may be that the unwritability of the disk is the reason 3637 * it's being detached! 3638 */ 3639 error = vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); 3640 3641 /* 3642 * Remove vd from its parent and compact the parent's children. 3643 */ 3644 vdev_remove_child(pvd, vd); 3645 vdev_compact_children(pvd); 3646 3647 /* 3648 * Remember one of the remaining children so we can get tvd below. 3649 */ 3650 cvd = pvd->vdev_child[0]; 3651 3652 /* 3653 * If we need to remove the remaining child from the list of hot spares, 3654 * do it now, marking the vdev as no longer a spare in the process. 3655 * We must do this before vdev_remove_parent(), because that can 3656 * change the GUID if it creates a new toplevel GUID. For a similar 3657 * reason, we must remove the spare now, in the same txg as the detach; 3658 * otherwise someone could attach a new sibling, change the GUID, and 3659 * the subsequent attempt to spa_vdev_remove(unspare_guid) would fail. 3660 */ 3661 if (unspare) { 3662 ASSERT(cvd->vdev_isspare); 3663 spa_spare_remove(cvd); 3664 unspare_guid = cvd->vdev_guid; 3665 (void) spa_vdev_remove(spa, unspare_guid, B_TRUE); 3666 } 3667 3668 /* 3669 * If the parent mirror/replacing vdev only has one child, 3670 * the parent is no longer needed. Remove it from the tree. 3671 */ 3672 if (pvd->vdev_children == 1) 3673 vdev_remove_parent(cvd); 3674 3675 /* 3676 * We don't set tvd until now because the parent we just removed 3677 * may have been the previous top-level vdev. 3678 */ 3679 tvd = cvd->vdev_top; 3680 ASSERT(tvd->vdev_parent == rvd); 3681 3682 /* 3683 * Reevaluate the parent vdev state. 3684 */ 3685 vdev_propagate_state(cvd); 3686 3687 /* 3688 * If the 'autoexpand' property is set on the pool then automatically 3689 * try to expand the size of the pool. For example if the device we 3690 * just detached was smaller than the others, it may be possible to 3691 * add metaslabs (i.e. grow the pool). We need to reopen the vdev 3692 * first so that we can obtain the updated sizes of the leaf vdevs. 3693 */ 3694 if (spa->spa_autoexpand) { 3695 vdev_reopen(tvd); 3696 vdev_expand(tvd, txg); 3697 } 3698 3699 vdev_config_dirty(tvd); 3700 3701 /* 3702 * Mark vd's DTL as dirty in this txg. vdev_dtl_sync() will see that 3703 * vd->vdev_detached is set and free vd's DTL object in syncing context. 3704 * But first make sure we're not on any *other* txg's DTL list, to 3705 * prevent vd from being accessed after it's freed. 3706 */ 3707 for (int t = 0; t < TXG_SIZE; t++) 3708 (void) txg_list_remove_this(&tvd->vdev_dtl_list, vd, t); 3709 vd->vdev_detached = B_TRUE; 3710 vdev_dirty(tvd, VDD_DTL, vd, txg); 3711 3712 spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE); 3713 3714 error = spa_vdev_exit(spa, vd, txg, 0); 3715 3716 /* 3717 * If this was the removal of the original device in a hot spare vdev, 3718 * then we want to go through and remove the device from the hot spare 3719 * list of every other pool. 3720 */ 3721 if (unspare) { 3722 spa_t *myspa = spa; 3723 spa = NULL; 3724 mutex_enter(&spa_namespace_lock); 3725 while ((spa = spa_next(spa)) != NULL) { 3726 if (spa->spa_state != POOL_STATE_ACTIVE) 3727 continue; 3728 if (spa == myspa) 3729 continue; 3730 spa_open_ref(spa, FTAG); 3731 mutex_exit(&spa_namespace_lock); 3732 (void) spa_vdev_remove(spa, unspare_guid, B_TRUE); 3733 mutex_enter(&spa_namespace_lock); 3734 spa_close(spa, FTAG); 3735 } 3736 mutex_exit(&spa_namespace_lock); 3737 } 3738 3739 return (error); 3740 } 3741 3742 static nvlist_t * 3743 spa_nvlist_lookup_by_guid(nvlist_t **nvpp, int count, uint64_t target_guid) 3744 { 3745 for (int i = 0; i < count; i++) { 3746 uint64_t guid; 3747 3748 VERIFY(nvlist_lookup_uint64(nvpp[i], ZPOOL_CONFIG_GUID, 3749 &guid) == 0); 3750 3751 if (guid == target_guid) 3752 return (nvpp[i]); 3753 } 3754 3755 return (NULL); 3756 } 3757 3758 static void 3759 spa_vdev_remove_aux(nvlist_t *config, char *name, nvlist_t **dev, int count, 3760 nvlist_t *dev_to_remove) 3761 { 3762 nvlist_t **newdev = NULL; 3763 3764 if (count > 1) 3765 newdev = kmem_alloc((count - 1) * sizeof (void *), KM_SLEEP); 3766 3767 for (int i = 0, j = 0; i < count; i++) { 3768 if (dev[i] == dev_to_remove) 3769 continue; 3770 VERIFY(nvlist_dup(dev[i], &newdev[j++], KM_SLEEP) == 0); 3771 } 3772 3773 VERIFY(nvlist_remove(config, name, DATA_TYPE_NVLIST_ARRAY) == 0); 3774 VERIFY(nvlist_add_nvlist_array(config, name, newdev, count - 1) == 0); 3775 3776 for (int i = 0; i < count - 1; i++) 3777 nvlist_free(newdev[i]); 3778 3779 if (count > 1) 3780 kmem_free(newdev, (count - 1) * sizeof (void *)); 3781 } 3782 3783 /* 3784 * Removing a device from the vdev namespace requires several steps 3785 * and can take a significant amount of time. As a result we use 3786 * the spa_vdev_config_[enter/exit] functions which allow us to 3787 * grab and release the spa_config_lock while still holding the namespace 3788 * lock. During each step the configuration is synced out. 3789 */ 3790 3791 /* 3792 * Initial phase of device removal - stop future allocations from this device. 3793 */ 3794 void 3795 spa_vdev_remove_start(spa_t *spa, vdev_t *vd) 3796 { 3797 metaslab_group_t *mg = vd->vdev_mg; 3798 3799 ASSERT(MUTEX_HELD(&spa_namespace_lock)); 3800 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 3801 ASSERT(vd == vd->vdev_top); 3802 3803 /* 3804 * Remove our vdev from the allocatable vdevs 3805 */ 3806 if (mg) 3807 metaslab_class_remove(mg->mg_class, mg); 3808 } 3809 3810 /* 3811 * Evacuate the device. 3812 */ 3813 int 3814 spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) 3815 { 3816 uint64_t txg; 3817 int error; 3818 3819 ASSERT(MUTEX_HELD(&spa_namespace_lock)); 3820 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); 3821 ASSERT(vd == vd->vdev_top); 3822 3823 /* 3824 * Evacuate the device. We don't hold the config lock as writer 3825 * since we need to do I/O but we do keep the 3826 * spa_namespace_lock held. Once this completes the device 3827 * should no longer have any blocks allocated on it. 3828 */ 3829 if (vd->vdev_islog) { 3830 /* 3831 * Evacuate the device. 3832 */ 3833 if (error = dmu_objset_find(spa_name(spa), 3834 zil_vdev_offline, NULL, DS_FIND_CHILDREN)) { 3835 uint64_t txg; 3836 3837 txg = spa_vdev_config_enter(spa); 3838 metaslab_class_add(spa->spa_log_class, 3839 vd->vdev_mg); 3840 return (spa_vdev_exit(spa, NULL, txg, error)); 3841 } 3842 txg_wait_synced(spa_get_dsl(spa), 0); 3843 } 3844 3845 /* 3846 * Remove any remaining MOS metadata associated with the device. 3847 */ 3848 txg = spa_vdev_config_enter(spa); 3849 vd->vdev_removing = B_TRUE; 3850 vdev_dirty(vd, 0, NULL, txg); 3851 vdev_config_dirty(vd); 3852 spa_vdev_config_exit(spa, NULL, txg, 0, FTAG); 3853 3854 return (0); 3855 } 3856 3857 /* 3858 * Complete the removal by cleaning up the namespace. 3859 */ 3860 void 3861 spa_vdev_remove_done(spa_t *spa, vdev_t *vd) 3862 { 3863 vdev_t *rvd = spa->spa_root_vdev; 3864 metaslab_group_t *mg = vd->vdev_mg; 3865 uint64_t id = vd->vdev_id; 3866 boolean_t last_vdev = (id == (rvd->vdev_children - 1)); 3867 3868 ASSERT(MUTEX_HELD(&spa_namespace_lock)); 3869 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == SCL_ALL); 3870 ASSERT(vd == vd->vdev_top); 3871 3872 (void) vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); 3873 3874 if (list_link_active(&vd->vdev_state_dirty_node)) 3875 vdev_state_clean(vd); 3876 if (list_link_active(&vd->vdev_config_dirty_node)) 3877 vdev_config_clean(vd); 3878 3879 vdev_free(vd); 3880 3881 /* 3882 * It's possible that another thread is trying todo a spa_vdev_add() 3883 * at the same time we're trying remove it. As a result the 3884 * added vdev may not have initialized its metaslabs yet. 3885 */ 3886 if (mg != NULL) 3887 metaslab_group_destroy(mg); 3888 3889 if (last_vdev) { 3890 vdev_compact_children(rvd); 3891 } else { 3892 vd = vdev_alloc_common(spa, id, 0, &vdev_hole_ops); 3893 vdev_add_child(rvd, vd); 3894 } 3895 vdev_config_dirty(rvd); 3896 3897 /* 3898 * Reassess the health of our root vdev. 3899 */ 3900 vdev_reopen(rvd); 3901 } 3902 3903 /* 3904 * Remove a device from the pool. Currently, this supports removing only hot 3905 * spares, slogs, and level 2 ARC devices. 3906 */ 3907 int 3908 spa_vdev_remove(spa_t *spa, uint64_t guid, boolean_t unspare) 3909 { 3910 vdev_t *vd; 3911 nvlist_t **spares, **l2cache, *nv; 3912 uint64_t txg = 0; 3913 uint_t nspares, nl2cache; 3914 int error = 0; 3915 boolean_t locked = MUTEX_HELD(&spa_namespace_lock); 3916 3917 if (!locked) 3918 txg = spa_vdev_enter(spa); 3919 3920 vd = spa_lookup_by_guid(spa, guid, B_FALSE); 3921 3922 if (spa->spa_spares.sav_vdevs != NULL && 3923 nvlist_lookup_nvlist_array(spa->spa_spares.sav_config, 3924 ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0 && 3925 (nv = spa_nvlist_lookup_by_guid(spares, nspares, guid)) != NULL) { 3926 /* 3927 * Only remove the hot spare if it's not currently in use 3928 * in this pool. 3929 */ 3930 if (vd == NULL || unspare) { 3931 spa_vdev_remove_aux(spa->spa_spares.sav_config, 3932 ZPOOL_CONFIG_SPARES, spares, nspares, nv); 3933 spa_load_spares(spa); 3934 spa->spa_spares.sav_sync = B_TRUE; 3935 } else { 3936 error = EBUSY; 3937 } 3938 } else if (spa->spa_l2cache.sav_vdevs != NULL && 3939 nvlist_lookup_nvlist_array(spa->spa_l2cache.sav_config, 3940 ZPOOL_CONFIG_L2CACHE, &l2cache, &nl2cache) == 0 && 3941 (nv = spa_nvlist_lookup_by_guid(l2cache, nl2cache, guid)) != NULL) { 3942 /* 3943 * Cache devices can always be removed. 3944 */ 3945 spa_vdev_remove_aux(spa->spa_l2cache.sav_config, 3946 ZPOOL_CONFIG_L2CACHE, l2cache, nl2cache, nv); 3947 spa_load_l2cache(spa); 3948 spa->spa_l2cache.sav_sync = B_TRUE; 3949 } else if (vd != NULL && vd->vdev_islog) { 3950 ASSERT(!locked); 3951 ASSERT(vd == vd->vdev_top); 3952 3953 /* 3954 * XXX - Once we have bp-rewrite this should 3955 * become the common case. 3956 */ 3957 3958 /* 3959 * 1. Stop allocations 3960 * 2. Evacuate the device (i.e. kill off stubby and 3961 * metadata) and wait for it to complete (i.e. sync). 3962 * 3. Cleanup the vdev namespace. 3963 */ 3964 spa_vdev_remove_start(spa, vd); 3965 3966 /* 3967 * Wait for the youngest allocations and frees to sync, 3968 * and then wait for the deferral of those frees to finish. 3969 */ 3970 spa_vdev_config_exit(spa, NULL, 3971 txg + TXG_CONCURRENT_STATES + TXG_DEFER_SIZE, 0, FTAG); 3972 3973 if ((error = spa_vdev_remove_evacuate(spa, vd)) != 0) 3974 return (error); 3975 txg = spa_vdev_config_enter(spa); 3976 3977 spa_vdev_remove_done(spa, vd); 3978 3979 } else if (vd != NULL) { 3980 /* 3981 * Normal vdevs cannot be removed (yet). 3982 */ 3983 error = ENOTSUP; 3984 } else { 3985 /* 3986 * There is no vdev of any kind with the specified guid. 3987 */ 3988 error = ENOENT; 3989 } 3990 3991 if (!locked) 3992 return (spa_vdev_exit(spa, NULL, txg, error)); 3993 3994 return (error); 3995 } 3996 3997 /* 3998 * Find any device that's done replacing, or a vdev marked 'unspare' that's 3999 * current spared, so we can detach it. 4000 */ 4001 static vdev_t * 4002 spa_vdev_resilver_done_hunt(vdev_t *vd) 4003 { 4004 vdev_t *newvd, *oldvd; 4005 4006 for (int c = 0; c < vd->vdev_children; c++) { 4007 oldvd = spa_vdev_resilver_done_hunt(vd->vdev_child[c]); 4008 if (oldvd != NULL) 4009 return (oldvd); 4010 } 4011 4012 /* 4013 * Check for a completed replacement. 4014 */ 4015 if (vd->vdev_ops == &vdev_replacing_ops && vd->vdev_children == 2) { 4016 oldvd = vd->vdev_child[0]; 4017 newvd = vd->vdev_child[1]; 4018 4019 if (vdev_dtl_empty(newvd, DTL_MISSING) && 4020 !vdev_dtl_required(oldvd)) 4021 return (oldvd); 4022 } 4023 4024 /* 4025 * Check for a completed resilver with the 'unspare' flag set. 4026 */ 4027 if (vd->vdev_ops == &vdev_spare_ops && vd->vdev_children == 2) { 4028 newvd = vd->vdev_child[0]; 4029 oldvd = vd->vdev_child[1]; 4030 4031 if (newvd->vdev_unspare && 4032 vdev_dtl_empty(newvd, DTL_MISSING) && 4033 !vdev_dtl_required(oldvd)) { 4034 newvd->vdev_unspare = 0; 4035 return (oldvd); 4036 } 4037 } 4038 4039 return (NULL); 4040 } 4041 4042 static void 4043 spa_vdev_resilver_done(spa_t *spa) 4044 { 4045 vdev_t *vd, *pvd, *ppvd; 4046 uint64_t guid, sguid, pguid, ppguid; 4047 4048 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 4049 4050 while ((vd = spa_vdev_resilver_done_hunt(spa->spa_root_vdev)) != NULL) { 4051 pvd = vd->vdev_parent; 4052 ppvd = pvd->vdev_parent; 4053 guid = vd->vdev_guid; 4054 pguid = pvd->vdev_guid; 4055 ppguid = ppvd->vdev_guid; 4056 sguid = 0; 4057 /* 4058 * If we have just finished replacing a hot spared device, then 4059 * we need to detach the parent's first child (the original hot 4060 * spare) as well. 4061 */ 4062 if (ppvd->vdev_ops == &vdev_spare_ops && pvd->vdev_id == 0) { 4063 ASSERT(pvd->vdev_ops == &vdev_replacing_ops); 4064 ASSERT(ppvd->vdev_children == 2); 4065 sguid = ppvd->vdev_child[1]->vdev_guid; 4066 } 4067 spa_config_exit(spa, SCL_ALL, FTAG); 4068 if (spa_vdev_detach(spa, guid, pguid, B_TRUE) != 0) 4069 return; 4070 if (sguid && spa_vdev_detach(spa, sguid, ppguid, B_TRUE) != 0) 4071 return; 4072 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 4073 } 4074 4075 spa_config_exit(spa, SCL_ALL, FTAG); 4076 } 4077 4078 /* 4079 * Update the stored path or FRU for this vdev. Dirty the vdev configuration, 4080 * relying on spa_vdev_enter/exit() to synchronize the labels and cache. 4081 */ 4082 int 4083 spa_vdev_set_common(spa_t *spa, uint64_t guid, const char *value, 4084 boolean_t ispath) 4085 { 4086 vdev_t *vd; 4087 uint64_t txg; 4088 4089 txg = spa_vdev_enter(spa); 4090 4091 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) 4092 return (spa_vdev_exit(spa, NULL, txg, ENOENT)); 4093 4094 if (!vd->vdev_ops->vdev_op_leaf) 4095 return (spa_vdev_exit(spa, NULL, txg, ENOTSUP)); 4096 4097 if (ispath) { 4098 spa_strfree(vd->vdev_path); 4099 vd->vdev_path = spa_strdup(value); 4100 } else { 4101 if (vd->vdev_fru != NULL) 4102 spa_strfree(vd->vdev_fru); 4103 vd->vdev_fru = spa_strdup(value); 4104 } 4105 4106 vdev_config_dirty(vd->vdev_top); 4107 4108 return (spa_vdev_exit(spa, NULL, txg, 0)); 4109 } 4110 4111 int 4112 spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath) 4113 { 4114 return (spa_vdev_set_common(spa, guid, newpath, B_TRUE)); 4115 } 4116 4117 int 4118 spa_vdev_setfru(spa_t *spa, uint64_t guid, const char *newfru) 4119 { 4120 return (spa_vdev_set_common(spa, guid, newfru, B_FALSE)); 4121 } 4122 4123 /* 4124 * ========================================================================== 4125 * SPA Scrubbing 4126 * ========================================================================== 4127 */ 4128 4129 int 4130 spa_scrub(spa_t *spa, pool_scrub_type_t type) 4131 { 4132 ASSERT(spa_config_held(spa, SCL_ALL, RW_WRITER) == 0); 4133 4134 if ((uint_t)type >= POOL_SCRUB_TYPES) 4135 return (ENOTSUP); 4136 4137 /* 4138 * If a resilver was requested, but there is no DTL on a 4139 * writeable leaf device, we have nothing to do. 4140 */ 4141 if (type == POOL_SCRUB_RESILVER && 4142 !vdev_resilver_needed(spa->spa_root_vdev, NULL, NULL)) { 4143 spa_async_request(spa, SPA_ASYNC_RESILVER_DONE); 4144 return (0); 4145 } 4146 4147 if (type == POOL_SCRUB_EVERYTHING && 4148 spa->spa_dsl_pool->dp_scrub_func != SCRUB_FUNC_NONE && 4149 spa->spa_dsl_pool->dp_scrub_isresilver) 4150 return (EBUSY); 4151 4152 if (type == POOL_SCRUB_EVERYTHING || type == POOL_SCRUB_RESILVER) { 4153 return (dsl_pool_scrub_clean(spa->spa_dsl_pool)); 4154 } else if (type == POOL_SCRUB_NONE) { 4155 return (dsl_pool_scrub_cancel(spa->spa_dsl_pool)); 4156 } else { 4157 return (EINVAL); 4158 } 4159 } 4160 4161 /* 4162 * ========================================================================== 4163 * SPA async task processing 4164 * ========================================================================== 4165 */ 4166 4167 static void 4168 spa_async_remove(spa_t *spa, vdev_t *vd) 4169 { 4170 if (vd->vdev_remove_wanted) { 4171 vd->vdev_remove_wanted = 0; 4172 vdev_set_state(vd, B_FALSE, VDEV_STATE_REMOVED, VDEV_AUX_NONE); 4173 4174 /* 4175 * We want to clear the stats, but we don't want to do a full 4176 * vdev_clear() as that will cause us to throw away 4177 * degraded/faulted state as well as attempt to reopen the 4178 * device, all of which is a waste. 4179 */ 4180 vd->vdev_stat.vs_read_errors = 0; 4181 vd->vdev_stat.vs_write_errors = 0; 4182 vd->vdev_stat.vs_checksum_errors = 0; 4183 4184 vdev_state_dirty(vd->vdev_top); 4185 } 4186 4187 for (int c = 0; c < vd->vdev_children; c++) 4188 spa_async_remove(spa, vd->vdev_child[c]); 4189 } 4190 4191 static void 4192 spa_async_probe(spa_t *spa, vdev_t *vd) 4193 { 4194 if (vd->vdev_probe_wanted) { 4195 vd->vdev_probe_wanted = 0; 4196 vdev_reopen(vd); /* vdev_open() does the actual probe */ 4197 } 4198 4199 for (int c = 0; c < vd->vdev_children; c++) 4200 spa_async_probe(spa, vd->vdev_child[c]); 4201 } 4202 4203 static void 4204 spa_async_autoexpand(spa_t *spa, vdev_t *vd) 4205 { 4206 sysevent_id_t eid; 4207 nvlist_t *attr; 4208 char *physpath; 4209 4210 if (!spa->spa_autoexpand) 4211 return; 4212 4213 for (int c = 0; c < vd->vdev_children; c++) { 4214 vdev_t *cvd = vd->vdev_child[c]; 4215 spa_async_autoexpand(spa, cvd); 4216 } 4217 4218 if (!vd->vdev_ops->vdev_op_leaf || vd->vdev_physpath == NULL) 4219 return; 4220 4221 physpath = kmem_zalloc(MAXPATHLEN, KM_SLEEP); 4222 (void) snprintf(physpath, MAXPATHLEN, "/devices%s", vd->vdev_physpath); 4223 4224 VERIFY(nvlist_alloc(&attr, NV_UNIQUE_NAME, KM_SLEEP) == 0); 4225 VERIFY(nvlist_add_string(attr, DEV_PHYS_PATH, physpath) == 0); 4226 4227 (void) ddi_log_sysevent(zfs_dip, SUNW_VENDOR, EC_DEV_STATUS, 4228 ESC_DEV_DLE, attr, &eid, DDI_SLEEP); 4229 4230 nvlist_free(attr); 4231 kmem_free(physpath, MAXPATHLEN); 4232 } 4233 4234 static void 4235 spa_async_thread(spa_t *spa) 4236 { 4237 int tasks; 4238 4239 ASSERT(spa->spa_sync_on); 4240 4241 mutex_enter(&spa->spa_async_lock); 4242 tasks = spa->spa_async_tasks; 4243 spa->spa_async_tasks = 0; 4244 mutex_exit(&spa->spa_async_lock); 4245 4246 /* 4247 * See if the config needs to be updated. 4248 */ 4249 if (tasks & SPA_ASYNC_CONFIG_UPDATE) { 4250 uint64_t old_space, new_space; 4251 4252 mutex_enter(&spa_namespace_lock); 4253 old_space = metaslab_class_get_space(spa_normal_class(spa)); 4254 spa_config_update(spa, SPA_CONFIG_UPDATE_POOL); 4255 new_space = metaslab_class_get_space(spa_normal_class(spa)); 4256 mutex_exit(&spa_namespace_lock); 4257 4258 /* 4259 * If the pool grew as a result of the config update, 4260 * then log an internal history event. 4261 */ 4262 if (new_space != old_space) { 4263 spa_history_internal_log(LOG_POOL_VDEV_ONLINE, 4264 spa, NULL, CRED(), 4265 "pool '%s' size: %llu(+%llu)", 4266 spa_name(spa), new_space, new_space - old_space); 4267 } 4268 } 4269 4270 /* 4271 * See if any devices need to be marked REMOVED. 4272 */ 4273 if (tasks & SPA_ASYNC_REMOVE) { 4274 spa_vdev_state_enter(spa, SCL_NONE); 4275 spa_async_remove(spa, spa->spa_root_vdev); 4276 for (int i = 0; i < spa->spa_l2cache.sav_count; i++) 4277 spa_async_remove(spa, spa->spa_l2cache.sav_vdevs[i]); 4278 for (int i = 0; i < spa->spa_spares.sav_count; i++) 4279 spa_async_remove(spa, spa->spa_spares.sav_vdevs[i]); 4280 (void) spa_vdev_state_exit(spa, NULL, 0); 4281 } 4282 4283 if ((tasks & SPA_ASYNC_AUTOEXPAND) && !spa_suspended(spa)) { 4284 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); 4285 spa_async_autoexpand(spa, spa->spa_root_vdev); 4286 spa_config_exit(spa, SCL_CONFIG, FTAG); 4287 } 4288 4289 /* 4290 * See if any devices need to be probed. 4291 */ 4292 if (tasks & SPA_ASYNC_PROBE) { 4293 spa_vdev_state_enter(spa, SCL_NONE); 4294 spa_async_probe(spa, spa->spa_root_vdev); 4295 (void) spa_vdev_state_exit(spa, NULL, 0); 4296 } 4297 4298 /* 4299 * If any devices are done replacing, detach them. 4300 */ 4301 if (tasks & SPA_ASYNC_RESILVER_DONE) 4302 spa_vdev_resilver_done(spa); 4303 4304 /* 4305 * Kick off a resilver. 4306 */ 4307 if (tasks & SPA_ASYNC_RESILVER) 4308 VERIFY(spa_scrub(spa, POOL_SCRUB_RESILVER) == 0); 4309 4310 /* 4311 * Let the world know that we're done. 4312 */ 4313 mutex_enter(&spa->spa_async_lock); 4314 spa->spa_async_thread = NULL; 4315 cv_broadcast(&spa->spa_async_cv); 4316 mutex_exit(&spa->spa_async_lock); 4317 thread_exit(); 4318 } 4319 4320 void 4321 spa_async_suspend(spa_t *spa) 4322 { 4323 mutex_enter(&spa->spa_async_lock); 4324 spa->spa_async_suspended++; 4325 while (spa->spa_async_thread != NULL) 4326 cv_wait(&spa->spa_async_cv, &spa->spa_async_lock); 4327 mutex_exit(&spa->spa_async_lock); 4328 } 4329 4330 void 4331 spa_async_resume(spa_t *spa) 4332 { 4333 mutex_enter(&spa->spa_async_lock); 4334 ASSERT(spa->spa_async_suspended != 0); 4335 spa->spa_async_suspended--; 4336 mutex_exit(&spa->spa_async_lock); 4337 } 4338 4339 static void 4340 spa_async_dispatch(spa_t *spa) 4341 { 4342 mutex_enter(&spa->spa_async_lock); 4343 if (spa->spa_async_tasks && !spa->spa_async_suspended && 4344 spa->spa_async_thread == NULL && 4345 rootdir != NULL && !vn_is_readonly(rootdir)) 4346 spa->spa_async_thread = thread_create(NULL, 0, 4347 spa_async_thread, spa, 0, &p0, TS_RUN, maxclsyspri); 4348 mutex_exit(&spa->spa_async_lock); 4349 } 4350 4351 void 4352 spa_async_request(spa_t *spa, int task) 4353 { 4354 mutex_enter(&spa->spa_async_lock); 4355 spa->spa_async_tasks |= task; 4356 mutex_exit(&spa->spa_async_lock); 4357 } 4358 4359 /* 4360 * ========================================================================== 4361 * SPA syncing routines 4362 * ========================================================================== 4363 */ 4364 static void 4365 spa_sync_deferred_bplist(spa_t *spa, bplist_t *bpl, dmu_tx_t *tx, uint64_t txg) 4366 { 4367 blkptr_t blk; 4368 uint64_t itor = 0; 4369 uint8_t c = 1; 4370 4371 while (bplist_iterate(bpl, &itor, &blk) == 0) { 4372 ASSERT(blk.blk_birth < txg); 4373 zio_free(spa, txg, &blk); 4374 } 4375 4376 bplist_vacate(bpl, tx); 4377 4378 /* 4379 * Pre-dirty the first block so we sync to convergence faster. 4380 * (Usually only the first block is needed.) 4381 */ 4382 dmu_write(bpl->bpl_mos, spa->spa_deferred_bplist_obj, 0, 1, &c, tx); 4383 } 4384 4385 static void 4386 spa_sync_free(void *arg, const blkptr_t *bp, dmu_tx_t *tx) 4387 { 4388 zio_t *zio = arg; 4389 4390 zio_nowait(zio_free_sync(zio, zio->io_spa, dmu_tx_get_txg(tx), bp, 4391 zio->io_flags)); 4392 } 4393 4394 static void 4395 spa_sync_nvlist(spa_t *spa, uint64_t obj, nvlist_t *nv, dmu_tx_t *tx) 4396 { 4397 char *packed = NULL; 4398 size_t bufsize; 4399 size_t nvsize = 0; 4400 dmu_buf_t *db; 4401 4402 VERIFY(nvlist_size(nv, &nvsize, NV_ENCODE_XDR) == 0); 4403 4404 /* 4405 * Write full (SPA_CONFIG_BLOCKSIZE) blocks of configuration 4406 * information. This avoids the dbuf_will_dirty() path and 4407 * saves us a pre-read to get data we don't actually care about. 4408 */ 4409 bufsize = P2ROUNDUP(nvsize, SPA_CONFIG_BLOCKSIZE); 4410 packed = kmem_alloc(bufsize, KM_SLEEP); 4411 4412 VERIFY(nvlist_pack(nv, &packed, &nvsize, NV_ENCODE_XDR, 4413 KM_SLEEP) == 0); 4414 bzero(packed + nvsize, bufsize - nvsize); 4415 4416 dmu_write(spa->spa_meta_objset, obj, 0, bufsize, packed, tx); 4417 4418 kmem_free(packed, bufsize); 4419 4420 VERIFY(0 == dmu_bonus_hold(spa->spa_meta_objset, obj, FTAG, &db)); 4421 dmu_buf_will_dirty(db, tx); 4422 *(uint64_t *)db->db_data = nvsize; 4423 dmu_buf_rele(db, FTAG); 4424 } 4425 4426 static void 4427 spa_sync_aux_dev(spa_t *spa, spa_aux_vdev_t *sav, dmu_tx_t *tx, 4428 const char *config, const char *entry) 4429 { 4430 nvlist_t *nvroot; 4431 nvlist_t **list; 4432 int i; 4433 4434 if (!sav->sav_sync) 4435 return; 4436 4437 /* 4438 * Update the MOS nvlist describing the list of available devices. 4439 * spa_validate_aux() will have already made sure this nvlist is 4440 * valid and the vdevs are labeled appropriately. 4441 */ 4442 if (sav->sav_object == 0) { 4443 sav->sav_object = dmu_object_alloc(spa->spa_meta_objset, 4444 DMU_OT_PACKED_NVLIST, 1 << 14, DMU_OT_PACKED_NVLIST_SIZE, 4445 sizeof (uint64_t), tx); 4446 VERIFY(zap_update(spa->spa_meta_objset, 4447 DMU_POOL_DIRECTORY_OBJECT, entry, sizeof (uint64_t), 1, 4448 &sav->sav_object, tx) == 0); 4449 } 4450 4451 VERIFY(nvlist_alloc(&nvroot, NV_UNIQUE_NAME, KM_SLEEP) == 0); 4452 if (sav->sav_count == 0) { 4453 VERIFY(nvlist_add_nvlist_array(nvroot, config, NULL, 0) == 0); 4454 } else { 4455 list = kmem_alloc(sav->sav_count * sizeof (void *), KM_SLEEP); 4456 for (i = 0; i < sav->sav_count; i++) 4457 list[i] = vdev_config_generate(spa, sav->sav_vdevs[i], 4458 B_FALSE, B_FALSE, B_TRUE); 4459 VERIFY(nvlist_add_nvlist_array(nvroot, config, list, 4460 sav->sav_count) == 0); 4461 for (i = 0; i < sav->sav_count; i++) 4462 nvlist_free(list[i]); 4463 kmem_free(list, sav->sav_count * sizeof (void *)); 4464 } 4465 4466 spa_sync_nvlist(spa, sav->sav_object, nvroot, tx); 4467 nvlist_free(nvroot); 4468 4469 sav->sav_sync = B_FALSE; 4470 } 4471 4472 static void 4473 spa_sync_config_object(spa_t *spa, dmu_tx_t *tx) 4474 { 4475 nvlist_t *config; 4476 4477 if (list_is_empty(&spa->spa_config_dirty_list)) 4478 return; 4479 4480 spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); 4481 4482 config = spa_config_generate(spa, spa->spa_root_vdev, 4483 dmu_tx_get_txg(tx), B_FALSE); 4484 4485 spa_config_exit(spa, SCL_STATE, FTAG); 4486 4487 if (spa->spa_config_syncing) 4488 nvlist_free(spa->spa_config_syncing); 4489 spa->spa_config_syncing = config; 4490 4491 spa_sync_nvlist(spa, spa->spa_config_object, config, tx); 4492 } 4493 4494 /* 4495 * Set zpool properties. 4496 */ 4497 static void 4498 spa_sync_props(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx) 4499 { 4500 spa_t *spa = arg1; 4501 objset_t *mos = spa->spa_meta_objset; 4502 nvlist_t *nvp = arg2; 4503 nvpair_t *elem; 4504 uint64_t intval; 4505 char *strval; 4506 zpool_prop_t prop; 4507 const char *propname; 4508 zprop_type_t proptype; 4509 4510 mutex_enter(&spa->spa_props_lock); 4511 4512 elem = NULL; 4513 while ((elem = nvlist_next_nvpair(nvp, elem))) { 4514 switch (prop = zpool_name_to_prop(nvpair_name(elem))) { 4515 case ZPOOL_PROP_VERSION: 4516 /* 4517 * Only set version for non-zpool-creation cases 4518 * (set/import). spa_create() needs special care 4519 * for version setting. 4520 */ 4521 if (tx->tx_txg != TXG_INITIAL) { 4522 VERIFY(nvpair_value_uint64(elem, 4523 &intval) == 0); 4524 ASSERT(intval <= SPA_VERSION); 4525 ASSERT(intval >= spa_version(spa)); 4526 spa->spa_uberblock.ub_version = intval; 4527 vdev_config_dirty(spa->spa_root_vdev); 4528 } 4529 break; 4530 4531 case ZPOOL_PROP_ALTROOT: 4532 /* 4533 * 'altroot' is a non-persistent property. It should 4534 * have been set temporarily at creation or import time. 4535 */ 4536 ASSERT(spa->spa_root != NULL); 4537 break; 4538 4539 case ZPOOL_PROP_CACHEFILE: 4540 /* 4541 * 'cachefile' is also a non-persisitent property. 4542 */ 4543 break; 4544 default: 4545 /* 4546 * Set pool property values in the poolprops mos object. 4547 */ 4548 if (spa->spa_pool_props_object == 0) { 4549 VERIFY((spa->spa_pool_props_object = 4550 zap_create(mos, DMU_OT_POOL_PROPS, 4551 DMU_OT_NONE, 0, tx)) > 0); 4552 4553 VERIFY(zap_update(mos, 4554 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_PROPS, 4555 8, 1, &spa->spa_pool_props_object, tx) 4556 == 0); 4557 } 4558 4559 /* normalize the property name */ 4560 propname = zpool_prop_to_name(prop); 4561 proptype = zpool_prop_get_type(prop); 4562 4563 if (nvpair_type(elem) == DATA_TYPE_STRING) { 4564 ASSERT(proptype == PROP_TYPE_STRING); 4565 VERIFY(nvpair_value_string(elem, &strval) == 0); 4566 VERIFY(zap_update(mos, 4567 spa->spa_pool_props_object, propname, 4568 1, strlen(strval) + 1, strval, tx) == 0); 4569 4570 } else if (nvpair_type(elem) == DATA_TYPE_UINT64) { 4571 VERIFY(nvpair_value_uint64(elem, &intval) == 0); 4572 4573 if (proptype == PROP_TYPE_INDEX) { 4574 const char *unused; 4575 VERIFY(zpool_prop_index_to_string( 4576 prop, intval, &unused) == 0); 4577 } 4578 VERIFY(zap_update(mos, 4579 spa->spa_pool_props_object, propname, 4580 8, 1, &intval, tx) == 0); 4581 } else { 4582 ASSERT(0); /* not allowed */ 4583 } 4584 4585 switch (prop) { 4586 case ZPOOL_PROP_DELEGATION: 4587 spa->spa_delegation = intval; 4588 break; 4589 case ZPOOL_PROP_BOOTFS: 4590 spa->spa_bootfs = intval; 4591 break; 4592 case ZPOOL_PROP_FAILUREMODE: 4593 spa->spa_failmode = intval; 4594 break; 4595 case ZPOOL_PROP_AUTOEXPAND: 4596 spa->spa_autoexpand = intval; 4597 spa_async_request(spa, SPA_ASYNC_AUTOEXPAND); 4598 break; 4599 case ZPOOL_PROP_DEDUPDITTO: 4600 spa->spa_dedup_ditto = intval; 4601 break; 4602 default: 4603 break; 4604 } 4605 } 4606 4607 /* log internal history if this is not a zpool create */ 4608 if (spa_version(spa) >= SPA_VERSION_ZPOOL_HISTORY && 4609 tx->tx_txg != TXG_INITIAL) { 4610 spa_history_internal_log(LOG_POOL_PROPSET, 4611 spa, tx, cr, "%s %lld %s", 4612 nvpair_name(elem), intval, spa_name(spa)); 4613 } 4614 } 4615 4616 mutex_exit(&spa->spa_props_lock); 4617 } 4618 4619 /* 4620 * Sync the specified transaction group. New blocks may be dirtied as 4621 * part of the process, so we iterate until it converges. 4622 */ 4623 void 4624 spa_sync(spa_t *spa, uint64_t txg) 4625 { 4626 dsl_pool_t *dp = spa->spa_dsl_pool; 4627 objset_t *mos = spa->spa_meta_objset; 4628 bplist_t *defer_bpl = &spa->spa_deferred_bplist; 4629 bplist_t *free_bpl = &spa->spa_free_bplist[txg & TXG_MASK]; 4630 vdev_t *rvd = spa->spa_root_vdev; 4631 vdev_t *vd; 4632 dmu_tx_t *tx; 4633 int error; 4634 4635 /* 4636 * Lock out configuration changes. 4637 */ 4638 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); 4639 4640 spa->spa_syncing_txg = txg; 4641 spa->spa_sync_pass = 0; 4642 4643 /* 4644 * If there are any pending vdev state changes, convert them 4645 * into config changes that go out with this transaction group. 4646 */ 4647 spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); 4648 while (list_head(&spa->spa_state_dirty_list) != NULL) { 4649 /* 4650 * We need the write lock here because, for aux vdevs, 4651 * calling vdev_config_dirty() modifies sav_config. 4652 * This is ugly and will become unnecessary when we 4653 * eliminate the aux vdev wart by integrating all vdevs 4654 * into the root vdev tree. 4655 */ 4656 spa_config_exit(spa, SCL_CONFIG | SCL_STATE, FTAG); 4657 spa_config_enter(spa, SCL_CONFIG | SCL_STATE, FTAG, RW_WRITER); 4658 while ((vd = list_head(&spa->spa_state_dirty_list)) != NULL) { 4659 vdev_state_clean(vd); 4660 vdev_config_dirty(vd); 4661 } 4662 spa_config_exit(spa, SCL_CONFIG | SCL_STATE, FTAG); 4663 spa_config_enter(spa, SCL_CONFIG | SCL_STATE, FTAG, RW_READER); 4664 } 4665 spa_config_exit(spa, SCL_STATE, FTAG); 4666 4667 VERIFY(0 == bplist_open(defer_bpl, mos, spa->spa_deferred_bplist_obj)); 4668 4669 tx = dmu_tx_create_assigned(dp, txg); 4670 4671 /* 4672 * If we are upgrading to SPA_VERSION_RAIDZ_DEFLATE this txg, 4673 * set spa_deflate if we have no raid-z vdevs. 4674 */ 4675 if (spa->spa_ubsync.ub_version < SPA_VERSION_RAIDZ_DEFLATE && 4676 spa->spa_uberblock.ub_version >= SPA_VERSION_RAIDZ_DEFLATE) { 4677 int i; 4678 4679 for (i = 0; i < rvd->vdev_children; i++) { 4680 vd = rvd->vdev_child[i]; 4681 if (vd->vdev_deflate_ratio != SPA_MINBLOCKSIZE) 4682 break; 4683 } 4684 if (i == rvd->vdev_children) { 4685 spa->spa_deflate = TRUE; 4686 VERIFY(0 == zap_add(spa->spa_meta_objset, 4687 DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_DEFLATE, 4688 sizeof (uint64_t), 1, &spa->spa_deflate, tx)); 4689 } 4690 } 4691 4692 if (spa->spa_ubsync.ub_version < SPA_VERSION_ORIGIN && 4693 spa->spa_uberblock.ub_version >= SPA_VERSION_ORIGIN) { 4694 dsl_pool_create_origin(dp, tx); 4695 4696 /* Keeping the origin open increases spa_minref */ 4697 spa->spa_minref += 3; 4698 } 4699 4700 if (spa->spa_ubsync.ub_version < SPA_VERSION_NEXT_CLONES && 4701 spa->spa_uberblock.ub_version >= SPA_VERSION_NEXT_CLONES) { 4702 dsl_pool_upgrade_clones(dp, tx); 4703 } 4704 4705 /* 4706 * If anything has changed in this txg, push the deferred frees 4707 * from the previous txg. If not, leave them alone so that we 4708 * don't generate work on an otherwise idle system. 4709 */ 4710 if (!txg_list_empty(&dp->dp_dirty_datasets, txg) || 4711 !txg_list_empty(&dp->dp_dirty_dirs, txg) || 4712 !txg_list_empty(&dp->dp_sync_tasks, txg)) 4713 spa_sync_deferred_bplist(spa, defer_bpl, tx, txg); 4714 4715 /* 4716 * Iterate to convergence. 4717 */ 4718 do { 4719 int pass = ++spa->spa_sync_pass; 4720 4721 spa_sync_config_object(spa, tx); 4722 spa_sync_aux_dev(spa, &spa->spa_spares, tx, 4723 ZPOOL_CONFIG_SPARES, DMU_POOL_SPARES); 4724 spa_sync_aux_dev(spa, &spa->spa_l2cache, tx, 4725 ZPOOL_CONFIG_L2CACHE, DMU_POOL_L2CACHE); 4726 spa_errlog_sync(spa, txg); 4727 dsl_pool_sync(dp, txg); 4728 4729 if (pass <= SYNC_PASS_DEFERRED_FREE) { 4730 zio_t *zio = zio_root(spa, NULL, NULL, 0); 4731 bplist_sync(free_bpl, spa_sync_free, zio, tx); 4732 VERIFY(zio_wait(zio) == 0); 4733 } else { 4734 bplist_sync(free_bpl, bplist_enqueue_cb, defer_bpl, tx); 4735 } 4736 4737 ddt_sync(spa, txg); 4738 4739 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, txg)) 4740 vdev_sync(vd, txg); 4741 4742 } while (dmu_objset_is_dirty(mos, txg)); 4743 4744 ASSERT(free_bpl->bpl_queue == NULL); 4745 4746 bplist_close(defer_bpl); 4747 4748 /* 4749 * Rewrite the vdev configuration (which includes the uberblock) 4750 * to commit the transaction group. 4751 * 4752 * If there are no dirty vdevs, we sync the uberblock to a few 4753 * random top-level vdevs that are known to be visible in the 4754 * config cache (see spa_vdev_add() for a complete description). 4755 * If there *are* dirty vdevs, sync the uberblock to all vdevs. 4756 */ 4757 for (;;) { 4758 /* 4759 * We hold SCL_STATE to prevent vdev open/close/etc. 4760 * while we're attempting to write the vdev labels. 4761 */ 4762 spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); 4763 4764 if (list_is_empty(&spa->spa_config_dirty_list)) { 4765 vdev_t *svd[SPA_DVAS_PER_BP]; 4766 int svdcount = 0; 4767 int children = rvd->vdev_children; 4768 int c0 = spa_get_random(children); 4769 4770 for (int c = 0; c < children; c++) { 4771 vd = rvd->vdev_child[(c0 + c) % children]; 4772 if (vd->vdev_ms_array == 0 || vd->vdev_islog) 4773 continue; 4774 svd[svdcount++] = vd; 4775 if (svdcount == SPA_DVAS_PER_BP) 4776 break; 4777 } 4778 error = vdev_config_sync(svd, svdcount, txg, B_FALSE); 4779 if (error != 0) 4780 error = vdev_config_sync(svd, svdcount, txg, 4781 B_TRUE); 4782 } else { 4783 error = vdev_config_sync(rvd->vdev_child, 4784 rvd->vdev_children, txg, B_FALSE); 4785 if (error != 0) 4786 error = vdev_config_sync(rvd->vdev_child, 4787 rvd->vdev_children, txg, B_TRUE); 4788 } 4789 4790 spa_config_exit(spa, SCL_STATE, FTAG); 4791 4792 if (error == 0) 4793 break; 4794 zio_suspend(spa, NULL); 4795 zio_resume_wait(spa); 4796 } 4797 dmu_tx_commit(tx); 4798 4799 /* 4800 * Clear the dirty config list. 4801 */ 4802 while ((vd = list_head(&spa->spa_config_dirty_list)) != NULL) 4803 vdev_config_clean(vd); 4804 4805 /* 4806 * Now that the new config has synced transactionally, 4807 * let it become visible to the config cache. 4808 */ 4809 if (spa->spa_config_syncing != NULL) { 4810 spa_config_set(spa, spa->spa_config_syncing); 4811 spa->spa_config_txg = txg; 4812 spa->spa_config_syncing = NULL; 4813 } 4814 4815 spa->spa_ubsync = spa->spa_uberblock; 4816 4817 dsl_pool_sync_done(dp, txg); 4818 4819 /* 4820 * Update usable space statistics. 4821 */ 4822 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg))) 4823 vdev_sync_done(vd, txg); 4824 4825 spa_update_dspace(spa); 4826 4827 /* 4828 * It had better be the case that we didn't dirty anything 4829 * since vdev_config_sync(). 4830 */ 4831 ASSERT(txg_list_empty(&dp->dp_dirty_datasets, txg)); 4832 ASSERT(txg_list_empty(&dp->dp_dirty_dirs, txg)); 4833 ASSERT(txg_list_empty(&spa->spa_vdev_txg_list, txg)); 4834 ASSERT(defer_bpl->bpl_queue == NULL); 4835 ASSERT(free_bpl->bpl_queue == NULL); 4836 4837 spa->spa_sync_pass = 0; 4838 4839 spa_config_exit(spa, SCL_CONFIG, FTAG); 4840 4841 spa_handle_ignored_writes(spa); 4842 4843 /* 4844 * If any async tasks have been requested, kick them off. 4845 */ 4846 spa_async_dispatch(spa); 4847 } 4848 4849 /* 4850 * Sync all pools. We don't want to hold the namespace lock across these 4851 * operations, so we take a reference on the spa_t and drop the lock during the 4852 * sync. 4853 */ 4854 void 4855 spa_sync_allpools(void) 4856 { 4857 spa_t *spa = NULL; 4858 mutex_enter(&spa_namespace_lock); 4859 while ((spa = spa_next(spa)) != NULL) { 4860 if (spa_state(spa) != POOL_STATE_ACTIVE || spa_suspended(spa)) 4861 continue; 4862 spa_open_ref(spa, FTAG); 4863 mutex_exit(&spa_namespace_lock); 4864 txg_wait_synced(spa_get_dsl(spa), 0); 4865 mutex_enter(&spa_namespace_lock); 4866 spa_close(spa, FTAG); 4867 } 4868 mutex_exit(&spa_namespace_lock); 4869 } 4870 4871 /* 4872 * ========================================================================== 4873 * Miscellaneous routines 4874 * ========================================================================== 4875 */ 4876 4877 /* 4878 * Remove all pools in the system. 4879 */ 4880 void 4881 spa_evict_all(void) 4882 { 4883 spa_t *spa; 4884 4885 /* 4886 * Remove all cached state. All pools should be closed now, 4887 * so every spa in the AVL tree should be unreferenced. 4888 */ 4889 mutex_enter(&spa_namespace_lock); 4890 while ((spa = spa_next(NULL)) != NULL) { 4891 /* 4892 * Stop async tasks. The async thread may need to detach 4893 * a device that's been replaced, which requires grabbing 4894 * spa_namespace_lock, so we must drop it here. 4895 */ 4896 spa_open_ref(spa, FTAG); 4897 mutex_exit(&spa_namespace_lock); 4898 spa_async_suspend(spa); 4899 mutex_enter(&spa_namespace_lock); 4900 spa_close(spa, FTAG); 4901 4902 if (spa->spa_state != POOL_STATE_UNINITIALIZED) { 4903 spa_unload(spa); 4904 spa_deactivate(spa); 4905 } 4906 spa_remove(spa); 4907 } 4908 mutex_exit(&spa_namespace_lock); 4909 } 4910 4911 vdev_t * 4912 spa_lookup_by_guid(spa_t *spa, uint64_t guid, boolean_t aux) 4913 { 4914 vdev_t *vd; 4915 int i; 4916 4917 if ((vd = vdev_lookup_by_guid(spa->spa_root_vdev, guid)) != NULL) 4918 return (vd); 4919 4920 if (aux) { 4921 for (i = 0; i < spa->spa_l2cache.sav_count; i++) { 4922 vd = spa->spa_l2cache.sav_vdevs[i]; 4923 if (vd->vdev_guid == guid) 4924 return (vd); 4925 } 4926 4927 for (i = 0; i < spa->spa_spares.sav_count; i++) { 4928 vd = spa->spa_spares.sav_vdevs[i]; 4929 if (vd->vdev_guid == guid) 4930 return (vd); 4931 } 4932 } 4933 4934 return (NULL); 4935 } 4936 4937 void 4938 spa_upgrade(spa_t *spa, uint64_t version) 4939 { 4940 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); 4941 4942 /* 4943 * This should only be called for a non-faulted pool, and since a 4944 * future version would result in an unopenable pool, this shouldn't be 4945 * possible. 4946 */ 4947 ASSERT(spa->spa_uberblock.ub_version <= SPA_VERSION); 4948 ASSERT(version >= spa->spa_uberblock.ub_version); 4949 4950 spa->spa_uberblock.ub_version = version; 4951 vdev_config_dirty(spa->spa_root_vdev); 4952 4953 spa_config_exit(spa, SCL_ALL, FTAG); 4954 4955 txg_wait_synced(spa_get_dsl(spa), 0); 4956 } 4957 4958 boolean_t 4959 spa_has_spare(spa_t *spa, uint64_t guid) 4960 { 4961 int i; 4962 uint64_t spareguid; 4963 spa_aux_vdev_t *sav = &spa->spa_spares; 4964 4965 for (i = 0; i < sav->sav_count; i++) 4966 if (sav->sav_vdevs[i]->vdev_guid == guid) 4967 return (B_TRUE); 4968 4969 for (i = 0; i < sav->sav_npending; i++) { 4970 if (nvlist_lookup_uint64(sav->sav_pending[i], ZPOOL_CONFIG_GUID, 4971 &spareguid) == 0 && spareguid == guid) 4972 return (B_TRUE); 4973 } 4974 4975 return (B_FALSE); 4976 } 4977 4978 /* 4979 * Check if a pool has an active shared spare device. 4980 * Note: reference count of an active spare is 2, as a spare and as a replace 4981 */ 4982 static boolean_t 4983 spa_has_active_shared_spare(spa_t *spa) 4984 { 4985 int i, refcnt; 4986 uint64_t pool; 4987 spa_aux_vdev_t *sav = &spa->spa_spares; 4988 4989 for (i = 0; i < sav->sav_count; i++) { 4990 if (spa_spare_exists(sav->sav_vdevs[i]->vdev_guid, &pool, 4991 &refcnt) && pool != 0ULL && pool == spa_guid(spa) && 4992 refcnt > 2) 4993 return (B_TRUE); 4994 } 4995 4996 return (B_FALSE); 4997 } 4998 4999 /* 5000 * Post a sysevent corresponding to the given event. The 'name' must be one of 5001 * the event definitions in sys/sysevent/eventdefs.h. The payload will be 5002 * filled in from the spa and (optionally) the vdev. This doesn't do anything 5003 * in the userland libzpool, as we don't want consumers to misinterpret ztest 5004 * or zdb as real changes. 5005 */ 5006 void 5007 spa_event_notify(spa_t *spa, vdev_t *vd, const char *name) 5008 { 5009 #ifdef _KERNEL 5010 sysevent_t *ev; 5011 sysevent_attr_list_t *attr = NULL; 5012 sysevent_value_t value; 5013 sysevent_id_t eid; 5014 5015 ev = sysevent_alloc(EC_ZFS, (char *)name, SUNW_KERN_PUB "zfs", 5016 SE_SLEEP); 5017 5018 value.value_type = SE_DATA_TYPE_STRING; 5019 value.value.sv_string = spa_name(spa); 5020 if (sysevent_add_attr(&attr, ZFS_EV_POOL_NAME, &value, SE_SLEEP) != 0) 5021 goto done; 5022 5023 value.value_type = SE_DATA_TYPE_UINT64; 5024 value.value.sv_uint64 = spa_guid(spa); 5025 if (sysevent_add_attr(&attr, ZFS_EV_POOL_GUID, &value, SE_SLEEP) != 0) 5026 goto done; 5027 5028 if (vd) { 5029 value.value_type = SE_DATA_TYPE_UINT64; 5030 value.value.sv_uint64 = vd->vdev_guid; 5031 if (sysevent_add_attr(&attr, ZFS_EV_VDEV_GUID, &value, 5032 SE_SLEEP) != 0) 5033 goto done; 5034 5035 if (vd->vdev_path) { 5036 value.value_type = SE_DATA_TYPE_STRING; 5037 value.value.sv_string = vd->vdev_path; 5038 if (sysevent_add_attr(&attr, ZFS_EV_VDEV_PATH, 5039 &value, SE_SLEEP) != 0) 5040 goto done; 5041 } 5042 } 5043 5044 if (sysevent_attach_attributes(ev, attr) != 0) 5045 goto done; 5046 attr = NULL; 5047 5048 (void) log_sysevent(ev, SE_SLEEP, &eid); 5049 5050 done: 5051 if (attr) 5052 sysevent_free_attr(attr); 5053 sysevent_free(ev); 5054 #endif 5055 } 5056