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

Function vdev_raidz_open

freebsd/contrib/openzfs/module/zfs/vdev_raidz.c:1599–1644  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1597}
1598
1599static int
1600vdev_raidz_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize,
1601 uint64_t *logical_ashift, uint64_t *physical_ashift)
1602{
1603 vdev_raidz_t *vdrz = vd->vdev_tsd;
1604 uint64_t nparity = vdrz->vd_nparity;
1605 int c;
1606 int lasterror = 0;
1607 int numerrors = 0;
1608
1609 ASSERT(nparity > 0);
1610
1611 if (nparity > VDEV_RAIDZ_MAXPARITY ||
1612 vd->vdev_children < nparity + 1) {
1613 vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL;
1614 return (SET_ERROR(EINVAL));
1615 }
1616
1617 vdev_open_children(vd);
1618
1619 for (c = 0; c < vd->vdev_children; c++) {
1620 vdev_t *cvd = vd->vdev_child[c];
1621
1622 if (cvd->vdev_open_error != 0) {
1623 lasterror = cvd->vdev_open_error;
1624 numerrors++;
1625 continue;
1626 }
1627
1628 *asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1;
1629 *max_asize = MIN(*max_asize - 1, cvd->vdev_max_asize - 1) + 1;
1630 *logical_ashift = MAX(*logical_ashift, cvd->vdev_ashift);
1631 *physical_ashift = MAX(*physical_ashift,
1632 cvd->vdev_physical_ashift);
1633 }
1634
1635 *asize *= vd->vdev_children;
1636 *max_asize *= vd->vdev_children;
1637
1638 if (numerrors > nparity) {
1639 vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS;
1640 return (lasterror);
1641 }
1642
1643 return (0);
1644}
1645
1646static void
1647vdev_raidz_close(vdev_t *vd)

Callers

nothing calls this directly

Calls 1

vdev_open_childrenFunction · 0.85

Tested by

no test coverage detected