MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vdev_compact_children

Function vdev_compact_children

freebsd/contrib/openzfs/module/zfs/vdev.c:502–534  ·  view source on GitHub ↗

* Remove any holes in the child array. */

Source from the content-addressed store, hash-verified

500 * Remove any holes in the child array.
501 */
502void
503vdev_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.

Callers 3

vdev_splitFunction · 0.85
spa_vdev_detachFunction · 0.85

Calls 2

spa_config_heldFunction · 0.85
kmem_freeFunction · 0.50

Tested by

no test coverage detected