version 1.7, 2001/01/26 03:50:53 |
version 1.7.2.1, 2001/08/24 00:10:35 |
Line 410 rf_RecoveryEFunc(node) |
|
Line 410 rf_RecoveryEFunc(node) |
|
RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec; |
RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec; |
RF_Etimer_t timer; |
RF_Etimer_t timer; |
|
|
bzero((char *) node->results[0], rf_RaidAddressToByte(raidPtr, failedPDA->numSector)); |
memset((char *) node->results[0], 0, |
|
rf_RaidAddressToByte(raidPtr, failedPDA->numSector)); |
if (node->dagHdr->status == rf_enable) { |
if (node->dagHdr->status == rf_enable) { |
RF_ETIMER_START(timer); |
RF_ETIMER_START(timer); |
for (i = 0; i < node->numParams - 2; i += 2) |
for (i = 0; i < node->numParams - 2; i += 2) |
Line 495 rf_doubleEOdecode( |
|
Line 496 rf_doubleEOdecode( |
|
#endif |
#endif |
RF_ASSERT(*((long *) dest[0]) == 0); |
RF_ASSERT(*((long *) dest[0]) == 0); |
RF_ASSERT(*((long *) dest[1]) == 0); |
RF_ASSERT(*((long *) dest[1]) == 0); |
bzero((char *) P, bytesPerEU); |
memset((char *) P, 0, bytesPerEU); |
bzero((char *) temp, bytesPerEU); |
memset((char *) temp, 0, bytesPerEU); |
RF_ASSERT(*P == 0); |
RF_ASSERT(*P == 0); |
/* calculate the 'P' parameter, which, not parity, is the Xor of all |
/* calculate the 'P' parameter, which, not parity, is the Xor of all |
* elements in the last two column, ie. 'E' and 'parity' colume, see |
* elements in the last two column, ie. 'E' and 'parity' colume, see |
Line 710 rf_EvenOddDoubleRecoveryFunc(node) |
|
Line 711 rf_EvenOddDoubleRecoveryFunc(node) |
|
if (nresults == 1) { |
if (nresults == 1) { |
/* find the startSector to begin decoding */ |
/* find the startSector to begin decoding */ |
pda = node->results[0]; |
pda = node->results[0]; |
bzero(pda->bufPtr, bytesPerSector * pda->numSector); |
memset(pda->bufPtr, 0, bytesPerSector * pda->numSector); |
fsuoff[0] = rf_StripeUnitOffset(layoutPtr, pda->startSector); |
fsuoff[0] = rf_StripeUnitOffset(layoutPtr, pda->startSector); |
fsuend[0] = fsuoff[0] + pda->numSector; |
fsuend[0] = fsuoff[0] + pda->numSector; |
startSector = fsuoff[0]; |
startSector = fsuoff[0]; |
Line 734 rf_EvenOddDoubleRecoveryFunc(node) |
|
Line 735 rf_EvenOddDoubleRecoveryFunc(node) |
|
} else { |
} else { |
RF_ASSERT(nresults == 2); |
RF_ASSERT(nresults == 2); |
pda0 = node->results[0]; |
pda0 = node->results[0]; |
bzero(pda0->bufPtr, bytesPerSector * pda0->numSector); |
memset(pda0->bufPtr, 0, bytesPerSector * pda0->numSector); |
pda1 = node->results[1]; |
pda1 = node->results[1]; |
bzero(pda1->bufPtr, bytesPerSector * pda1->numSector); |
memset(pda1->bufPtr, 0, bytesPerSector * pda1->numSector); |
/* determine the failed colume numbers of the two failed |
/* determine the failed colume numbers of the two failed |
* disks. */ |
* disks. */ |
fcol[0] = rf_EUCol(layoutPtr, pda0->raidAddress); |
fcol[0] = rf_EUCol(layoutPtr, pda0->raidAddress); |
Line 786 rf_EvenOddDoubleRecoveryFunc(node) |
|
Line 787 rf_EvenOddDoubleRecoveryFunc(node) |
|
dest[0] = ((RF_PhysDiskAddr_t *) node->results[0])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[0]); |
dest[0] = ((RF_PhysDiskAddr_t *) node->results[0])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[0]); |
/* Always malloc temp buffer to dest[1] */ |
/* Always malloc temp buffer to dest[1] */ |
RF_Malloc(dest[1], bytesPerSector, (char *)); |
RF_Malloc(dest[1], bytesPerSector, (char *)); |
bzero(dest[1], bytesPerSector); |
memset(dest[1], 0, bytesPerSector); |
mallc_two = 1; |
mallc_two = 1; |
} else { |
} else { |
if (fsuoff[0] <= sector && sector < fsuend[0]) |
if (fsuoff[0] <= sector && sector < fsuend[0]) |
dest[0] = ((RF_PhysDiskAddr_t *) node->results[0])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[0]); |
dest[0] = ((RF_PhysDiskAddr_t *) node->results[0])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[0]); |
else { |
else { |
RF_Malloc(dest[0], bytesPerSector, (char *)); |
RF_Malloc(dest[0], bytesPerSector, (char *)); |
bzero(dest[0], bytesPerSector); |
memset(dest[0], 0, bytesPerSector); |
mallc_one = 1; |
mallc_one = 1; |
} |
} |
if (fsuoff[1] <= sector && sector < fsuend[1]) |
if (fsuoff[1] <= sector && sector < fsuend[1]) |
dest[1] = ((RF_PhysDiskAddr_t *) node->results[1])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[1]); |
dest[1] = ((RF_PhysDiskAddr_t *) node->results[1])->bufPtr + rf_RaidAddressToByte(raidPtr, sector - fsuoff[1]); |
else { |
else { |
RF_Malloc(dest[1], bytesPerSector, (char *)); |
RF_Malloc(dest[1], bytesPerSector, (char *)); |
bzero(dest[1], bytesPerSector); |
memset(dest[1], 0, bytesPerSector); |
mallc_two = 1; |
mallc_two = 1; |
} |
} |
RF_ASSERT(mallc_one == 0 || mallc_two == 0); |
RF_ASSERT(mallc_one == 0 || mallc_two == 0); |
Line 917 rf_EOWriteDoubleRecoveryFunc(node) |
|
Line 918 rf_EOWriteDoubleRecoveryFunc(node) |
|
RF_Malloc(olddata[1], numbytes, (char *)); |
RF_Malloc(olddata[1], numbytes, (char *)); |
dest[0] = olddata[0]; |
dest[0] = olddata[0]; |
dest[1] = olddata[1]; |
dest[1] = olddata[1]; |
bzero(olddata[0], numbytes); |
memset(olddata[0], 0, numbytes); |
bzero(olddata[1], numbytes); |
memset(olddata[1], 0, numbytes); |
/* Begin the recovery decoding, initially buf[j], ebuf, pbuf, dest[j] |
/* Begin the recovery decoding, initially buf[j], ebuf, pbuf, dest[j] |
* have already pointed at the beginning of each source buffers and |
* have already pointed at the beginning of each source buffers and |
* destination buffers */ |
* destination buffers */ |