| 2459 | } |
| 2460 | |
| 2461 | int |
| 2462 | vdev_create(vdev_t *vd, uint64_t txg, boolean_t isreplacing) |
| 2463 | { |
| 2464 | int error; |
| 2465 | |
| 2466 | /* |
| 2467 | * Normally, partial opens (e.g. of a mirror) are allowed. |
| 2468 | * For a create, however, we want to fail the request if |
| 2469 | * there are any components we can't open. |
| 2470 | */ |
| 2471 | error = vdev_open(vd); |
| 2472 | |
| 2473 | if (error || vd->vdev_state != VDEV_STATE_HEALTHY) { |
| 2474 | vdev_close(vd); |
| 2475 | return (error ? error : SET_ERROR(ENXIO)); |
| 2476 | } |
| 2477 | |
| 2478 | /* |
| 2479 | * Recursively load DTLs and initialize all labels. |
| 2480 | */ |
| 2481 | if ((error = vdev_dtl_load(vd)) != 0 || |
| 2482 | (error = vdev_label_init(vd, txg, isreplacing ? |
| 2483 | VDEV_LABEL_REPLACE : VDEV_LABEL_CREATE)) != 0) { |
| 2484 | vdev_close(vd); |
| 2485 | return (error); |
| 2486 | } |
| 2487 | |
| 2488 | return (0); |
| 2489 | } |
| 2490 | |
| 2491 | void |
| 2492 | vdev_metaslab_set_size(vdev_t *vd) |
no test coverage detected