* Remove any holes in the child array. */
| 500 | * Remove any holes in the child array. |
| 501 | */ |
| 502 | void |
| 503 | vdev_compact_children(vdev_t *pvd) |
| 504 | { |
| 505 | vdev_t **newchild, *cvd; |
| 506 | int oldc = pvd->vdev_children; |
| 507 | int newc; |
| 508 | |
| 509 | ASSERT(spa_config_held(pvd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); |
| 510 | |
| 511 | if (oldc == 0) |
| 512 | return; |
| 513 | |
| 514 | for (int c = newc = 0; c < oldc; c++) |
| 515 | if (pvd->vdev_child[c]) |
| 516 | newc++; |
| 517 | |
| 518 | if (newc > 0) { |
| 519 | newchild = kmem_zalloc(newc * sizeof (vdev_t *), KM_SLEEP); |
| 520 | |
| 521 | for (int c = newc = 0; c < oldc; c++) { |
| 522 | if ((cvd = pvd->vdev_child[c]) != NULL) { |
| 523 | newchild[newc] = cvd; |
| 524 | cvd->vdev_id = newc++; |
| 525 | } |
| 526 | } |
| 527 | } else { |
| 528 | newchild = NULL; |
| 529 | } |
| 530 | |
| 531 | kmem_free(pvd->vdev_child, oldc * sizeof (vdev_t *)); |
| 532 | pvd->vdev_child = newchild; |
| 533 | pvd->vdev_children = newc; |
| 534 | } |
| 535 | |
| 536 | /* |
| 537 | * Allocate and minimally initialize a vdev_t. |
no test coverage detected