Home | History | Annotate | Download | only in raidframe

Lines Matching defs:raidPtr

149 static int rf_ConfigureRDFreeList(RF_ShutdownList_t ** listp, RF_Raid_t *raidPtr, RF_Config_t *cfgPtr);
205 rf_Shutdown(RF_Raid_t *raidPtr)
208 if (!raidPtr->valid) {
220 rf_lock_mutex2(raidPtr->rad_lock);
221 if (raidPtr->waitShutdown) {
222 rf_unlock_mutex2(raidPtr->rad_lock);
225 raidPtr->waitShutdown = 1;
226 while (raidPtr->nAccOutstanding) {
227 rf_wait_cond2(raidPtr->outstandingCond, raidPtr->rad_lock);
231 while (raidPtr->parity_rewrite_in_progress) {
233 raidPtr->raidid);
234 rf_wait_cond2(raidPtr->parity_rewrite_cv, raidPtr->rad_lock);
236 rf_unlock_mutex2(raidPtr->rad_lock);
239 rf_lock_mutex2(raidPtr->mutex);
240 while (raidPtr->reconInProgress) {
242 raidPtr->raidid);
243 rf_wait_cond2(raidPtr->waitForReconCond, raidPtr->mutex);
245 rf_unlock_mutex2(raidPtr->mutex);
247 raidPtr->valid = 0;
249 if (raidPtr->parity_map != NULL)
250 rf_paritymap_detach(raidPtr);
252 rf_update_component_labels(raidPtr, RF_FINAL_COMPONENT_UPDATE);
254 rf_UnconfigureVnodes(raidPtr);
256 rf_FreeEmergBuffers(raidPtr);
258 rf_ShutdownList(&raidPtr->shutdownList);
260 rf_destroy_mutex_cond(raidPtr);
281 rf_UnconfigureVnodes(raidPtr); \
282 rf_FreeEmergBuffers(raidPtr); \
283 rf_ShutdownList(&raidPtr->shutdownList); \
285 rf_destroy_mutex_cond(raidPtr); \
289 rc = f (&raidPtr->shutdownList, raidPtr, cfgPtr); \
298 rf_Configure(RF_Raid_t *raidPtr, RF_Config_t *cfgPtr, RF_AutoConfig_t *ac)
328 rf_alloc_mutex_cond(raidPtr);
333 rf_MakeAllocList(raidPtr->cleanupList);
334 if (raidPtr->cleanupList == NULL) {
338 rf_ShutdownCreate(&raidPtr->shutdownList,
340 raidPtr->cleanupList);
347 raidPtr->numCol = cfgPtr->numCol;
348 raidPtr->numSpare = cfgPtr->numSpare;
349 raidPtr->maxQueue = cfgPtr->numSpare;
351 raidPtr->status = rf_rs_optimal;
352 raidPtr->reconControl = NULL;
368 raidPtr->nAccOutstanding = 0;
369 raidPtr->waitShutdown = 0;
375 rf_AutoConfigureDisks(raidPtr, cfgPtr, ac);
390 rf_InitPSStatus(raidPtr);
393 for (col = 0; col < raidPtr->numCol; col++) {
397 raidPtr->hist_diskreq[col] = 0;
400 raidPtr->numNewFailures = 0;
401 raidPtr->parity_rewrite_in_progress = 0;
402 raidPtr->changing_components = 0;
403 raidPtr->recon_in_progress = 0;
405 raidPtr->maxOutstanding = cfgPtr->maxOutstandingDiskReqs;
409 raidPtr->autoconfigure = 0;
410 raidPtr->root_partition = 0;
411 raidPtr->last_unit = raidPtr->raidid;
412 raidPtr->config_order = 0;
415 raidPtr->keep_acc_totals = 1;
419 raidPtr->iobuf = NULL;
421 rc = rf_AllocEmergBuffers(raidPtr);
424 raidPtr->raidid);
431 rf_paritymap_attach(raidPtr, cfgPtr->force);
434 raidPtr->valid = 1;
436 printf("raid%d: %s\n", raidPtr->raidid,
437 raidPtr->Layout.map->configName);
438 printf("raid%d: Components:", raidPtr->raidid);
440 for (col = 0; col < raidPtr->numCol; col++) {
444 printf(" %s", raidPtr->Disks[col].devname);
445 if (RF_DEAD_DISK(raidPtr->Disks[col].status)) {
448 clabel = raidget_component_label(raidPtr, col);
455 "than first component.", raidPtr->raidid, col);
459 raidPtr->raidid,
460 raidPtr->totalSectors,
461 (raidPtr->totalSectors / 1024 *
462 (1 << raidPtr->logBytesPerSector) / 1024));
465 raidPtr->raidid);
480 rf_AllocEmergBuffers(RF_Raid_t *raidPtr)
487 raidPtr->numEmergencyBuffers = 10 * raidPtr->numCol;
490 raidPtr->raidid,
491 raidPtr->numEmergencyBuffers,
492 (int)(raidPtr->Layout.sectorsPerStripeUnit <<
493 raidPtr->logBytesPerSector));
495 for (i = 0; i < raidPtr->numEmergencyBuffers; i++) {
496 tmpbuf = malloc( raidPtr->Layout.sectorsPerStripeUnit <<
497 raidPtr->logBytesPerSector,
500 vple = rf_AllocVPListElem(raidPtr);
502 vple->next = raidPtr->iobuf;
503 raidPtr->iobuf = vple;
504 raidPtr->iobuf_count++;
507 raidPtr->raidid);
513 raidPtr->numEmergencyStripeBuffers = 10;
514 for (i = 0; i < raidPtr->numEmergencyStripeBuffers; i++) {
515 tmpbuf = malloc( raidPtr->numCol * (raidPtr->Layout.sectorsPerStripeUnit <<
516 raidPtr->logBytesPerSector),
519 vple = rf_AllocVPListElem(raidPtr);
521 vple->next = raidPtr->stripebuf;
522 raidPtr->stripebuf = vple;
523 raidPtr->stripebuf_count++;
526 raidPtr->raidid);
535 rf_FreeEmergBuffers(RF_Raid_t *raidPtr)
540 while (raidPtr->iobuf != NULL) {
541 tmp = raidPtr->iobuf;
542 raidPtr->iobuf = raidPtr->iobuf->next;
544 rf_FreeVPListElem(raidPtr,tmp);
548 while (raidPtr->stripebuf != NULL) {
549 tmp = raidPtr->stripebuf;
550 raidPtr->stripebuf = raidPtr->stripebuf->next;
552 rf_FreeVPListElem(raidPtr, tmp);
560 RF_Raid_t *raidPtr;
562 raidPtr = (RF_Raid_t *) arg;
564 pool_destroy(&raidPtr->pools.rad);
568 rf_ConfigureRDFreeList(RF_ShutdownList_t **listp, RF_Raid_t *raidPtr,
572 rf_pool_init(raidPtr, raidPtr->poolNames.rad, &raidPtr->pools.rad, sizeof(RF_RaidAccessDesc_t),
574 rf_ShutdownCreate(listp, rf_ShutdownRDFreeList, raidPtr);
579 rf_AllocRaidAccDesc(RF_Raid_t *raidPtr, RF_IoType_t type,
586 desc = pool_get(&raidPtr->pools.rad, PR_WAITOK);
588 rf_lock_mutex2(raidPtr->rad_lock);
589 if (raidPtr->waitShutdown) {
595 rf_unlock_mutex2(raidPtr->rad_lock);
596 pool_put(&raidPtr->pools.rad, desc);
599 raidPtr->nAccOutstanding++;
601 rf_unlock_mutex2(raidPtr->rad_lock);
603 desc->raidPtr = (void *) raidPtr;
631 RF_Raid_t *raidPtr = desc->raidPtr;
642 rf_FreeDAGList(raidPtr, temp);
648 rf_FreeIOBuffer(raidPtr, tmp);
654 rf_FreeStripeBuffer(raidPtr, tmp);
657 pool_put(&raidPtr->pools.rad, desc);
658 rf_lock_mutex2(raidPtr->rad_lock);
659 raidPtr->nAccOutstanding--;
660 if (raidPtr->waitShutdown) {
661 rf_signal_cond2(raidPtr->outstandingCond);
663 rf_unlock_mutex2(raidPtr->rad_lock);
675 rf_DoAccess(RF_Raid_t * raidPtr, RF_IoType_t type, RF_RaidAddr_t raidAddress, RF_SectorCount_t numBlocks,
686 printf("logBytes is: %d %d %d\n", raidPtr->raidid,
687 raidPtr->logBytesPerSector,
688 (int) rf_RaidAddressToByte(raidPtr, numBlocks));
689 printf("raid%d: %s raidAddr %d (stripeid %d-%d) numBlocks %d (%d bytes) buf 0x%lx\n", raidPtr->raidid,
691 (int) rf_RaidAddressToStripeID(&raidPtr->Layout, raidAddress),
692 (int) rf_RaidAddressToStripeID(&raidPtr->Layout, raidAddress + numBlocks - 1),
694 (int) rf_RaidAddressToByte(raidPtr, numBlocks),
699 desc = rf_AllocRaidAccDesc(raidPtr, type, raidAddress,
700 numBlocks, lbufPtr, bp, flags, raidPtr->Layout.map->states);
709 if (raidPtr->parity_map != NULL &&
711 rf_paritymap_begin(raidPtr->parity_map, raidAddress,
721 rf_SetReconfiguredMode(RF_Raid_t *raidPtr, int col)
723 if (!(raidPtr->Layout.map->flags & RF_DISTRIBUTE_SPARE)) {
727 rf_lock_mutex2(raidPtr->mutex);
728 raidPtr->numFailures++;
729 raidPtr->Disks[col].status = rf_ds_dist_spared;
730 raidPtr->status = rf_rs_reconfigured;
731 rf_update_component_labels(raidPtr, RF_NORMAL_COMPONENT_UPDATE);
734 if (raidPtr->Layout.map->flags & RF_BD_DECLUSTERED)
735 rf_InstallSpareTable(raidPtr, col);
736 rf_unlock_mutex2(raidPtr->mutex);
742 rf_FailDisk(RF_Raid_t *raidPtr, int fcol, int initRecon)
749 rf_SuspendNewRequestsAndWait(raidPtr);
751 rf_lock_mutex2(raidPtr->mutex);
752 if (raidPtr->Disks[fcol].status != rf_ds_failed) {
756 raidPtr->numFailures++;
757 raidPtr->Disks[fcol].status = rf_ds_failed;
758 raidPtr->status = rf_rs_degraded;
760 rf_unlock_mutex2(raidPtr->mutex);
762 rf_update_component_labels(raidPtr, RF_NORMAL_COMPONENT_UPDATE);
767 rf_close_component(raidPtr, raidPtr->raid_cinfo[fcol].ci_vp,
768 raidPtr->Disks[fcol].auto_configured);
770 rf_lock_mutex2(raidPtr->mutex);
771 raidPtr->raid_cinfo[fcol].ci_vp = NULL;
776 raidPtr->Disks[fcol].auto_configured = 0;
777 rf_unlock_mutex2(raidPtr->mutex);
781 rf_ResumeNewRequests(raidPtr);
784 rf_ReconstructFailedDisk(raidPtr, fcol);
791 rf_SignalQuiescenceLock(RF_Raid_t *raidPtr)
796 raidPtr->raidid);
799 raidPtr->access_suspend_release = 1;
801 if (raidPtr->waiting_for_quiescence) {
802 SIGNAL_QUIESCENT_COND(raidPtr);
807 rf_SuspendNewRequestsAndWait(RF_Raid_t *raidPtr)
811 printf("raid%d: Suspending new reqs\n", raidPtr->raidid);
813 rf_lock_mutex2(raidPtr->access_suspend_mutex);
814 raidPtr->accesses_suspended++;
815 raidPtr->waiting_for_quiescence = (raidPtr->accs_in_flight == 0) ? 0 : 1;
817 if (raidPtr->waiting_for_quiescence) {
818 raidPtr->access_suspend_release = 0;
819 while (!raidPtr->access_suspend_release) {
822 raidPtr->raidid);
824 WAIT_FOR_QUIESCENCE(raidPtr);
825 raidPtr->waiting_for_quiescence = 0;
829 printf("raid%d: Quiescence reached..\n", raidPtr->raidid);
832 rf_unlock_mutex2(raidPtr->access_suspend_mutex);
833 return (raidPtr->waiting_for_quiescence);
837 rf_ResumeNewRequests(RF_Raid_t *raidPtr)
843 printf("raid%d: Resuming new requests\n", raidPtr->raidid);
846 rf_lock_mutex2(raidPtr->access_suspend_mutex);
847 raidPtr->accesses_suspended--;
848 if (raidPtr->accesses_suspended == 0)
849 cb = raidPtr->quiesce_wait_list;
852 raidPtr->quiesce_wait_list = NULL;
853 rf_unlock_mutex2(raidPtr->access_suspend_mutex);
859 rf_FreeCallbackFuncDesc(raidPtr, t);
938 rf_alloc_mutex_cond(RF_Raid_t *raidPtr)
941 rf_init_mutex2(raidPtr->mutex, IPL_VM);
943 rf_init_cond2(raidPtr->outstandingCond, "rfocond");
944 rf_init_cond2(raidPtr->parity_rewrite_cv, "rfprwshutdown");
945 rf_init_mutex2(raidPtr->rad_lock, IPL_VM);
947 rf_init_mutex2(raidPtr->access_suspend_mutex, IPL_VM);
948 rf_init_cond2(raidPtr->access_suspend_cv, "rfquiesce");
950 rf_init_cond2(raidPtr->waitForReconCond, "rfrcnw");
952 rf_init_cond2(raidPtr->changing_components_cv, "rfcc");
956 rf_destroy_mutex_cond(RF_Raid_t *raidPtr)
959 rf_destroy_cond2(raidPtr->waitForReconCond);
960 rf_destroy_cond2(raidPtr->changing_components_cv);
962 rf_destroy_mutex2(raidPtr->access_suspend_mutex);
963 rf_destroy_cond2(raidPtr->access_suspend_cv);
965 rf_destroy_cond2(raidPtr->parity_rewrite_cv);
966 rf_destroy_cond2(raidPtr->outstandingCond);
967 rf_destroy_mutex2(raidPtr->rad_lock);
969 rf_destroy_mutex2(raidPtr->mutex);