Lines Matching refs:raidPtr

102 	RF_Raid_t *raidPtr;  in rf_InitNode()  local
127 raidPtr = hdr->raidPtr; in rf_InitNode()
146 node->big_dag_ptrs = rf_AllocDAGPCache(raidPtr); in rf_InitNode()
160 node->big_dag_params = rf_AllocDAGPCache(raidPtr); in rf_InitNode()
186 RF_Raid_t *raidPtr; in rf_FreeDAG() local
189 raidPtr = dag_h->raidPtr; in rf_FreeDAG()
197 rf_FreeAccessStripeMap(raidPtr, t_asmap); in rf_FreeDAG()
202 rf_FreePhysDiskAddr(raidPtr, pda); in rf_FreeDAG()
207 rf_FreeDAGNode(raidPtr, tmpnode); in rf_FreeDAG()
209 rf_FreeDAGHeader(raidPtr, dag_h); in rf_FreeDAG()
236 RF_Raid_t *raidPtr; in rf_ShutdownDAGs() local
238 raidPtr = (RF_Raid_t *) arg; in rf_ShutdownDAGs()
240 pool_destroy(&raidPtr->pools.dagh); in rf_ShutdownDAGs()
241 pool_destroy(&raidPtr->pools.dagnode); in rf_ShutdownDAGs()
242 pool_destroy(&raidPtr->pools.daglist); in rf_ShutdownDAGs()
243 pool_destroy(&raidPtr->pools.dagpcache); in rf_ShutdownDAGs()
244 pool_destroy(&raidPtr->pools.funclist); in rf_ShutdownDAGs()
248 rf_ConfigureDAGs(RF_ShutdownList_t **listp, RF_Raid_t *raidPtr, in rf_ConfigureDAGs() argument
252 rf_pool_init(raidPtr, raidPtr->poolNames.dagnode, &raidPtr->pools.dagnode, sizeof(RF_DagNode_t), in rf_ConfigureDAGs()
254 rf_pool_init(raidPtr, raidPtr->poolNames.dagh, &raidPtr->pools.dagh, sizeof(RF_DagHeader_t), in rf_ConfigureDAGs()
256 rf_pool_init(raidPtr, raidPtr->poolNames.daglist, &raidPtr->pools.daglist, sizeof(RF_DagList_t), in rf_ConfigureDAGs()
258 rf_pool_init(raidPtr, raidPtr->poolNames.dagpcache, &raidPtr->pools.dagpcache, RF_DAGPCACHE_SIZE, in rf_ConfigureDAGs()
260 rf_pool_init(raidPtr, raidPtr->poolNames.funclist, &raidPtr->pools.funclist, sizeof(RF_FuncList_t), in rf_ConfigureDAGs()
262 rf_ShutdownCreate(listp, rf_ShutdownDAGs, raidPtr); in rf_ConfigureDAGs()
268 rf_AllocDAGHeader(RF_Raid_t *raidPtr) in rf_AllocDAGHeader() argument
270 return pool_get(&raidPtr->pools.dagh, PR_WAITOK | PR_ZERO); in rf_AllocDAGHeader()
274 rf_FreeDAGHeader(RF_Raid_t *raidPtr, RF_DagHeader_t * dh) in rf_FreeDAGHeader() argument
276 pool_put(&raidPtr->pools.dagh, dh); in rf_FreeDAGHeader()
280 rf_AllocDAGNode(RF_Raid_t *raidPtr) in rf_AllocDAGNode() argument
282 return pool_get(&raidPtr->pools.dagnode, PR_WAITOK | PR_ZERO); in rf_AllocDAGNode()
286 rf_FreeDAGNode(RF_Raid_t *raidPtr, RF_DagNode_t *node) in rf_FreeDAGNode() argument
289 rf_FreeDAGPCache(raidPtr, node->big_dag_ptrs); in rf_FreeDAGNode()
292 rf_FreeDAGPCache(raidPtr, node->big_dag_params); in rf_FreeDAGNode()
294 pool_put(&raidPtr->pools.dagnode, node); in rf_FreeDAGNode()
298 rf_AllocDAGList(RF_Raid_t *raidPtr) in rf_AllocDAGList() argument
300 return pool_get(&raidPtr->pools.daglist, PR_WAITOK | PR_ZERO); in rf_AllocDAGList()
304 rf_FreeDAGList(RF_Raid_t *raidPtr, RF_DagList_t *dagList) in rf_FreeDAGList() argument
306 pool_put(&raidPtr->pools.daglist, dagList); in rf_FreeDAGList()
310 rf_AllocDAGPCache(RF_Raid_t *raidPtr) in rf_AllocDAGPCache() argument
312 return pool_get(&raidPtr->pools.dagpcache, PR_WAITOK | PR_ZERO); in rf_AllocDAGPCache()
316 rf_FreeDAGPCache(RF_Raid_t *raidPtr, void *p) in rf_FreeDAGPCache() argument
318 pool_put(&raidPtr->pools.dagpcache, p); in rf_FreeDAGPCache()
322 rf_AllocFuncList(RF_Raid_t *raidPtr) in rf_AllocFuncList() argument
324 return pool_get(&raidPtr->pools.funclist, PR_WAITOK | PR_ZERO); in rf_AllocFuncList()
328 rf_FreeFuncList(RF_Raid_t *raidPtr, RF_FuncList_t *funcList) in rf_FreeFuncList() argument
330 pool_put(&raidPtr->pools.funclist, funcList); in rf_FreeFuncList()
338 rf_AllocStripeBuffer(RF_Raid_t *raidPtr, RF_DagHeader_t *dag_h, in rf_AllocStripeBuffer() argument
344 RF_ASSERT((size <= (raidPtr->numCol * (raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocStripeBuffer()
345 raidPtr->logBytesPerSector)))); in rf_AllocStripeBuffer()
347 p = malloc( raidPtr->numCol * (raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocStripeBuffer()
348 raidPtr->logBytesPerSector), in rf_AllocStripeBuffer()
351 rf_lock_mutex2(raidPtr->mutex); in rf_AllocStripeBuffer()
352 if (raidPtr->stripebuf_count > 0) { in rf_AllocStripeBuffer()
353 vple = raidPtr->stripebuf; in rf_AllocStripeBuffer()
354 raidPtr->stripebuf = vple->next; in rf_AllocStripeBuffer()
356 rf_FreeVPListElem(raidPtr, vple); in rf_AllocStripeBuffer()
357 raidPtr->stripebuf_count--; in rf_AllocStripeBuffer()
360 printf("raid%d: Help! Out of emergency full-stripe buffers!\n", raidPtr->raidid); in rf_AllocStripeBuffer()
363 rf_unlock_mutex2(raidPtr->mutex); in rf_AllocStripeBuffer()
367 p = malloc( raidPtr->numCol * (raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocStripeBuffer()
368 raidPtr->logBytesPerSector), M_RAIDFRAME, M_WAITOK); in rf_AllocStripeBuffer()
371 …memset(p, 0, raidPtr->numCol * (raidPtr->Layout.sectorsPerStripeUnit << raidPtr->logBytesPerSector… in rf_AllocStripeBuffer()
373 vple = rf_AllocVPListElem(raidPtr); in rf_AllocStripeBuffer()
383 rf_FreeStripeBuffer(RF_Raid_t *raidPtr, RF_VoidPointerListElem_t *vple) in rf_FreeStripeBuffer() argument
385 rf_lock_mutex2(raidPtr->mutex); in rf_FreeStripeBuffer()
386 if (raidPtr->stripebuf_count < raidPtr->numEmergencyStripeBuffers) { in rf_FreeStripeBuffer()
388 vple->next = raidPtr->stripebuf; in rf_FreeStripeBuffer()
389 raidPtr->stripebuf = vple; in rf_FreeStripeBuffer()
390 raidPtr->stripebuf_count++; in rf_FreeStripeBuffer()
393 rf_FreeVPListElem(raidPtr, vple); in rf_FreeStripeBuffer()
395 rf_unlock_mutex2(raidPtr->mutex); in rf_FreeStripeBuffer()
403 rf_AllocBuffer(RF_Raid_t *raidPtr, RF_DagHeader_t *dag_h, int size) in rf_AllocBuffer() argument
408 p = rf_AllocIOBuffer(raidPtr, size); in rf_AllocBuffer()
409 vple = rf_AllocVPListElem(raidPtr); in rf_AllocBuffer()
418 rf_AllocIOBuffer(RF_Raid_t *raidPtr, int size) in rf_AllocIOBuffer() argument
423 RF_ASSERT((size <= (raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocIOBuffer()
424 raidPtr->logBytesPerSector))); in rf_AllocIOBuffer()
426 p = malloc( raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocIOBuffer()
427 raidPtr->logBytesPerSector, in rf_AllocIOBuffer()
430 rf_lock_mutex2(raidPtr->mutex); in rf_AllocIOBuffer()
431 if (raidPtr->iobuf_count > 0) { in rf_AllocIOBuffer()
432 vple = raidPtr->iobuf; in rf_AllocIOBuffer()
433 raidPtr->iobuf = vple->next; in rf_AllocIOBuffer()
435 rf_FreeVPListElem(raidPtr, vple); in rf_AllocIOBuffer()
436 raidPtr->iobuf_count--; in rf_AllocIOBuffer()
439 printf("raid%d: Help! Out of emergency buffers!\n", raidPtr->raidid); in rf_AllocIOBuffer()
442 rf_unlock_mutex2(raidPtr->mutex); in rf_AllocIOBuffer()
446 p = malloc( raidPtr->Layout.sectorsPerStripeUnit << in rf_AllocIOBuffer()
447 raidPtr->logBytesPerSector, in rf_AllocIOBuffer()
451 memset(p, 0, raidPtr->Layout.sectorsPerStripeUnit << raidPtr->logBytesPerSector); in rf_AllocIOBuffer()
456 rf_FreeIOBuffer(RF_Raid_t *raidPtr, RF_VoidPointerListElem_t *vple) in rf_FreeIOBuffer() argument
458 rf_lock_mutex2(raidPtr->mutex); in rf_FreeIOBuffer()
459 if (raidPtr->iobuf_count < raidPtr->numEmergencyBuffers) { in rf_FreeIOBuffer()
461 vple->next = raidPtr->iobuf; in rf_FreeIOBuffer()
462 raidPtr->iobuf = vple; in rf_FreeIOBuffer()
463 raidPtr->iobuf_count++; in rf_FreeIOBuffer()
466 rf_FreeVPListElem(raidPtr, vple); in rf_FreeIOBuffer()
468 rf_unlock_mutex2(raidPtr->mutex); in rf_FreeIOBuffer()
915 rf_redirect_asm(RF_Raid_t *raidPtr, RF_AccessStripeMap_t *asmap) in rf_redirect_asm() argument
917 int ds = (raidPtr->Layout.map->flags & RF_DISTRIBUTE_SPARE) ? 1 : 0; in rf_redirect_asm()
918 int fcol = raidPtr->reconControl->fcol; in rf_redirect_asm()
919 int scol = raidPtr->reconControl->spareCol; in rf_redirect_asm()
922 RF_ASSERT(raidPtr->status == rf_rs_reconstructing); in rf_redirect_asm()
927 if (!rf_CheckRUReconstructed(raidPtr->reconControl->reconMap, in rf_redirect_asm()
935 raidPtr->Layout.map->MapSector(raidPtr, pda->raidAddress, in rf_redirect_asm()
946 if (!rf_CheckRUReconstructed(raidPtr->reconControl->reconMap, pda->startSector)) { in rf_redirect_asm()
953 …(raidPtr->Layout.map->MapParity) (raidPtr, pda->raidAddress, &pda->col, &pda->startSector, RF_REMA… in rf_redirect_asm()
977 rf_MapUnaccessedPortionOfStripe(RF_Raid_t *raidPtr, in rf_MapUnaccessedPortionOfStripe() argument
997 *sosBuffer = rf_AllocStripeBuffer(raidPtr, dag_h, rf_RaidAddressToByte(raidPtr, sosNumSector)); in rf_MapUnaccessedPortionOfStripe()
998 new_asm_h[0] = rf_MapAccess(raidPtr, sosRaidAddress, sosNumSector, *sosBuffer, RF_DONT_REMAP); in rf_MapUnaccessedPortionOfStripe()
1006 rf_redirect_asm(raidPtr, new_asm_h[0]->stripeMap); in rf_MapUnaccessedPortionOfStripe()
1013 *eosBuffer = rf_AllocStripeBuffer(raidPtr, dag_h, rf_RaidAddressToByte(raidPtr, eosNumSector)); in rf_MapUnaccessedPortionOfStripe()
1014 new_asm_h[1] = rf_MapAccess(raidPtr, eosRaidAddress, eosNumSector, *eosBuffer, RF_DONT_REMAP); in rf_MapUnaccessedPortionOfStripe()
1022 rf_redirect_asm(raidPtr, new_asm_h[1]->stripeMap); in rf_MapUnaccessedPortionOfStripe()
1071 rf_GenerateFailedAccessASMs(RF_Raid_t *raidPtr, RF_AccessStripeMap_t *asmap, in rf_GenerateFailedAccessASMs() argument
1079 RF_RaidLayout_t *layoutPtr = &(raidPtr->Layout); in rf_GenerateFailedAccessASMs()
1099 …new_asm_h[0] = (sosAddr != sosEndAddr) ? rf_MapAccess(raidPtr, sosAddr, sosEndAddr - sosAddr, NULL… in rf_GenerateFailedAccessASMs()
1100 …new_asm_h[1] = (eosStartAddr != eosAddr) ? rf_MapAccess(raidPtr, eosStartAddr, eosAddr - eosStartA… in rf_GenerateFailedAccessASMs()
1113 rf_RangeRestrictPDA(raidPtr, failedPDA, pda, RF_RESTRICT_NOBUFFER, 0); in rf_GenerateFailedAccessASMs()
1114 pda->bufPtr = rf_AllocBuffer(raidPtr, dag_h, pda->numSector << raidPtr->logBytesPerSector); in rf_GenerateFailedAccessASMs()
1122 rf_RangeRestrictPDA(raidPtr, failedPDA, pda, RF_RESTRICT_NOBUFFER, 0); in rf_GenerateFailedAccessASMs()
1123 pda->bufPtr = rf_AllocBuffer(raidPtr, dag_h, pda->numSector << raidPtr->logBytesPerSector); in rf_GenerateFailedAccessASMs()
1130 *rpBufPtr = rf_AllocBuffer(raidPtr, dag_h, failedPDA->numSector << raidPtr->logBytesPerSector); in rf_GenerateFailedAccessASMs()
1190 rf_RangeRestrictPDA(RF_Raid_t *raidPtr, RF_PhysDiskAddr_t *src, in rf_RangeRestrictPDA() argument
1193 RF_RaidLayout_t *layoutPtr = &raidPtr->Layout; in rf_RangeRestrictPDA()
1205 …dest->bufPtr = (char *)(dest->bufPtr) + ((soffs > doffs) ? rf_RaidAddressToByte(raidPtr, soffs - d… in rf_RangeRestrictPDA()
1229 rf_compute_workload_shift(RF_Raid_t *raidPtr, RF_PhysDiskAddr_t *pda) in rf_compute_workload_shift() argument
1243 n = raidPtr->numCol; in rf_compute_workload_shift()
1249 for (f = 0; ((!RF_DEAD_DISK(raidPtr->Disks[f].status)) && (f < n)); f++) in rf_compute_workload_shift()
1284 raidPtr->hist_diskreq[d]++; in rf_compute_workload_shift()
1285 if (raidPtr->hist_diskreq[d] > v) { in rf_compute_workload_shift()
1293 raidPtr->hist_diskreq[d]); in rf_compute_workload_shift()
1296 if (raidPtr->hist_diskreq[d] >= k) { in rf_compute_workload_shift()
1298 raidPtr->hist_diskreq[d] = 0; in rf_compute_workload_shift()
1316 RF_Raid_t *raidPtr = (RF_Raid_t *) node->dagHdr->raidPtr; in rf_SelectMirrorDiskIdle() local
1322 RF_RaidDisk_t *disks = raidPtr->Disks; in rf_SelectMirrorDiskIdle()
1323 RF_DiskQueue_t *dqs = raidPtr->Queues, *dataQueue, *mirrorQueue; in rf_SelectMirrorDiskIdle()
1351 if (raidPtr->parity_good == RF_RAID_DIRTY) { in rf_SelectMirrorDiskIdle()
1390 RF_Raid_t *raidPtr = (RF_Raid_t *) node->dagHdr->raidPtr; in rf_SelectMirrorDiskPartition() local
1395 RF_RaidDisk_t *disks = raidPtr->Disks; in rf_SelectMirrorDiskPartition()
1409 if (raidPtr->parity_good == RF_RAID_DIRTY) { in rf_SelectMirrorDiskPartition()