| 1482 | } |
| 1483 | |
| 1484 | static void |
| 1485 | vdev_uberblock_load_impl(zio_t *zio, vdev_t *vd, int flags, |
| 1486 | struct ubl_cbdata *cbp) |
| 1487 | { |
| 1488 | for (int c = 0; c < vd->vdev_children; c++) |
| 1489 | vdev_uberblock_load_impl(zio, vd->vdev_child[c], flags, cbp); |
| 1490 | |
| 1491 | if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd) && |
| 1492 | vd->vdev_ops != &vdev_draid_spare_ops) { |
| 1493 | for (int l = 0; l < VDEV_LABELS; l++) { |
| 1494 | for (int n = 0; n < VDEV_UBERBLOCK_COUNT(vd); n++) { |
| 1495 | vdev_label_read(zio, vd, l, |
| 1496 | abd_alloc_linear(VDEV_UBERBLOCK_SIZE(vd), |
| 1497 | B_TRUE), VDEV_UBERBLOCK_OFFSET(vd, n), |
| 1498 | VDEV_UBERBLOCK_SIZE(vd), |
| 1499 | vdev_uberblock_load_done, zio, flags); |
| 1500 | } |
| 1501 | } |
| 1502 | } |
| 1503 | } |
| 1504 | |
| 1505 | /* |
| 1506 | * Reads the 'best' uberblock from disk along with its associated |
no test coverage detected