version 1.22.30.2, 2020/04/13 08:04:47 |
version 1.23, 2019/02/09 03:34:00 |
Line 66 RF_RedFuncs_t rf_eoERecoveryFuncs = {rf_ |
|
Line 66 RF_RedFuncs_t rf_eoERecoveryFuncs = {rf_ |
|
/********************************************************************************************** |
/********************************************************************************************** |
* the following encoding node functions is used in EO_000_CreateLargeWriteDAG |
* the following encoding node functions is used in EO_000_CreateLargeWriteDAG |
**********************************************************************************************/ |
**********************************************************************************************/ |
void |
int |
rf_RegularPEFunc(RF_DagNode_t *node) |
rf_RegularPEFunc(RF_DagNode_t *node) |
{ |
{ |
rf_RegularESubroutine(node, node->results[1]); |
rf_RegularESubroutine(node, node->results[1]); |
rf_RegularXorFunc(node);/* does the wakeup here! */ |
rf_RegularXorFunc(node);/* does the wakeup here! */ |
|
#if 1 |
|
return (0); /* XXX This was missing... GO */ |
|
#endif |
} |
} |
|
|
|
|
Line 92 rf_RegularPEFunc(RF_DagNode_t *node) |
|
Line 95 rf_RegularPEFunc(RF_DagNode_t *node) |
|
old data and new data, then encode temp buf into old 'E' buf to form new 'E', but this approach |
old data and new data, then encode temp buf into old 'E' buf to form new 'E', but this approach |
take the same speed as the previous, and need more memory. |
take the same speed as the previous, and need more memory. |
*/ |
*/ |
void |
int |
rf_RegularONEFunc(RF_DagNode_t *node) |
rf_RegularONEFunc(RF_DagNode_t *node) |
{ |
{ |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
Line 146 rf_RegularONEFunc(RF_DagNode_t *node) |
|
Line 149 rf_RegularONEFunc(RF_DagNode_t *node) |
|
RF_ETIMER_EVAL(timer); |
RF_ETIMER_EVAL(timer); |
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
rf_GenericWakeupFunc(node, 0); |
rf_GenericWakeupFunc(node, 0); |
|
#if 1 |
|
return (0); /* XXX this was missing.. GO */ |
|
#endif |
} |
} |
|
|
void |
int |
rf_SimpleONEFunc(RF_DagNode_t *node) |
rf_SimpleONEFunc(RF_DagNode_t *node) |
{ |
{ |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
Line 181 rf_SimpleONEFunc(RF_DagNode_t *node) |
|
Line 187 rf_SimpleONEFunc(RF_DagNode_t *node) |
|
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
|
|
} |
} |
rf_GenericWakeupFunc(node, retcode); /* call wake func |
return (rf_GenericWakeupFunc(node, retcode)); /* call wake func |
* explicitly since no |
* explicitly since no |
* I/O in this node */ |
* I/O in this node */ |
} |
} |
|
|
|
|
Line 219 rf_RegularESubroutine(RF_DagNode_t *node |
|
Line 225 rf_RegularESubroutine(RF_DagNode_t *node |
|
/******************************************************************************************* |
/******************************************************************************************* |
* Used in EO_001_CreateLargeWriteDAG |
* Used in EO_001_CreateLargeWriteDAG |
******************************************************************************************/ |
******************************************************************************************/ |
void |
int |
rf_RegularEFunc(RF_DagNode_t *node) |
rf_RegularEFunc(RF_DagNode_t *node) |
{ |
{ |
rf_RegularESubroutine(node, node->results[0]); |
rf_RegularESubroutine(node, node->results[0]); |
rf_GenericWakeupFunc(node, 0); |
rf_GenericWakeupFunc(node, 0); |
|
#if 1 |
|
return (0); /* XXX this was missing?.. GO */ |
|
#endif |
} |
} |
/******************************************************************************************* |
/******************************************************************************************* |
* This degraded function allow only two case: |
* This degraded function allow only two case: |
Line 274 rf_DegrESubroutine(RF_DagNode_t *node, c |
|
Line 283 rf_DegrESubroutine(RF_DagNode_t *node, c |
|
* failed in the stripe but not accessed at this time, then we should, instead, use |
* failed in the stripe but not accessed at this time, then we should, instead, use |
* the rf_EOWriteDoubleRecoveryFunc(). |
* the rf_EOWriteDoubleRecoveryFunc(). |
**************************************************************************************/ |
**************************************************************************************/ |
void |
int |
rf_Degraded_100_EOFunc(RF_DagNode_t *node) |
rf_Degraded_100_EOFunc(RF_DagNode_t *node) |
{ |
{ |
rf_DegrESubroutine(node, node->results[1]); |
rf_DegrESubroutine(node, node->results[1]); |
rf_RecoveryXorFunc(node); /* does the wakeup here! */ |
rf_RecoveryXorFunc(node); /* does the wakeup here! */ |
|
#if 1 |
|
return (0); /* XXX this was missing... SHould these be |
|
* void functions??? GO */ |
|
#endif |
} |
} |
/************************************************************************************** |
/************************************************************************************** |
* This function is to encode one sector in one of the data disks to the E disk. |
* This function is to encode one sector in one of the data disks to the E disk. |
|
|
* to recover the data in dead disk. This function is used in the recovery node of |
* to recover the data in dead disk. This function is used in the recovery node of |
* for EO_110_CreateReadDAG |
* for EO_110_CreateReadDAG |
**************************************************************************************/ |
**************************************************************************************/ |
void |
int |
rf_RecoveryEFunc(RF_DagNode_t *node) |
rf_RecoveryEFunc(RF_DagNode_t *node) |
{ |
{ |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; |
Line 419 rf_RecoveryEFunc(RF_DagNode_t *node) |
|
Line 432 rf_RecoveryEFunc(RF_DagNode_t *node) |
|
RF_ETIMER_EVAL(timer); |
RF_ETIMER_EVAL(timer); |
tracerec->xor_us += RF_ETIMER_VAL_US(timer); |
tracerec->xor_us += RF_ETIMER_VAL_US(timer); |
} |
} |
rf_GenericWakeupFunc(node, 0); /* node execute successfully */ |
return (rf_GenericWakeupFunc(node, 0)); /* node execute successfully */ |
} |
} |
/************************************************************************************** |
/************************************************************************************** |
* This function is used in the case where one data and the parity have filed. |
* This function is used in the case where one data and the parity have filed. |
* (in EO_110_CreateWriteDAG ) |
* (in EO_110_CreateWriteDAG ) |
**************************************************************************************/ |
**************************************************************************************/ |
void |
int |
rf_EO_DegradedWriteEFunc(RF_DagNode_t * node) |
rf_EO_DegradedWriteEFunc(RF_DagNode_t * node) |
{ |
{ |
rf_DegrESubroutine(node, node->results[0]); |
rf_DegrESubroutine(node, node->results[0]); |
rf_GenericWakeupFunc(node, 0); |
rf_GenericWakeupFunc(node, 0); |
|
#if 1 |
|
return (0); /* XXX Yet another one!! GO */ |
|
#endif |
} |
} |
|
|
|
|
Line 627 rf_doubleEOdecode( |
|
Line 643 rf_doubleEOdecode( |
|
* EO_200_CreateReadDAG |
* EO_200_CreateReadDAG |
* |
* |
***************************************************************************************/ |
***************************************************************************************/ |
void |
int |
rf_EvenOddDoubleRecoveryFunc(RF_DagNode_t *node) |
rf_EvenOddDoubleRecoveryFunc(RF_DagNode_t *node) |
{ |
{ |
int ndataParam = 0; |
int ndataParam = 0; |
Line 812 rf_EvenOddDoubleRecoveryFunc(RF_DagNode_ |
|
Line 828 rf_EvenOddDoubleRecoveryFunc(RF_DagNode_ |
|
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
} |
} |
rf_GenericWakeupFunc(node, 0); |
rf_GenericWakeupFunc(node, 0); |
|
#if 1 |
|
return (0); /* XXX is this even close!!?!?!!? GO */ |
|
#endif |
} |
} |
|
|
|
|
Line 820 rf_EvenOddDoubleRecoveryFunc(RF_DagNode_ |
|
Line 839 rf_EvenOddDoubleRecoveryFunc(RF_DagNode_ |
|
* many accesses of single stripe unit. |
* many accesses of single stripe unit. |
*/ |
*/ |
|
|
void |
int |
rf_EOWriteDoubleRecoveryFunc(RF_DagNode_t *node) |
rf_EOWriteDoubleRecoveryFunc(RF_DagNode_t *node) |
{ |
{ |
int np = node->numParams; |
int np = node->numParams; |
Line 943 rf_EOWriteDoubleRecoveryFunc(RF_DagNode_ |
|
Line 962 rf_EOWriteDoubleRecoveryFunc(RF_DagNode_ |
|
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
tracerec->q_us += RF_ETIMER_VAL_US(timer); |
} |
} |
rf_GenericWakeupFunc(node, 0); |
rf_GenericWakeupFunc(node, 0); |
|
return (0); |
} |
} |
#endif /* RF_INCLUDE_EVENODD > 0 */ |
#endif /* RF_INCLUDE_EVENODD > 0 */ |