Lines Matching refs:desc
63 - increment desc->state when they have finished their work.
99 RF_RaidAccessDesc_t *desc = v;
101 int current_state_index = desc->state;
102 RF_AccessState_t current_state = desc->states[current_state_index];
104 int unit = desc->raidPtr->raidid;
109 current_state_index = desc->state;
110 current_state = desc->states[current_state_index];
115 suspended = rf_State_Quiesce(desc);
118 suspended = rf_State_IncrAccessCount(desc);
121 suspended = rf_State_Map(desc);
124 suspended = rf_State_Lock(desc);
127 suspended = rf_State_CreateDAG(desc);
130 suspended = rf_State_ExecuteDAG(desc);
133 suspended = rf_State_ProcessDAG(desc);
136 suspended = rf_State_Cleanup(desc);
139 suspended = rf_State_DecrAccessCount(desc);
142 suspended = rf_State_LastState(desc);
146 /* after this point, we cannot dereference desc since
147 * desc may have been freed. desc is only freed in
149 * back up, desc should be valid. */
153 printf("raid%d: State: %-24s StateIndex: %3i desc: 0x%ld %s\n",
155 current_state_index, (long) desc,
169 RF_AccTraceEntry_t *tracerec = &(dagList->desc->tracerec);
172 RF_RaidAccessDesc_t *desc;
176 desc = dagList->desc;
194 /* when a dag fails, mark desc status as bad and allow
195 * all other dags in the desc to execute to
197 desc->status = 1; /* bad status */
201 desc->raidPtr->raidid, desc->type,
202 (long) desc->raidAddress,
203 (long) desc->raidAddress, (int) desc->numBlocks,
204 (int) desc->numBlocks,
205 (unsigned long) (desc->bufPtr), desc->state);
209 rf_ContinueRaidAccess(desc);
213 rf_State_LastState(RF_RaidAccessDesc_t *desc)
215 void (*callbackFunc) (void *) = desc->callbackFunc;
216 void * callbackArg = desc->callbackArg;
222 if (desc->raidPtr->parity_map != NULL &&
223 desc->type == RF_IO_TYPE_WRITE)
224 rf_paritymap_end(desc->raidPtr->parity_map,
225 desc->raidAddress, desc->numBlocks);
227 /* printf("Calling raiddone on 0x%x\n",desc->bp); */
228 raiddone(desc->raidPtr, desc->bp); /* access came through ioctl */
232 rf_FreeRaidAccDesc(desc);
238 rf_State_IncrAccessCount(RF_RaidAccessDesc_t *desc)
242 raidPtr = desc->raidPtr;
249 desc->state++;
254 rf_State_DecrAccessCount(RF_RaidAccessDesc_t *desc)
258 raidPtr = desc->raidPtr;
267 desc->state++;
272 rf_State_Quiesce(RF_RaidAccessDesc_t *desc)
275 RF_AccTraceEntry_t *tracerec = &desc->tracerec;
283 raidPtr = desc->raidPtr;
287 RF_ETIMER_START(desc->timer);
310 cb->callbackArg = desc;
332 desc->state++;
337 rf_State_Map(RF_RaidAccessDesc_t *desc)
339 RF_Raid_t *raidPtr = desc->raidPtr;
341 RF_AccTraceEntry_t *tracerec = &desc->tracerec;
347 if (!(desc->asmap = rf_MapAccess(raidPtr, desc->raidAddress, desc->numBlocks,
348 desc->bufPtr, RF_DONT_REMAP)))
357 desc->state++;
362 rf_State_Lock(RF_RaidAccessDesc_t *desc)
365 RF_AccTraceEntry_t *tracerec = &desc->tracerec;
368 RF_Raid_t *raidPtr = desc->raidPtr;
369 RF_AccessStripeMapHeader_t *asmh = desc->asmap;
380 RF_ASSERT(RF_IO_IS_R_OR_W(desc->type));
383 !(desc->flags & RF_DAG_SUPPRESS_LOCKS) &&
390 RF_INIT_LOCK_REQ_DESC(asm_p->lockReqDesc, desc->type,
391 rf_ContinueRaidAccess, desc, asm_p,
399 if (desc->type == RF_IO_TYPE_WRITE &&
406 rf_ContinueRaidAccess, desc);
417 desc->raidPtr->raidid,
426 desc->raidPtr->raidid,
440 desc->state++;
465 rf_State_CreateDAG(RF_RaidAccessDesc_t *desc)
468 RF_AccTraceEntry_t *tracerec = &desc->tracerec;
482 selectStatus = rf_SelectAlgorithm(desc, desc->flags | RF_DAG_SUPPRESS_LOCKS);
485 dagList = desc->dagList;
486 for (i = 0; i < desc->numStripes; i++) {
499 desc->status = 0; /* good status */
501 if (selectStatus || (desc->numRetries > RF_RETRY_THRESHOLD)) {
508 desc->raidPtr->raidid);
511 desc->raidPtr->raidid, RF_RETRY_THRESHOLD);
514 desc->status = 1; /* bad status */
516 desc->state = rf_CleanupState;
517 bp = (struct buf *)desc->bp;
521 /* bind dags to desc */
522 dagList = desc->dagList;
523 for (i = 0; i < desc->numStripes; i++) {
526 dag_h->bp = (struct buf *) desc->bp;
534 desc->flags |= RF_DAG_DISPATCH_RETURNED;
535 desc->state++; /* next state should be rf_State_ExecuteDAG */
549 rf_State_ExecuteDAG(RF_RaidAccessDesc_t *desc)
558 desc->state++;
562 dagList = desc->dagList;
563 for (i = 0; i < desc->numStripes; i++) {
590 rf_State_ProcessDAG(RF_RaidAccessDesc_t *desc)
592 RF_AccessStripeMapHeader_t *asmh = desc->asmap;
593 RF_Raid_t *raidPtr = desc->raidPtr;
599 dagList = desc->dagList;
600 for (i = 0; i < desc->numStripes; i++) {
607 if (desc->status) {
610 dagList = desc->dagList;
611 for (i = 0; i < desc->numStripes; i++) {
617 desc->dagList = NULL;
625 desc->numRetries++;
628 desc->state = desc->state - 2;
632 desc->state++;
640 dagList = desc->dagList;
641 for (i = 0; i < desc->numStripes; i++) {
664 rf_State_Cleanup(RF_RaidAccessDesc_t *desc)
667 RF_AccTraceEntry_t *tracerec = &desc->tracerec;
670 RF_AccessStripeMapHeader_t *asmh = desc->asmap;
671 RF_Raid_t *raidPtr = desc->raidPtr;
676 desc->state++;
690 dagList = desc->dagList;
691 for (i = 0; i < desc->numStripes; i++) {
705 !(desc->flags & RF_DAG_SUPPRESS_LOCKS)) {
729 RF_ETIMER_STOP(desc->timer);
730 RF_ETIMER_EVAL(desc->timer);
732 timer = desc->tracerec.tot_timer;
735 desc->tracerec.total_us = RF_ETIMER_VAL_US(timer);
739 desc->flags |= RF_DAG_ACCESS_COMPLETE;