Lines Matching refs:raidPtr

110 rf_ConfigureDisks(RF_ShutdownList_t **listp, RF_Raid_t *raidPtr,  in rf_ConfigureDisks()  argument
122 ret = rf_AllocDiskStructures(raidPtr, cfgPtr); in rf_ConfigureDisks()
126 disks = raidPtr->Disks; in rf_ConfigureDisks()
129 for (c = 0; c < raidPtr->numCol; c++) { in rf_ConfigureDisks()
130 ret = rf_ConfigureDisk(raidPtr, in rf_ConfigureDisks()
138 ret = raidfetch_component_label(raidPtr, c); in rf_ConfigureDisks()
143 if (!rf_reasonable_label(&raidPtr->raid_cinfo[c].ci_label,0) && !force) { in rf_ConfigureDisks()
165 raidPtr->status = rf_rs_degraded; in rf_ConfigureDisks()
171 for (c = 0; c < raidPtr->numCol; c++) { in rf_ConfigureDisks()
192 if (rf_CheckLabels( raidPtr, cfgPtr )) { in rf_ConfigureDisks()
193 printf("raid%d: There were fatal errors\n", raidPtr->raidid); in rf_ConfigureDisks()
196 raidPtr->raidid); in rf_ConfigureDisks()
203 for (c = 0; c < raidPtr->numCol; c++) { in rf_ConfigureDisks()
218 raidPtr->sectorsPerDisk = min_numblks; in rf_ConfigureDisks()
219 raidPtr->logBytesPerSector = ffs(bs) - 1; in rf_ConfigureDisks()
220 raidPtr->bytesPerSector = bs; in rf_ConfigureDisks()
221 raidPtr->sectorMask = bs - 1; in rf_ConfigureDisks()
226 rf_UnconfigureVnodes( raidPtr ); in rf_ConfigureDisks()
238 rf_ConfigureSpareDisks(RF_ShutdownList_t **listp, RF_Raid_t *raidPtr, in rf_ConfigureSpareDisks() argument
251 disks = &raidPtr->Disks[raidPtr->numCol]; in rf_ConfigureSpareDisks()
252 for (i = 0; i < raidPtr->numSpare; i++) { in rf_ConfigureSpareDisks()
253 ret = rf_ConfigureDisk(raidPtr, &cfgPtr->spare_names[i][0], in rf_ConfigureSpareDisks()
254 &disks[i], raidPtr->numCol + i); in rf_ConfigureSpareDisks()
273 bs = 1 << raidPtr->logBytesPerSector; in rf_ConfigureSpareDisks()
274 for (i = 0; i < raidPtr->numSpare; i++) { in rf_ConfigureSpareDisks()
280 if (disks[i].numBlocks < raidPtr->sectorsPerDisk) { in rf_ConfigureSpareDisks()
283 raidPtr->sectorsPerDisk); in rf_ConfigureSpareDisks()
287 if (disks[i].numBlocks > raidPtr->sectorsPerDisk) { in rf_ConfigureSpareDisks()
290 raidPtr->sectorsPerDisk, in rf_ConfigureSpareDisks()
293 disks[i].numBlocks = raidPtr->sectorsPerDisk; in rf_ConfigureSpareDisks()
313 rf_UnconfigureVnodes( raidPtr ); in rf_ConfigureSpareDisks()
319 rf_AllocDiskStructures(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr) in rf_AllocDiskStructures() argument
322 size_t entries = raidPtr->numCol + RF_MAXSPARE; in rf_AllocDiskStructures()
326 raidPtr->Disks = RF_MallocAndAdd( in rf_AllocDiskStructures()
327 entries * sizeof(*raidPtr->Disks), raidPtr->cleanupList); in rf_AllocDiskStructures()
328 if (raidPtr->Disks == NULL) { in rf_AllocDiskStructures()
334 raidPtr->raid_cinfo = RF_MallocAndAdd( in rf_AllocDiskStructures()
335 entries * sizeof(*raidPtr->raid_cinfo), raidPtr->cleanupList); in rf_AllocDiskStructures()
336 if (raidPtr->raid_cinfo == NULL) { in rf_AllocDiskStructures()
341 raidPtr->abortRecon = RF_MallocAndAdd( in rf_AllocDiskStructures()
342 entries * sizeof(int), raidPtr->cleanupList); in rf_AllocDiskStructures()
343 if (raidPtr->abortRecon == NULL) { in rf_AllocDiskStructures()
351 rf_UnconfigureVnodes( raidPtr ); in rf_AllocDiskStructures()
359 rf_AutoConfigureDisks(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr, in rf_AutoConfigureDisks() argument
377 ret = rf_AllocDiskStructures(raidPtr, cfgPtr); in rf_AutoConfigureDisks()
381 disks = raidPtr->Disks; in rf_AutoConfigureDisks()
406 for (c = 0; c < raidPtr->numCol; c++) { in rf_AutoConfigureDisks()
474 raidPtr->raid_cinfo[c].ci_vp = ac->vp; in rf_AutoConfigureDisks()
475 raidPtr->raid_cinfo[c].ci_dev = ac->dev; in rf_AutoConfigureDisks()
477 memcpy(raidget_component_label(raidPtr, c), in rf_AutoConfigureDisks()
509 raidPtr->serial_number = ac->clabel->serial_number; in rf_AutoConfigureDisks()
539 raidPtr->status = rf_rs_degraded; in rf_AutoConfigureDisks()
540 raidPtr->numFailures = numFailuresThisRow; in rf_AutoConfigureDisks()
560 raidPtr->mod_counter = mod_counter; in rf_AutoConfigureDisks()
563 raidPtr->parity_good = parity_good; in rf_AutoConfigureDisks()
564 raidPtr->sectorsPerDisk = min_numblks; in rf_AutoConfigureDisks()
565 raidPtr->logBytesPerSector = ffs(bs) - 1; in rf_AutoConfigureDisks()
566 raidPtr->bytesPerSector = bs; in rf_AutoConfigureDisks()
567 raidPtr->sectorMask = bs - 1; in rf_AutoConfigureDisks()
572 rf_UnconfigureVnodes( raidPtr ); in rf_AutoConfigureDisks()
580 rf_ConfigureDisk(RF_Raid_t *raidPtr, char *bf, RF_RaidDisk_t *diskPtr, in rf_ConfigureDisk() argument
598 raidPtr->raid_cinfo[col].ci_vp = NULL; in rf_ConfigureDisk()
599 raidPtr->raid_cinfo[col].ci_dev = 0; in rf_ConfigureDisk()
636 if (raidPtr->bytesPerSector == 0) in rf_ConfigureDisk()
637 raidPtr->bytesPerSector = diskPtr->blockSize; in rf_ConfigureDisk()
640 raidPtr->raid_cinfo[col].ci_vp = vp; in rf_ConfigureDisk()
641 raidPtr->raid_cinfo[col].ci_dev = vp->v_rdev; in rf_ConfigureDisk()
657 rf_print_label_status(RF_Raid_t *raidPtr, int column, char *dev_name, in rf_print_label_status() argument
662 raidPtr->raidid, dev_name, column ); in rf_print_label_status()
673 static int rf_check_label_vitals(RF_Raid_t *raidPtr, int row, int column, in rf_check_label_vitals() argument
697 if (raidPtr->numCol != ci_label->num_columns) { in rf_check_label_vitals()
710 rf_handle_hosed(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr, int hosed_column, in rf_handle_hosed() argument
720 if (again && raidPtr->Disks[hosed_column].status == rf_ds_failed) in rf_handle_hosed()
723 raidPtr->Disks[hosed_column].status = rf_ds_failed; in rf_handle_hosed()
724 raidPtr->numFailures++; in rf_handle_hosed()
725 raidPtr->status = rf_rs_degraded; in rf_handle_hosed()
736 rf_CheckLabels(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr) in rf_CheckLabels() argument
783 for (c = 0; c < raidPtr->numCol; c++) { in rf_CheckLabels()
784 if (raidPtr->Disks[c].status != rf_ds_optimal) in rf_CheckLabels()
786 ci_label = raidget_component_label(raidPtr, c); in rf_CheckLabels()
823 printf("raid%d: Summary of serial numbers:\n", raidPtr->raidid); in rf_CheckLabels()
827 printf("raid%d: Summary of mod counters:\n", raidPtr->raidid); in rf_CheckLabels()
840 for (c = 0; c < raidPtr->numCol; c++) { in rf_CheckLabels()
841 if (raidPtr->Disks[c].status != rf_ds_optimal) in rf_CheckLabels()
843 ci_label = raidget_component_label(raidPtr, c); in rf_CheckLabels()
850 rf_handle_hosed(raidPtr, cfgPtr, hosed_column, in rf_CheckLabels()
866 raidPtr->serial_number = serial_number; in rf_CheckLabels()
889 for (c = 0; c < raidPtr->numCol; c++) { in rf_CheckLabels()
890 if (raidPtr->Disks[c].status != rf_ds_optimal) in rf_CheckLabels()
893 ci_label = raidget_component_label(raidPtr, c); in rf_CheckLabels()
908 rf_handle_hosed(raidPtr, cfgPtr, hosed_column, in rf_CheckLabels()
920 raidPtr->mod_counter = mod_number; in rf_CheckLabels()
933 raidPtr->raidid); in rf_CheckLabels()
939 raidPtr->raidid); in rf_CheckLabels()
943 for (c = 0; c < raidPtr->numCol; c++) { in rf_CheckLabels()
944 if (raidPtr->Disks[c].status != rf_ds_optimal) { in rf_CheckLabels()
955 for (c = 0; c < raidPtr->numCol; c++) { in rf_CheckLabels()
957 ci_label = raidget_component_label(raidPtr, c); in rf_CheckLabels()
961 raidPtr->raidid, dev_name); in rf_CheckLabels()
963 rf_print_label_status( raidPtr, c, dev_name, ci_label); in rf_CheckLabels()
964 if (rf_check_label_vitals( raidPtr, 0, c, in rf_CheckLabels()
981 raidPtr->parity_good = parity_good; in rf_CheckLabels()
987 rf_add_hot_spare(RF_Raid_t *raidPtr, RF_SingleComponent_t *sparePtr) in rf_add_hot_spare() argument
997 if (raidPtr->numSpare >= RF_MAXSPARE) { in rf_add_hot_spare()
998 RF_ERRORMSG1("Too many spares: %d\n", raidPtr->numSpare); in rf_add_hot_spare()
1002 rf_lock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1003 while (raidPtr->changing_components == 1) { in rf_add_hot_spare()
1004 rf_wait_cond2(raidPtr->changing_components_cv, raidPtr->mutex); in rf_add_hot_spare()
1006 raidPtr->changing_components = 1; in rf_add_hot_spare()
1007 rf_unlock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1010 disks = &raidPtr->Disks[raidPtr->numCol]; in rf_add_hot_spare()
1012 spare_number = raidPtr->numSpare; in rf_add_hot_spare()
1014 ret = rf_ConfigureDisk(raidPtr, sparePtr->component_name, in rf_add_hot_spare()
1016 raidPtr->numCol + spare_number); in rf_add_hot_spare()
1023 rf_close_component(raidPtr, raidPtr->raid_cinfo[raidPtr->numCol+spare_number].ci_vp, 0); in rf_add_hot_spare()
1039 bs = 1 << raidPtr->logBytesPerSector; in rf_add_hot_spare()
1042 rf_close_component(raidPtr, raidPtr->raid_cinfo[raidPtr->numCol+spare_number].ci_vp, 0); in rf_add_hot_spare()
1046 if (disks[spare_number].numBlocks < raidPtr->sectorsPerDisk) { in rf_add_hot_spare()
1050 raidPtr->sectorsPerDisk); in rf_add_hot_spare()
1051 rf_close_component(raidPtr, raidPtr->raid_cinfo[raidPtr->numCol+spare_number].ci_vp, 0); in rf_add_hot_spare()
1056 raidPtr->sectorsPerDisk) { in rf_add_hot_spare()
1059 raidPtr->sectorsPerDisk, in rf_add_hot_spare()
1062 disks[spare_number].numBlocks = raidPtr->sectorsPerDisk; in rf_add_hot_spare()
1071 RF_ASSERT(spare_number <= raidPtr->maxQueue); in rf_add_hot_spare()
1073 spareQueues = &raidPtr->Queues[raidPtr->numCol]; in rf_add_hot_spare()
1074 if (spare_number == raidPtr->maxQueue) { in rf_add_hot_spare()
1075 ret = rf_ConfigureDiskQueue(raidPtr, &spareQueues[spare_number], in rf_add_hot_spare()
1076 raidPtr->numCol + spare_number, in rf_add_hot_spare()
1077 raidPtr->qType, in rf_add_hot_spare()
1078 raidPtr->sectorsPerDisk, in rf_add_hot_spare()
1079 raidPtr->Disks[raidPtr->numCol + in rf_add_hot_spare()
1081 raidPtr->maxOutstanding, in rf_add_hot_spare()
1082 &raidPtr->shutdownList, in rf_add_hot_spare()
1083 raidPtr->cleanupList); in rf_add_hot_spare()
1086 rf_lock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1087 raidPtr->maxQueue++; in rf_add_hot_spare()
1088 rf_unlock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1095 rf_lock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1098 raidPtr->numSpare++; in rf_add_hot_spare()
1101 raidPtr->changing_components = 0; in rf_add_hot_spare()
1102 rf_signal_cond2(raidPtr->changing_components_cv); in rf_add_hot_spare()
1103 rf_unlock_mutex2(raidPtr->mutex); in rf_add_hot_spare()
1109 rf_remove_hot_spare(RF_Raid_t *raidPtr, RF_SingleComponent_t *sparePtr) in rf_remove_hot_spare() argument
1117 spare_number = sparePtr->column - raidPtr->numCol; in rf_remove_hot_spare()
1118 if (spare_number < 0 || spare_number > raidPtr->numSpare) in rf_remove_hot_spare()
1121 rf_lock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1122 while (raidPtr->changing_components == 1) { in rf_remove_hot_spare()
1123 rf_wait_cond2(raidPtr->changing_components_cv, raidPtr->mutex); in rf_remove_hot_spare()
1125 raidPtr->changing_components = 1; in rf_remove_hot_spare()
1126 rf_unlock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1128 rf_SuspendNewRequestsAndWait(raidPtr); in rf_remove_hot_spare()
1130 disk = &raidPtr->Disks[raidPtr->numCol + spare_number]; in rf_remove_hot_spare()
1138 vp = raidPtr->raid_cinfo[raidPtr->numCol + spare_number].ci_vp; in rf_remove_hot_spare()
1139 raidPtr->raid_cinfo[raidPtr->numCol + spare_number].ci_vp = NULL; in rf_remove_hot_spare()
1140 raidPtr->raid_cinfo[raidPtr->numCol + spare_number].ci_dev = 0; in rf_remove_hot_spare()
1149 rf_close_component(raidPtr, vp, 0); in rf_remove_hot_spare()
1151 rf_lock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1155 for (i = raidPtr->numCol + spare_number; i < raidPtr->numCol+raidPtr->numSpare-1; i++) { in rf_remove_hot_spare()
1157 rf_swap_components(raidPtr, i, i+1); in rf_remove_hot_spare()
1160 raidPtr->numSpare--; in rf_remove_hot_spare()
1161 rf_unlock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1163 rf_ResumeNewRequests(raidPtr); in rf_remove_hot_spare()
1169 rf_lock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1170 raidPtr->changing_components = 0; in rf_remove_hot_spare()
1171 rf_signal_cond2(raidPtr->changing_components_cv); in rf_remove_hot_spare()
1172 rf_unlock_mutex2(raidPtr->mutex); in rf_remove_hot_spare()
1181 rf_delete_component(RF_Raid_t *raidPtr, RF_SingleComponent_t *component) in rf_delete_component() argument
1188 if (col < 0 || col >= raidPtr->numCol) in rf_delete_component()
1191 rf_lock_mutex2(raidPtr->mutex); in rf_delete_component()
1192 while (raidPtr->changing_components == 1) { in rf_delete_component()
1193 rf_wait_cond2(raidPtr->changing_components_cv, raidPtr->mutex); in rf_delete_component()
1195 raidPtr->changing_components = 1; in rf_delete_component()
1196 rf_unlock_mutex2(raidPtr->mutex); in rf_delete_component()
1198 disk = &raidPtr->Disks[col]; in rf_delete_component()
1211 vp = raidPtr->raid_cinfo[col].ci_vp; in rf_delete_component()
1212 raidPtr->raid_cinfo[col].ci_vp = NULL; in rf_delete_component()
1213 raidPtr->raid_cinfo[col].ci_dev = 0; in rf_delete_component()
1221 rf_close_component(raidPtr, vp, 0); in rf_delete_component()
1225 rf_lock_mutex2(raidPtr->mutex); in rf_delete_component()
1226 raidPtr->changing_components = 0; in rf_delete_component()
1227 rf_signal_cond2(raidPtr->changing_components_cv); in rf_delete_component()
1228 rf_unlock_mutex2(raidPtr->mutex); in rf_delete_component()
1234 rf_remove_component(RF_Raid_t *raidPtr, RF_SingleComponent_t *component) in rf_remove_component() argument
1238 if (col < 0 || col >= raidPtr->numCol + raidPtr->numSpare) in rf_remove_component()
1241 if (col >= raidPtr->numCol) in rf_remove_component()
1242 return rf_remove_hot_spare(raidPtr, component); in rf_remove_component()
1244 return rf_delete_component(raidPtr, component); in rf_remove_component()
1248 rf_incorporate_hot_spare(RF_Raid_t *raidPtr, in rf_incorporate_hot_spare() argument
1259 rf_swap_components(RF_Raid_t *raidPtr, int a, int b) in rf_swap_components() argument
1269 RF_ASSERT(raidPtr->accesses_suspended == 0); in rf_swap_components()
1272 snprintf(tmpdevname, sizeof(tmpdevname), "%s", raidPtr->Disks[a].devname); in rf_swap_components()
1273 …snprintf(raidPtr->Disks[a].devname, sizeof(raidPtr->Disks[a].devname), "%s", raidPtr->Disks[b].dev… in rf_swap_components()
1274 snprintf(raidPtr->Disks[b].devname, sizeof(raidPtr->Disks[b].devname), "%s", tmpdevname); in rf_swap_components()
1277 tmp_ci_vp = raidPtr->raid_cinfo[a].ci_vp; in rf_swap_components()
1278 raidPtr->raid_cinfo[a].ci_vp = raidPtr->raid_cinfo[b].ci_vp; in rf_swap_components()
1279 raidPtr->raid_cinfo[b].ci_vp = tmp_ci_vp; in rf_swap_components()
1282 tmp_ci_dev = raidPtr->raid_cinfo[a].ci_dev; in rf_swap_components()
1283 raidPtr->raid_cinfo[a].ci_dev = raidPtr->raid_cinfo[b].ci_dev; in rf_swap_components()
1284 raidPtr->raid_cinfo[b].ci_dev = tmp_ci_dev; in rf_swap_components()
1287 tmp_dev = raidPtr->Disks[a].dev; in rf_swap_components()
1288 raidPtr->Disks[a].dev = raidPtr->Disks[b].dev; in rf_swap_components()
1289 raidPtr->Disks[b].dev = tmp_dev; in rf_swap_components()
1292 tmp_ci_label = raidPtr->raid_cinfo[a].ci_label; in rf_swap_components()
1293 raidPtr->raid_cinfo[a].ci_label = raidPtr->raid_cinfo[b].ci_label; in rf_swap_components()
1294 raidPtr->raid_cinfo[b].ci_label = tmp_ci_label; in rf_swap_components()
1297 tmp_status = raidPtr->Disks[a].status; in rf_swap_components()
1298 raidPtr->Disks[a].status = raidPtr->Disks[b].status; in rf_swap_components()
1299 raidPtr->Disks[b].status = tmp_status; in rf_swap_components()