* Initiates a device. Caller must hold vdev_initialize_lock. * Device must be a leaf and not already be initializing. */
| 588 | * Device must be a leaf and not already be initializing. |
| 589 | */ |
| 590 | void |
| 591 | vdev_initialize(vdev_t *vd) |
| 592 | { |
| 593 | ASSERT(MUTEX_HELD(&vd->vdev_initialize_lock)); |
| 594 | ASSERT(vd->vdev_ops->vdev_op_leaf); |
| 595 | ASSERT(vdev_is_concrete(vd)); |
| 596 | ASSERT3P(vd->vdev_initialize_thread, ==, NULL); |
| 597 | ASSERT(!vd->vdev_detached); |
| 598 | ASSERT(!vd->vdev_initialize_exit_wanted); |
| 599 | ASSERT(!vd->vdev_top->vdev_removing); |
| 600 | |
| 601 | vdev_initialize_change_state(vd, VDEV_INITIALIZE_ACTIVE); |
| 602 | vd->vdev_initialize_thread = thread_create(NULL, 0, |
| 603 | vdev_initialize_thread, vd, 0, &p0, TS_RUN, maxclsyspri); |
| 604 | } |
| 605 | |
| 606 | /* |
| 607 | * Wait for the initialize thread to be terminated (cancelled or stopped). |
no test coverage detected