Lines Matching refs:raidPtr

183 static int raiddoaccess(RF_Raid_t *raidPtr, struct buf *bp);
184 static int rf_get_component_caches(RF_Raid_t *raidPtr, int *);
261 void *raidPtr; member
299 static void rf_RewriteParityThread(RF_Raid_t *raidPtr);
847 RF_Raid_t *raidPtr; in raid_dumpblocks() local
851 raidPtr = &rs->sc_r; in raid_dumpblocks()
854 if (raidPtr->Layout.numDataCol != 1 || in raid_dumpblocks()
855 raidPtr->Layout.numParityCol != 1) in raid_dumpblocks()
873 for (c = 0; c < raidPtr->numCol; c++) { in raid_dumpblocks()
874 if (raidPtr->Disks[c].status == rf_ds_optimal) { in raid_dumpblocks()
887 for (c = 0; c < raidPtr->numSpare; c++) { in raid_dumpblocks()
888 sparecol = raidPtr->numCol + c; in raid_dumpblocks()
890 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in raid_dumpblocks()
893 for(j=0;j<raidPtr->numCol;j++) { in raid_dumpblocks()
894 if (raidPtr->Disks[j].spareCol == sparecol) { in raid_dumpblocks()
934 bdev = bdevsw_lookup(raidPtr->Disks[dumpto].dev); in raid_dumpblocks()
940 error = (*bdev->d_dump)(raidPtr->Disks[dumpto].dev, in raid_dumpblocks()
941 blkno, va, nblk * raidPtr->bytesPerSector); in raid_dumpblocks()
1060 raid_wakeup(RF_Raid_t *raidPtr) in raid_wakeup() argument
1062 rf_lock_mutex2(raidPtr->iodone_lock); in raid_wakeup()
1063 rf_signal_cond2(raidPtr->iodone_cv); in raid_wakeup()
1064 rf_unlock_mutex2(raidPtr->iodone_lock); in raid_wakeup()
1073 RF_Raid_t *raidPtr; in raidstrategy() local
1085 raidPtr = &rs->sc_r; in raidstrategy()
1092 raid_wakeup(raidPtr); in raidstrategy()
1106 RF_Raid_t *raidPtr; in raid_diskstart() local
1108 raidPtr = &rs->sc_r; in raid_diskstart()
1109 if (!raidPtr->valid) { in raid_diskstart()
1117 return raiddoaccess(raidPtr, bp); in raid_diskstart()
1121 raiddone(RF_Raid_t *raidPtr, struct buf *bp) in raiddone() argument
1126 rs = raidPtr->softc; in raiddone()
1131 rf_lock_mutex2(raidPtr->mutex); in raiddone()
1132 raidPtr->openings++; in raiddone()
1133 rf_unlock_mutex2(raidPtr->mutex); in raiddone()
1136 raid_wakeup(raidPtr); in raiddone()
1177 RF_Raid_t *raidPtr; in raid_detach_unlocked() local
1180 raidPtr = &rs->sc_r; in raid_detach_unlocked()
1183 raidPtr->recon_in_progress != 0 || in raid_detach_unlocked()
1184 raidPtr->parity_rewrite_in_progress != 0) in raid_detach_unlocked()
1192 if ((error = rf_Shutdown(raidPtr)) != 0) in raid_detach_unlocked()
1211 rf_fail_disk(RF_Raid_t *raidPtr, struct rf_recon_req *rr) in rf_fail_disk() argument
1215 if (raidPtr->Layout.map->faultsTolerated == 0) { in rf_fail_disk()
1220 if (rr->col < 0 || rr->col >= raidPtr->numCol) { in rf_fail_disk()
1225 rf_lock_mutex2(raidPtr->mutex); in rf_fail_disk()
1226 if (raidPtr->status == rf_rs_reconstructing) { in rf_fail_disk()
1227 raidPtr->abortRecon[rr->col] = 1; in rf_fail_disk()
1229 if ((raidPtr->Disks[rr->col].status == rf_ds_optimal) && in rf_fail_disk()
1230 (raidPtr->numFailures > 0)) { in rf_fail_disk()
1235 if (raidPtr->Disks[rr->col].status == rf_ds_spared) { in rf_fail_disk()
1236 int spareCol = raidPtr->Disks[rr->col].spareCol; in rf_fail_disk()
1238 if (spareCol < raidPtr->numCol || in rf_fail_disk()
1239 spareCol >= raidPtr->numCol + raidPtr->numSpare) in rf_fail_disk()
1246 raidPtr->Disks[spareCol].status = rf_ds_failed; in rf_fail_disk()
1249 rf_unlock_mutex2(raidPtr->mutex); in rf_fail_disk()
1258 rrint->raidPtr = raidPtr; in rf_fail_disk()
1260 return RF_CREATE_THREAD(raidPtr->recon_thread, rf_ReconThread, in rf_fail_disk()
1263 rf_unlock_mutex2(raidPtr->mutex); in rf_fail_disk()
1326 RF_Raid_t *raidPtr = &rs->sc_r; in rf_construct() local
1366 memset(raidPtr, 0, sizeof(*raidPtr)); in rf_construct()
1367 raidPtr->softc = rs; in rf_construct()
1368 raidPtr->raidid = rs->sc_unit; in rf_construct()
1370 retcode = rf_Configure(raidPtr, k_cfg, NULL); in rf_construct()
1375 raidPtr->openings = RAIDOUTSTANDING; in rf_construct()
1378 raid_wakeup(raidPtr); in rf_construct()
1379 rf_markalldirty(raidPtr); in rf_construct()
1400 rf_set_component_label(RF_Raid_t *raidPtr, RF_ComponentLabel_t *clabel) in rf_set_component_label() argument
1409 int raidid = raidPtr->raidid; in rf_set_component_label()
1422 if ((column < 0) || (column >= raidPtr->numCol)) { in rf_set_component_label()
1430 memcpy(raidget_component_label(raidPtr, column), in rf_set_component_label()
1432 raidflush_component_label(raidPtr, column); in rf_set_component_label()
1438 rf_init_component_label(RF_Raid_t *raidPtr, RF_ComponentLabel_t *clabel) in rf_init_component_label() argument
1447 raidPtr->serial_number = clabel->serial_number; in rf_init_component_label()
1449 for (int column = 0; column < raidPtr->numCol; column++) { in rf_init_component_label()
1450 RF_RaidDisk_t *diskPtr = &raidPtr->Disks[column]; in rf_init_component_label()
1454 raidPtr, column); in rf_init_component_label()
1457 raid_init_component_label(raidPtr, ci_label); in rf_init_component_label()
1458 ci_label->serial_number = raidPtr->serial_number; in rf_init_component_label()
1463 raidflush_component_label(raidPtr, column); in rf_init_component_label()
1471 rf_rebuild_in_place(RF_Raid_t *raidPtr, RF_SingleComponent_t *componentPtr) in rf_rebuild_in_place() argument
1474 if (raidPtr->Layout.map->faultsTolerated == 0) { in rf_rebuild_in_place()
1479 if (raidPtr->recon_in_progress == 1) { in rf_rebuild_in_place()
1489 if ((column < 0) || (column >= raidPtr->numCol)) { in rf_rebuild_in_place()
1493 rf_lock_mutex2(raidPtr->mutex); in rf_rebuild_in_place()
1494 if ((raidPtr->Disks[column].status == rf_ds_optimal) && in rf_rebuild_in_place()
1495 (raidPtr->numFailures > 0)) { in rf_rebuild_in_place()
1501 raidPtr->raidid); in rf_rebuild_in_place()
1503 raidPtr->raidid, column); in rf_rebuild_in_place()
1504 rf_unlock_mutex2(raidPtr->mutex); in rf_rebuild_in_place()
1508 if (raidPtr->Disks[column].status == rf_ds_reconstructing) { in rf_rebuild_in_place()
1510 raidPtr->raidid); in rf_rebuild_in_place()
1513 raidPtr->raidid, column); in rf_rebuild_in_place()
1515 rf_unlock_mutex2(raidPtr->mutex); in rf_rebuild_in_place()
1519 if (raidPtr->Disks[column].status == rf_ds_spared) { in rf_rebuild_in_place()
1520 rf_unlock_mutex2(raidPtr->mutex); in rf_rebuild_in_place()
1524 rf_unlock_mutex2(raidPtr->mutex); in rf_rebuild_in_place()
1532 rrint->raidPtr = raidPtr; in rf_rebuild_in_place()
1534 return RF_CREATE_THREAD(raidPtr->recon_thread, in rf_rebuild_in_place()
1539 rf_check_recon_status(RF_Raid_t *raidPtr, int *data) in rf_check_recon_status() argument
1545 if (raidPtr->Layout.map->faultsTolerated == 0 || in rf_check_recon_status()
1546 raidPtr->status != rf_rs_reconstructing) { in rf_check_recon_status()
1550 if (raidPtr->reconControl->numRUsTotal == 0) { in rf_check_recon_status()
1554 *data = (raidPtr->reconControl->numRUsComplete * 100 in rf_check_recon_status()
1555 / raidPtr->reconControl->numRUsTotal); in rf_check_recon_status()
1579 RF_Raid_t *raidPtr; in raidioctl() local
1592 raidPtr = &rs->sc_r; in raidioctl()
1624 raidPtr->recon_in_progress != 0 || in raidioctl()
1625 raidPtr->parity_rewrite_in_progress != 0) in raidioctl()
1637 return rf_get_component_label(raidPtr, data); in raidioctl()
1641 return rf_set_component_label(raidPtr, data); in raidioctl()
1645 return rf_init_component_label(raidPtr, data); in raidioctl()
1648 d = rf_set_autoconfig(raidPtr, *(int *) data); in raidioctl()
1650 raidPtr->raidid, d); in raidioctl()
1655 d = rf_set_rootpartition(raidPtr, *(int *) data); in raidioctl()
1657 raidPtr->raidid, d); in raidioctl()
1664 if (raidPtr->Layout.map->faultsTolerated == 0) { in raidioctl()
1666 raidPtr->parity_good = RF_RAID_CLEAN; in raidioctl()
1670 if (raidPtr->parity_rewrite_in_progress == 1) { in raidioctl()
1675 return RF_CREATE_THREAD(raidPtr->parity_rewrite_thread, in raidioctl()
1676 rf_RewriteParityThread, raidPtr,"raid_parity"); in raidioctl()
1680 return rf_add_hot_spare(raidPtr, &component); in raidioctl()
1685 return rf_delete_component(raidPtr, &component); in raidioctl()
1689 return rf_remove_component(raidPtr, &component); in raidioctl()
1693 return rf_incorporate_hot_spare(raidPtr, &component); in raidioctl()
1696 return rf_rebuild_in_place(raidPtr, data); in raidioctl()
1703 retcode = rf_get_info(raidPtr, d_cfg); in raidioctl()
1711 *(int *) data = raidPtr->parity_good; in raidioctl()
1715 if (rf_paritymap_ineligible(raidPtr)) in raidioctl()
1717 rf_paritymap_status(raidPtr->parity_map, data); in raidioctl()
1721 if (rf_paritymap_ineligible(raidPtr)) in raidioctl()
1723 if (raidPtr->parity_map == NULL) in raidioctl()
1725 if (rf_paritymap_set_params(raidPtr->parity_map, data, 1) != 0) in raidioctl()
1730 if (rf_paritymap_ineligible(raidPtr)) in raidioctl()
1732 *(int *) data = rf_paritymap_get_disable(raidPtr); in raidioctl()
1736 if (rf_paritymap_ineligible(raidPtr)) in raidioctl()
1738 rf_paritymap_set_disable(raidPtr, *(int *)data); in raidioctl()
1746 memset(&raidPtr->acc_totals, 0, sizeof(raidPtr->acc_totals)); in raidioctl()
1751 *totals = raidPtr->acc_totals; in raidioctl()
1755 raidPtr->keep_acc_totals = *(int *)data; in raidioctl()
1759 *(int *) data = raidPtr->totalSectors; in raidioctl()
1763 return rf_fail_disk(raidPtr, data); in raidioctl()
1771 return rf_check_recon_status(raidPtr, data); in raidioctl()
1774 rf_check_recon_status_ext(raidPtr, data); in raidioctl()
1778 if (raidPtr->Layout.map->faultsTolerated == 0) { in raidioctl()
1784 if (raidPtr->parity_rewrite_in_progress == 1) { in raidioctl()
1786 raidPtr->parity_rewrite_stripes_done / in raidioctl()
1787 raidPtr->Layout.numStripe; in raidioctl()
1794 rf_check_parityrewrite_status_ext(raidPtr, data); in raidioctl()
1802 rf_check_copyback_status_ext(raidPtr, data); in raidioctl()
1806 for (column = 0; column < raidPtr->numCol; column++) in raidioctl()
1807 if (raidPtr->Disks[column].status != rf_ds_optimal) in raidioctl()
1810 for (column = 0; column < raidPtr->numCol; column++) { in raidioctl()
1811 clabel = raidget_component_label(raidPtr, column); in raidioctl()
1813 raidflush_component_label(raidPtr, column); in raidioctl()
1857 retcode = rf_SetSpareTable(raidPtr, *(void **) data); in raidioctl()
1904 if (!raidPtr->valid) in raidioctl()
1913 retcode = rf_get_component_caches(raidPtr, (int *)data); in raidioctl()
1917 retcode = rf_sync_component_caches(raidPtr, *(int *)data); in raidioctl()
1940 RF_Raid_t *raidPtr = &rs->sc_r; in raidinit() local
1943 unit = raidPtr->raidid; in raidinit()
1958 raidPtr->raidid); in raidinit()
1975 rs->sc_size = raidPtr->totalSectors; in raidinit()
1980 rf_set_geometry(rs, raidPtr); in raidinit()
2034 raidstart(RF_Raid_t *raidPtr) in raidstart() argument
2039 rs = raidPtr->softc; in raidstart()
2042 rf_lock_mutex2(raidPtr->mutex); in raidstart()
2043 if (raidPtr->numNewFailures > 0) { in raidstart()
2044 rf_unlock_mutex2(raidPtr->mutex); in raidstart()
2045 rf_update_component_labels(raidPtr, in raidstart()
2047 rf_lock_mutex2(raidPtr->mutex); in raidstart()
2048 raidPtr->numNewFailures--; in raidstart()
2050 rf_unlock_mutex2(raidPtr->mutex); in raidstart()
2053 printf("raid%d: raidstart not ready\n", raidPtr->raidid); in raidstart()
2061 raiddoaccess(RF_Raid_t *raidPtr, struct buf *bp) in raiddoaccess() argument
2068 rf_lock_mutex2(raidPtr->mutex); in raiddoaccess()
2069 if (raidPtr->openings == 0) { in raiddoaccess()
2070 rf_unlock_mutex2(raidPtr->mutex); in raiddoaccess()
2073 rf_unlock_mutex2(raidPtr->mutex); in raiddoaccess()
2087 num_blocks = bp->b_bcount >> raidPtr->logBytesPerSector; in raiddoaccess()
2088 pb = (bp->b_bcount & raidPtr->sectorMask) ? 1 : 0; in raiddoaccess()
2095 if ((sum > raidPtr->totalSectors) || (sum < raid_addr) in raiddoaccess()
2104 if (bp->b_bcount & raidPtr->sectorMask) { in raiddoaccess()
2111 rf_lock_mutex2(raidPtr->mutex); in raiddoaccess()
2112 raidPtr->openings--; in raiddoaccess()
2113 rf_unlock_mutex2(raidPtr->mutex); in raiddoaccess()
2118 rc = rf_DoAccess(raidPtr, (bp->b_flags & B_READ) ? in raiddoaccess()
2163 queue->raidPtr->logBytesPerSector); in rf_DispatchKernelIO()
2176 req->type, queue->raidPtr->raidid, in rf_DispatchKernelIO()
2181 queue->raidPtr->logBytesPerSector), in rf_DispatchKernelIO()
2182 (int) queue->raidPtr->logBytesPerSector)); in rf_DispatchKernelIO()
2217 rf_lock_mutex2(queue->raidPtr->iodone_lock); in KernelWakeupFunc()
2239 if (((queue->raidPtr->Disks[queue->col].status == in KernelWakeupFunc()
2241 (queue->raidPtr->Disks[queue->col].status == in KernelWakeupFunc()
2243 (queue->raidPtr->numFailures < in KernelWakeupFunc()
2244 queue->raidPtr->Layout.map->faultsTolerated)) { in KernelWakeupFunc()
2246 queue->raidPtr->raidid, in KernelWakeupFunc()
2248 queue->raidPtr->Disks[queue->col].devname); in KernelWakeupFunc()
2249 queue->raidPtr->Disks[queue->col].status = in KernelWakeupFunc()
2251 queue->raidPtr->status = rf_rs_degraded; in KernelWakeupFunc()
2252 queue->raidPtr->numFailures++; in KernelWakeupFunc()
2253 queue->raidPtr->numNewFailures++; in KernelWakeupFunc()
2264 TAILQ_INSERT_TAIL(&(queue->raidPtr->iodone), req, iodone_entries); in KernelWakeupFunc()
2267 rf_signal_cond2(queue->raidPtr->iodone_cv); in KernelWakeupFunc()
2269 rf_unlock_mutex2(queue->raidPtr->iodone_lock); in KernelWakeupFunc()
2366 rf_parity_map_offset(RF_Raid_t *raidPtr) in rf_parity_map_offset() argument
2370 KASSERT(raidPtr->bytesPerSector); in rf_parity_map_offset()
2371 if (raidPtr->bytesPerSector > RF_COMPONENT_INFO_SIZE) in rf_parity_map_offset()
2372 map_offset = raidPtr->bytesPerSector; in rf_parity_map_offset()
2381 rf_parity_map_size(RF_Raid_t *raidPtr) in rf_parity_map_size() argument
2385 if (raidPtr->bytesPerSector > RF_PARITY_MAP_SIZE) in rf_parity_map_size()
2386 map_size = raidPtr->bytesPerSector; in rf_parity_map_size()
2394 raidmarkclean(RF_Raid_t *raidPtr, RF_RowCol_t col) in raidmarkclean() argument
2398 clabel = raidget_component_label(raidPtr, col); in raidmarkclean()
2400 raidflush_component_label(raidPtr, col); in raidmarkclean()
2406 raidmarkdirty(RF_Raid_t *raidPtr, RF_RowCol_t col) in raidmarkdirty() argument
2410 clabel = raidget_component_label(raidPtr, col); in raidmarkdirty()
2412 raidflush_component_label(raidPtr, col); in raidmarkdirty()
2417 raidfetch_component_label(RF_Raid_t *raidPtr, RF_RowCol_t col) in raidfetch_component_label() argument
2419 KASSERT(raidPtr->bytesPerSector); in raidfetch_component_label()
2421 return raidread_component_label(raidPtr->bytesPerSector, in raidfetch_component_label()
2422 raidPtr->Disks[col].dev, in raidfetch_component_label()
2423 raidPtr->raid_cinfo[col].ci_vp, in raidfetch_component_label()
2424 &raidPtr->raid_cinfo[col].ci_label); in raidfetch_component_label()
2428 raidget_component_label(RF_Raid_t *raidPtr, RF_RowCol_t col) in raidget_component_label() argument
2430 return &raidPtr->raid_cinfo[col].ci_label; in raidget_component_label()
2434 raidflush_component_label(RF_Raid_t *raidPtr, RF_RowCol_t col) in raidflush_component_label() argument
2438 label = &raidPtr->raid_cinfo[col].ci_label; in raidflush_component_label()
2439 label->mod_counter = raidPtr->mod_counter; in raidflush_component_label()
2443 return raidwrite_component_label(raidPtr->bytesPerSector, in raidflush_component_label()
2444 raidPtr->Disks[col].dev, in raidflush_component_label()
2445 raidPtr->raid_cinfo[col].ci_vp, label); in raidflush_component_label()
2590 rf_paritymap_kern_write(RF_Raid_t *raidPtr, struct rf_paritymap_ondisk *map) in rf_paritymap_kern_write() argument
2594 for (c = 0; c < raidPtr->numCol; c++) { in rf_paritymap_kern_write()
2596 if (RF_DEAD_DISK(raidPtr->Disks[c].status)) in rf_paritymap_kern_write()
2599 raidwrite_component_area(raidPtr->Disks[c].dev, in rf_paritymap_kern_write()
2600 raidPtr->raid_cinfo[c].ci_vp, map, in rf_paritymap_kern_write()
2602 rf_parity_map_offset(raidPtr), in rf_paritymap_kern_write()
2603 rf_parity_map_size(raidPtr)); in rf_paritymap_kern_write()
2608 rf_paritymap_kern_read(RF_Raid_t *raidPtr, struct rf_paritymap_ondisk *map) in rf_paritymap_kern_read() argument
2614 for (c = 0; c < raidPtr->numCol; c++) { in rf_paritymap_kern_read()
2616 if (RF_DEAD_DISK(raidPtr->Disks[c].status)) in rf_paritymap_kern_read()
2618 raidread_component_area(raidPtr->Disks[c].dev, in rf_paritymap_kern_read()
2619 raidPtr->raid_cinfo[c].ci_vp, &tmp, in rf_paritymap_kern_read()
2621 rf_parity_map_offset(raidPtr), in rf_paritymap_kern_read()
2622 rf_parity_map_size(raidPtr)); in rf_paritymap_kern_read()
2633 rf_markalldirty(RF_Raid_t *raidPtr) in rf_markalldirty() argument
2641 raidPtr->mod_counter++; in rf_markalldirty()
2642 for (c = 0; c < raidPtr->numCol; c++) { in rf_markalldirty()
2645 if (!RF_DEAD_DISK(raidPtr->Disks[c].status)) { in rf_markalldirty()
2646 clabel = raidget_component_label(raidPtr, c); in rf_markalldirty()
2652 raidmarkdirty(raidPtr, c); in rf_markalldirty()
2657 for (c = 0; c < raidPtr->numSpare ; c++) { in rf_markalldirty()
2658 sparecol = raidPtr->numCol + c; in rf_markalldirty()
2660 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in rf_markalldirty()
2670 for(j=0;j<raidPtr->numCol;j++) { in rf_markalldirty()
2671 if (raidPtr->Disks[j].spareCol == sparecol) { in rf_markalldirty()
2677 clabel = raidget_component_label(raidPtr, sparecol); in rf_markalldirty()
2680 raid_init_component_label(raidPtr, clabel); in rf_markalldirty()
2688 raidmarkdirty(raidPtr, sparecol); in rf_markalldirty()
2695 rf_update_component_labels(RF_Raid_t *raidPtr, int final) in rf_update_component_labels() argument
2702 struct raid_softc *rs = raidPtr->softc; in rf_update_component_labels()
2709 raidPtr->mod_counter++; in rf_update_component_labels()
2711 for (c = 0; c < raidPtr->numCol; c++) { in rf_update_component_labels()
2712 if (raidPtr->Disks[c].status == rf_ds_optimal) { in rf_update_component_labels()
2713 clabel = raidget_component_label(raidPtr, c); in rf_update_component_labels()
2719 clabel->last_unit = raidPtr->raidid; in rf_update_component_labels()
2721 raidflush_component_label(raidPtr, c); in rf_update_component_labels()
2723 if (raidPtr->parity_good == RF_RAID_CLEAN) { in rf_update_component_labels()
2724 raidmarkclean(raidPtr, c); in rf_update_component_labels()
2731 for (c = 0; c < raidPtr->numSpare ; c++) { in rf_update_component_labels()
2732 sparecol = raidPtr->numCol + c; in rf_update_component_labels()
2735 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in rf_update_component_labels()
2745 for(j=0;j<raidPtr->numCol;j++) { in rf_update_component_labels()
2746 if (raidPtr->Disks[j].spareCol == sparecol) { in rf_update_component_labels()
2753 clabel = raidget_component_label(raidPtr, sparecol); in rf_update_component_labels()
2756 raid_init_component_label(raidPtr, clabel); in rf_update_component_labels()
2761 clabel->last_unit = raidPtr->raidid; in rf_update_component_labels()
2763 raidflush_component_label(raidPtr, sparecol); in rf_update_component_labels()
2765 if (raidPtr->parity_good == RF_RAID_CLEAN) { in rf_update_component_labels()
2766 raidmarkclean(raidPtr, sparecol); in rf_update_component_labels()
2774 rf_close_component(RF_Raid_t *raidPtr, struct vnode *vp, int auto_configured) in rf_close_component() argument
2791 rf_UnconfigureVnodes(RF_Raid_t *raidPtr) in rf_UnconfigureVnodes() argument
2800 for (c = 0; c < raidPtr->numCol; c++) { in rf_UnconfigureVnodes()
2801 vp = raidPtr->raid_cinfo[c].ci_vp; in rf_UnconfigureVnodes()
2802 acd = raidPtr->Disks[c].auto_configured; in rf_UnconfigureVnodes()
2803 rf_close_component(raidPtr, vp, acd); in rf_UnconfigureVnodes()
2804 raidPtr->raid_cinfo[c].ci_vp = NULL; in rf_UnconfigureVnodes()
2805 raidPtr->Disks[c].auto_configured = 0; in rf_UnconfigureVnodes()
2808 for (r = 0; r < raidPtr->numSpare; r++) { in rf_UnconfigureVnodes()
2809 vp = raidPtr->raid_cinfo[raidPtr->numCol + r].ci_vp; in rf_UnconfigureVnodes()
2810 acd = raidPtr->Disks[raidPtr->numCol + r].auto_configured; in rf_UnconfigureVnodes()
2811 rf_close_component(raidPtr, vp, acd); in rf_UnconfigureVnodes()
2812 raidPtr->raid_cinfo[raidPtr->numCol + r].ci_vp = NULL; in rf_UnconfigureVnodes()
2813 raidPtr->Disks[raidPtr->numCol + r].auto_configured = 0; in rf_UnconfigureVnodes()
2822 RF_Raid_t *raidPtr; in rf_ReconThread() local
2825 raidPtr = (RF_Raid_t *) req->raidPtr; in rf_ReconThread()
2826 raidPtr->recon_in_progress = 1; in rf_ReconThread()
2829 raidPtr->forceRecon = 1; in rf_ReconThread()
2832 rf_FailDisk((RF_Raid_t *) req->raidPtr, req->col, in rf_ReconThread()
2836 raidPtr->forceRecon = 0; in rf_ReconThread()
2841 raidPtr->recon_in_progress = 0; in rf_ReconThread()
2849 rf_RewriteParityThread(RF_Raid_t *raidPtr) in rf_RewriteParityThread() argument
2854 raidPtr->parity_rewrite_stripes_done = 0; in rf_RewriteParityThread()
2855 raidPtr->parity_rewrite_in_progress = 1; in rf_RewriteParityThread()
2857 retcode = rf_RewriteParity(raidPtr); in rf_RewriteParityThread()
2861 raidPtr->raidid, retcode); in rf_RewriteParityThread()
2866 raidPtr->parity_good = RF_RAID_CLEAN; in rf_RewriteParityThread()
2868 raidPtr->parity_rewrite_in_progress = 0; in rf_RewriteParityThread()
2871 if (raidPtr->waitShutdown) { in rf_RewriteParityThread()
2872 rf_lock_mutex2(raidPtr->rad_lock); in rf_RewriteParityThread()
2873 cv_broadcast(&raidPtr->parity_rewrite_cv); in rf_RewriteParityThread()
2874 rf_unlock_mutex2(raidPtr->rad_lock); in rf_RewriteParityThread()
2885 RF_Raid_t *raidPtr; in rf_ReconstructInPlaceThread() local
2888 raidPtr = req->raidPtr; in rf_ReconstructInPlaceThread()
2889 raidPtr->recon_in_progress = 1; in rf_ReconstructInPlaceThread()
2892 raidPtr->forceRecon = 1; in rf_ReconstructInPlaceThread()
2895 rf_ReconstructInPlace(raidPtr, req->col); in rf_ReconstructInPlaceThread()
2898 raidPtr->forceRecon = 0; in rf_ReconstructInPlaceThread()
2902 raidPtr->recon_in_progress = 0; in rf_ReconstructInPlaceThread()
3495 RF_Raid_t *raidPtr) in rf_create_configuration() argument
3528 rf_set_autoconfig(RF_Raid_t *raidPtr, int new_value) in rf_set_autoconfig() argument
3534 raidPtr->autoconfigure = new_value; in rf_set_autoconfig()
3536 for(column=0; column<raidPtr->numCol; column++) { in rf_set_autoconfig()
3537 if (raidPtr->Disks[column].status == rf_ds_optimal) { in rf_set_autoconfig()
3538 clabel = raidget_component_label(raidPtr, column); in rf_set_autoconfig()
3540 raidflush_component_label(raidPtr, column); in rf_set_autoconfig()
3543 for(column = 0; column < raidPtr->numSpare ; column++) { in rf_set_autoconfig()
3544 sparecol = raidPtr->numCol + column; in rf_set_autoconfig()
3546 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in rf_set_autoconfig()
3547 clabel = raidget_component_label(raidPtr, sparecol); in rf_set_autoconfig()
3549 raidflush_component_label(raidPtr, sparecol); in rf_set_autoconfig()
3556 rf_set_rootpartition(RF_Raid_t *raidPtr, int new_value) in rf_set_rootpartition() argument
3562 raidPtr->root_partition = new_value; in rf_set_rootpartition()
3563 for(column=0; column<raidPtr->numCol; column++) { in rf_set_rootpartition()
3564 if (raidPtr->Disks[column].status == rf_ds_optimal) { in rf_set_rootpartition()
3565 clabel = raidget_component_label(raidPtr, column); in rf_set_rootpartition()
3567 raidflush_component_label(raidPtr, column); in rf_set_rootpartition()
3570 for (column = 0; column < raidPtr->numSpare ; column++) { in rf_set_rootpartition()
3571 sparecol = raidPtr->numCol + column; in rf_set_rootpartition()
3573 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in rf_set_rootpartition()
3574 clabel = raidget_component_label(raidPtr, sparecol); in rf_set_rootpartition()
3576 raidflush_component_label(raidPtr, sparecol); in rf_set_rootpartition()
3623 raid_init_component_label(RF_Raid_t *raidPtr, RF_ComponentLabel_t *clabel) in raid_init_component_label() argument
3628 clabel->serial_number = raidPtr->serial_number; in raid_init_component_label()
3629 clabel->mod_counter = raidPtr->mod_counter; in raid_init_component_label()
3632 clabel->num_columns = raidPtr->numCol; in raid_init_component_label()
3636 clabel->sectPerSU = raidPtr->Layout.sectorsPerStripeUnit; in raid_init_component_label()
3637 clabel->SUsPerPU = raidPtr->Layout.SUsPerPU; in raid_init_component_label()
3638 clabel->SUsPerRU = raidPtr->Layout.SUsPerRU; in raid_init_component_label()
3640 clabel->blockSize = raidPtr->bytesPerSector; in raid_init_component_label()
3641 rf_component_label_set_numblocks(clabel, raidPtr->sectorsPerDisk); in raid_init_component_label()
3644 clabel->parityConfig = raidPtr->Layout.map->parityConfig; in raid_init_component_label()
3645 clabel->maxOutstanding = raidPtr->maxOutstanding; in raid_init_component_label()
3646 clabel->autoconfigure = raidPtr->autoconfigure; in raid_init_component_label()
3647 clabel->root_partition = raidPtr->root_partition; in raid_init_component_label()
3648 clabel->last_unit = raidPtr->raidid; in raid_init_component_label()
3649 clabel->config_order = raidPtr->config_order; in raid_init_component_label()
3652 rf_paritymap_init_label(raidPtr->parity_map, clabel); in raid_init_component_label()
3659 RF_Raid_t *raidPtr; in rf_auto_config_set() local
3687 raidPtr = &sc->sc_r; in rf_auto_config_set()
3690 raidPtr->softc = sc; in rf_auto_config_set()
3691 raidPtr->raidid = raidID; in rf_auto_config_set()
3692 raidPtr->openings = RAIDOUTSTANDING; in rf_auto_config_set()
3695 rf_create_configuration(cset->ac, config, raidPtr); in rf_auto_config_set()
3698 if (rf_Configure(raidPtr, config, cset->ac) == 0) { in rf_auto_config_set()
3701 rf_markalldirty(raidPtr); in rf_auto_config_set()
3702 raidPtr->autoconfigure = 1; /* XXX do this here? */ in rf_auto_config_set()
3713 raidPtr->root_partition = cset->rootable; in rf_auto_config_set()
3729 rf_pool_init(RF_Raid_t *raidPtr, char *w_chan, struct pool *p, size_t size, const char *pool_name, in rf_pool_init() argument
3734 snprintf(w_chan, RF_MAX_POOLNAMELEN, "raid%d_%s", raidPtr->raidid, pool_name); in rf_pool_init()
3750 rf_buf_queue_check(RF_Raid_t *raidPtr) in rf_buf_queue_check() argument
3755 rs = raidPtr->softc; in rf_buf_queue_check()
3761 if (dk_strategy_pending(dksc) && raidPtr->openings > 0) { in rf_buf_queue_check()
3826 rf_set_geometry(struct raid_softc *rs, RF_Raid_t *raidPtr) in rf_set_geometry() argument
3833 dg->dg_secperunit = raidPtr->totalSectors; in rf_set_geometry()
3834 dg->dg_secsize = raidPtr->bytesPerSector; in rf_set_geometry()
3835 dg->dg_nsectors = raidPtr->Layout.dataSectorsPerStripe; in rf_set_geometry()
3836 dg->dg_ntracks = 4 * raidPtr->numCol; in rf_set_geometry()
3848 rf_get_component_caches(RF_Raid_t *raidPtr, int *data) in rf_get_component_caches() argument
3854 for (c = 0; c < raidPtr->numCol + raidPtr->numSpare; c++) { in rf_get_component_caches()
3859 if (!RF_DEAD_DISK(raidPtr->Disks[c].status)) { in rf_get_component_caches()
3860 error = VOP_IOCTL(raidPtr->raid_cinfo[c].ci_vp, in rf_get_component_caches()
3865 raidPtr->raidid, in rf_get_component_caches()
3866 raidPtr->Disks[c].devname); in rf_get_component_caches()
3891 rf_sync_component_cache(RF_Raid_t *raidPtr, int c, int force) in rf_sync_component_cache() argument
3895 e = VOP_IOCTL(raidPtr->raid_cinfo[c].ci_vp, DIOCCACHESYNC, in rf_sync_component_cache()
3900 raidPtr->raidid, i, raidPtr->Disks[c].devname, e); in rf_sync_component_cache()
3906 rf_sync_component_caches(RF_Raid_t *raidPtr, int force) in rf_sync_component_caches() argument
3911 for (c = 0; c < raidPtr->numCol; c++) { in rf_sync_component_caches()
3912 if (raidPtr->Disks[c].status == rf_ds_optimal) { in rf_sync_component_caches()
3913 int e = rf_sync_component_cache(raidPtr, c, force); in rf_sync_component_caches()
3919 for (c = 0; c < raidPtr->numSpare ; c++) { in rf_sync_component_caches()
3920 int sparecol = raidPtr->numCol + c; in rf_sync_component_caches()
3923 if (raidPtr->Disks[sparecol].status == rf_ds_used_spare) { in rf_sync_component_caches()
3924 int e = rf_sync_component_cache(raidPtr, sparecol, in rf_sync_component_caches()
3935 rf_check_recon_status_ext(RF_Raid_t *raidPtr, RF_ProgressInfo_t *info) in rf_check_recon_status_ext() argument
3940 if (raidPtr->status != rf_rs_reconstructing) { in rf_check_recon_status_ext()
3944 info->total = raidPtr->reconControl->numRUsTotal; in rf_check_recon_status_ext()
3945 info->completed = raidPtr->reconControl->numRUsComplete; in rf_check_recon_status_ext()
3952 rf_check_parityrewrite_status_ext(RF_Raid_t *raidPtr, RF_ProgressInfo_t *info) in rf_check_parityrewrite_status_ext() argument
3957 if (raidPtr->parity_rewrite_in_progress == 1) { in rf_check_parityrewrite_status_ext()
3958 info->total = raidPtr->Layout.numStripe; in rf_check_parityrewrite_status_ext()
3959 info->completed = raidPtr->parity_rewrite_stripes_done; in rf_check_parityrewrite_status_ext()
3969 rf_check_copyback_status_ext(RF_Raid_t *raidPtr, RF_ProgressInfo_t *info) in rf_check_copyback_status_ext() argument
3980 rf_get_info(RF_Raid_t *raidPtr, RF_DeviceConfig_t *config) in rf_get_info() argument
3984 if (!raidPtr->valid) in rf_get_info()
3986 config->cols = raidPtr->numCol; in rf_get_info()
3987 config->ndevs = raidPtr->numCol; in rf_get_info()
3990 config->nspares = raidPtr->numSpare; in rf_get_info()
3993 config->maxqdepth = raidPtr->maxQueueDepth; in rf_get_info()
3996 config->devs[d] = raidPtr->Disks[j]; in rf_get_info()
4000 config->spares[i] = raidPtr->Disks[raidPtr->numCol + i]; in rf_get_info()
4010 rf_get_component_label(RF_Raid_t *raidPtr, void *data) in rf_get_component_label() argument
4016 if ((column < 0) || (column >= raidPtr->numCol + raidPtr->numSpare)) in rf_get_component_label()
4018 raid_clabel = raidget_component_label(raidPtr, column); in rf_get_component_label()