Module Name: src Committed By: oster Date: Sun Oct 15 18:15:20 UTC 2023
Modified Files: src/sys/dev/raidframe: rf_dagdegwr.c rf_dagffwr.c rf_pq.c rf_pqdeg.c rf_pqdegdags.c rf_pqdegdags.h Log Message: Make RF_INCLUDE_RAID6 build (needs more changes to make it work). Fix function signatures - recovFunc has a return type of void. Fix obvious errors/typos from previous "mechanical changes". MapSector no longer takes a row value. Cleanup (now unused) row usage. rf_bxor() doesn't take a bp argument. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 src/sys/dev/raidframe/rf_dagdegwr.c cvs rdiff -u -r1.37 -r1.38 src/sys/dev/raidframe/rf_dagffwr.c cvs rdiff -u -r1.17 -r1.18 src/sys/dev/raidframe/rf_pq.c cvs rdiff -u -r1.9 -r1.10 src/sys/dev/raidframe/rf_pqdeg.c cvs rdiff -u -r1.16 -r1.17 src/sys/dev/raidframe/rf_pqdegdags.c cvs rdiff -u -r1.3 -r1.4 src/sys/dev/raidframe/rf_pqdegdags.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/raidframe/rf_dagdegwr.c diff -u src/sys/dev/raidframe/rf_dagdegwr.c:1.36 src/sys/dev/raidframe/rf_dagdegwr.c:1.37 --- src/sys/dev/raidframe/rf_dagdegwr.c:1.36 Fri Jul 23 00:54:45 2021 +++ src/sys/dev/raidframe/rf_dagdegwr.c Sun Oct 15 18:15:19 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_dagdegwr.c,v 1.36 2021/07/23 00:54:45 oster Exp $ */ +/* $NetBSD: rf_dagdegwr.c,v 1.37 2023/10/15 18:15:19 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_dagdegwr.c,v 1.36 2021/07/23 00:54:45 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_dagdegwr.c,v 1.37 2023/10/15 18:15:19 oster Exp $"); #include <dev/raidframe/raidframevar.h> @@ -382,8 +382,7 @@ rf_CommonCreateSimpleDegradedWriteDAG(RF /* fill in the Wnq Node */ if (nfaults == 2) { { - parityPA = RF_MallocAndAdd(sizeof(*parityPA), - allocList); + parityPDA = RF_MallocAndAdd(sizeof(*parityPDA), allocList); parityPDA->col = asmap->qInfo->col; parityPDA->startSector = ((asmap->qInfo->startSector / sectorsPerSU) * sectorsPerSU) + (failedPDA->startSector % sectorsPerSU); @@ -566,7 +565,7 @@ rf_CommonCreateSimpleDegradedWriteDAG(RF pda_p->numSector = num; \ pda_p->next = NULL; \ pda_p->bufPtr = BUF_ALLOC(num) -#if (RF_INCLUDE_PQ > 0) || (RF_INCLUDE_EVENODD > 0) +#if (RF_INCLUDE_RAID6 > 0) || (RF_INCLUDE_PQ > 0) || (RF_INCLUDE_EVENODD > 0) void rf_WriteGenerateFailedAccessASMs( RF_Raid_t * raidPtr, Index: src/sys/dev/raidframe/rf_dagffwr.c diff -u src/sys/dev/raidframe/rf_dagffwr.c:1.37 src/sys/dev/raidframe/rf_dagffwr.c:1.38 --- src/sys/dev/raidframe/rf_dagffwr.c:1.37 Fri Jul 23 00:54:45 2021 +++ src/sys/dev/raidframe/rf_dagffwr.c Sun Oct 15 18:15:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_dagffwr.c,v 1.37 2021/07/23 00:54:45 oster Exp $ */ +/* $NetBSD: rf_dagffwr.c,v 1.38 2023/10/15 18:15:20 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_dagffwr.c,v 1.37 2021/07/23 00:54:45 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_dagffwr.c,v 1.38 2023/10/15 18:15:20 oster Exp $"); #include <dev/raidframe/raidframevar.h> @@ -229,7 +229,7 @@ rf_CommonCreateLargeWriteDAG(RF_Raid_t * #if (RF_INCLUDE_DECL_PQ > 0) || (RF_INCLUDE_RAID6 > 0) if (nfaults == 2) { - wnqNode = rf_AllocDAGNode(); + wnqNode = rf_AllocDAGNode(raidPtr); } else { wnqNode = NULL; } @@ -850,7 +850,7 @@ rf_CommonCreateSmallWriteDAG(RF_Raid_t * 7, 1, dag_h, qname, allocList); tmpqNode->params[0] = tmpreadDataNode->params[0]; tmpqNode->params[1] = tmpreadDataNode->params[1]; - tmpqNode->params[2] = tmpreadQNode->.params[0]; + tmpqNode->params[2] = tmpreadQNode->params[0]; tmpqNode->params[3] = tmpreadQNode->params[1]; tmpqNode->params[4] = tmpwriteDataNode->params[0]; tmpqNode->params[5] = tmpwriteDataNode->params[1]; @@ -858,7 +858,7 @@ rf_CommonCreateSmallWriteDAG(RF_Raid_t * /* use old Q buf as target buf */ tmpqNode->results[0] = tmpreadQNode->params[1].p; tmpqNode = tmpqNode->list_next; - tmpreadQNodes = tmpreadQNodes->list_next; + tmpreadQNode = tmpreadQNode->list_next; } #endif tmpxorNode = tmpxorNode->list_next; @@ -1078,7 +1078,7 @@ rf_CommonCreateSmallWriteDAG(RF_Raid_t * tmpqNode = qNodes; for (j = 0; j < numParityNodes; j++) { tmpreadQNode->succedents[j] = tmpqNode; - tmpqNode->antecedents[numDataNodes + i] = tmpreadQNodes; + tmpqNode->antecedents[numDataNodes + i] = tmpreadQNode; tmpqNode->antType[numDataNodes + i] = rf_trueData; tmpqNode = tmpqNode->list_next; } Index: src/sys/dev/raidframe/rf_pq.c diff -u src/sys/dev/raidframe/rf_pq.c:1.17 src/sys/dev/raidframe/rf_pq.c:1.18 --- src/sys/dev/raidframe/rf_pq.c:1.17 Thu Oct 10 03:43:59 2019 +++ src/sys/dev/raidframe/rf_pq.c Sun Oct 15 18:15:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_pq.c,v 1.17 2019/10/10 03:43:59 christos Exp $ */ +/* $NetBSD: rf_pq.c,v 1.18 2023/10/15 18:15:20 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_pq.c,v 1.17 2019/10/10 03:43:59 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_pq.c,v 1.18 2023/10/15 18:15:20 oster Exp $"); #include "rf_archs.h" @@ -237,7 +237,7 @@ RF_CREATE_DAG_FUNC_DECL(rf_PQCreateLarge rf_RegularPQFunc, RF_FALSE); } -int +void rf_RegularONQFunc(RF_DagNode_t *node) { int np = node->numParams; @@ -279,7 +279,6 @@ rf_RegularONQFunc(RF_DagNode_t *node) tracerec->q_us += RF_ETIMER_VAL_US(timer); rf_GenericWakeupFunc(node, 0); /* call wake func explicitly since no * I/O in this node */ - return (0); } /* See the SimpleXORFunc for the difference between a simple and regular func. @@ -301,7 +300,7 @@ rf_RegularONQFunc(RF_DagNode_t *node) raidPtr */ -int +void rf_SimpleONQFunc(RF_DagNode_t *node) { int np = node->numParams; @@ -341,7 +340,6 @@ rf_SimpleONQFunc(RF_DagNode_t *node) tracerec->q_us += RF_ETIMER_VAL_US(timer); rf_GenericWakeupFunc(node, 0); /* call wake func explicitly since no * I/O in this node */ - return (0); } RF_CREATE_DAG_FUNC_DECL(rf_PQCreateSmallWriteDAG) { @@ -453,21 +451,20 @@ DegrQSubr(RF_DagNode_t *node) corrupt the input for the q calculation. */ -int +void rf_RegularPQFunc(RF_DagNode_t *node) { RegularQSubr(node, node->results[1]); - return (rf_RegularXorFunc(node)); /* does the wakeup */ + rf_RegularXorFunc(node); /* does the wakeup */ } -int +void rf_RegularQFunc(RF_DagNode_t *node) { /* Almost ... adjust Qsubr args */ RegularQSubr(node, node->results[0]); rf_GenericWakeupFunc(node, 0); /* call wake func explicitly since no * I/O in this node */ - return (0); } /* Called by singly degraded write code to compute the new parity and the new q. @@ -530,14 +527,14 @@ rf_Degraded_100_PQFunc(RF_DagNode_t *nod * * */ -int +void rf_RecoveryQFunc(RF_DagNode_t *node) { RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; RF_RaidLayout_t *layoutPtr = (RF_RaidLayout_t *) & raidPtr->Layout; RF_PhysDiskAddr_t *failedPDA = (RF_PhysDiskAddr_t *) node->params[node->numParams - 2].p; int i; - RF_PhysDiskAddr_t *pda; + RF_PhysDiskAddr_t *pda = NULL; RF_RaidAddr_t suoffset, failedSUOffset = rf_StripeUnitOffset(layoutPtr, failedPDA->startSector); char *srcbuf, *destbuf; RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec; @@ -566,15 +563,15 @@ rf_RecoveryQFunc(RF_DagNode_t *node) RF_ETIMER_EVAL(timer); tracerec->q_us += RF_ETIMER_VAL_US(timer); rf_GenericWakeupFunc(node, 0); - return (0); } -int +void rf_RecoveryPQFunc(RF_DagNode_t *node) { RF_Raid_t *raidPtr = (RF_Raid_t *) node->params[node->numParams - 1].p; printf("raid%d: Recovery from PQ not implemented.\n",raidPtr->raidid); - return (1); + /* XXX: Was: */ + /* return (1); */ } /* Degraded write Q subroutine. @@ -721,6 +718,7 @@ QDelta( unsigned length, unsigned char coeff) { +#ifndef _KERNEL unsigned long a, d, new; unsigned long a1, a2; unsigned int *q = &(rf_qfor[28 - coeff][0]); @@ -728,7 +726,7 @@ QDelta( r = a1 = a2 = new = d = a = 0; /* XXX for now... */ q = NULL; /* XXX for now */ - +#endif #ifdef _KERNEL /* PQ in kernel currently not supported because the encoding/decoding * table is not present */ Index: src/sys/dev/raidframe/rf_pqdeg.c diff -u src/sys/dev/raidframe/rf_pqdeg.c:1.9 src/sys/dev/raidframe/rf_pqdeg.c:1.10 --- src/sys/dev/raidframe/rf_pqdeg.c:1.9 Sun Dec 11 12:23:37 2005 +++ src/sys/dev/raidframe/rf_pqdeg.c Sun Oct 15 18:15:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_pqdeg.c,v 1.9 2005/12/11 12:23:37 christos Exp $ */ +/* $NetBSD: rf_pqdeg.c,v 1.10 2023/10/15 18:15:20 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_pqdeg.c,v 1.9 2005/12/11 12:23:37 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_pqdeg.c,v 1.10 2023/10/15 18:15:20 oster Exp $"); #include "rf_archs.h" @@ -127,7 +127,7 @@ RF_CREATE_DAG_FUNC_DECL(rf_PQ_100_Create RF_PANIC(); rf_CommonCreateSimpleDegradedWriteDAG(raidPtr, asmap, dag_h, bp, flags, allocList, 2, - (int (*) (RF_DagNode_t *)) rf_Degraded_100_PQFunc, + (void (*) (RF_DagNode_t *)) rf_Degraded_100_PQFunc, RF_FALSE); } /* Dead P - act like a RAID 5 small write with parity = Q */ @@ -201,7 +201,7 @@ RF_CREATE_DAG_FUNC_DECL(rf_PQ_110_Create asmap->qInfo = temp; rf_CommonCreateSimpleDegradedWriteDAG(raidPtr, asmap, dag_h, bp, flags, allocList, 1, - (int (*) (RF_DagNode_t *)) rf_PQ_DegradedWriteQFunc, + (void (*) (RF_DagNode_t *)) rf_PQ_DegradedWriteQFunc, RF_FALSE); /* is the regular Q func the right one to call? */ } Index: src/sys/dev/raidframe/rf_pqdegdags.c diff -u src/sys/dev/raidframe/rf_pqdegdags.c:1.16 src/sys/dev/raidframe/rf_pqdegdags.c:1.17 --- src/sys/dev/raidframe/rf_pqdegdags.c:1.16 Sat Aug 7 16:19:15 2021 +++ src/sys/dev/raidframe/rf_pqdegdags.c Sun Oct 15 18:15:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_pqdegdags.c,v 1.16 2021/08/07 16:19:15 thorpej Exp $ */ +/* $NetBSD: rf_pqdegdags.c,v 1.17 2023/10/15 18:15:20 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_pqdegdags.c,v 1.16 2021/08/07 16:19:15 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_pqdegdags.c,v 1.17 2023/10/15 18:15:20 oster Exp $"); #include "rf_archs.h" @@ -55,7 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: rf_pqdegdags static void applyPDA(RF_Raid_t * raidPtr, RF_PhysDiskAddr_t * pda, RF_PhysDiskAddr_t * ppda, - RF_PhysDiskAddr_t * qpda, void *bp); + RF_PhysDiskAddr_t * qpda, const struct buf *bp); /* Two data drives have failed, and we are doing a read that covers one of them. @@ -121,7 +121,7 @@ RF_CREATE_DAG_FUNC_DECL(rf_PQ_DoubleDegR } static void -applyPDA(RF_Raid_t *raidPtr, RF_PhysDiskAddr_t *pda, RF_PhysDiskAddr_t *ppda, RF_PhysDiskAddr_t *qpda, void *bp) +applyPDA(RF_Raid_t *raidPtr, RF_PhysDiskAddr_t *pda, RF_PhysDiskAddr_t *ppda, RF_PhysDiskAddr_t *qpda, const struct buf *bp) { RF_RaidLayout_t *layoutPtr = &(raidPtr->Layout); RF_RaidAddr_t s0off = rf_StripeUnitOffset(layoutPtr, ppda->startSector); @@ -156,7 +156,8 @@ applyPDA(RF_Raid_t *raidPtr, RF_PhysDisk len = s0len + s0off - suoffset; /* src, dest, len */ - rf_bxor(buf, pbuf, rf_RaidAddressToByte(raidPtr, len), bp); + /* rf_bxor(buf, pbuf, rf_RaidAddressToByte(raidPtr, len), bp); */ + rf_bxor(buf, pbuf, rf_RaidAddressToByte(raidPtr, len)); /* dest, src, len, coeff */ rf_IncQ((unsigned long *) qbuf, (unsigned long *) buf, rf_RaidAddressToByte(raidPtr, len), coeff); @@ -182,7 +183,7 @@ applyPDA(RF_Raid_t *raidPtr, RF_PhysDisk */ -int +void rf_PQDoubleRecoveryFunc(RF_DagNode_t *node) { int np = node->numParams; @@ -191,11 +192,11 @@ rf_PQDoubleRecoveryFunc(RF_DagNode_t *no RF_RaidLayout_t *layoutPtr = (RF_RaidLayout_t *) & (raidPtr->Layout); int d, i; unsigned coeff; - RF_RaidAddr_t sosAddr, suoffset; - RF_SectorCount_t len, secPerSU = layoutPtr->sectorsPerStripeUnit; + RF_RaidAddr_t sosAddr; /* , suoffset; */ + RF_SectorCount_t secPerSU = layoutPtr->sectorsPerStripeUnit; int two = 0; - RF_PhysDiskAddr_t *ppda, *ppda2, *qpda, *qpda2, *pda, npda; - char *buf; + RF_PhysDiskAddr_t *ppda, *qpda, *pda, npda; + /* char *buf; */ int numDataCol = layoutPtr->numDataCol; RF_Etimer_t timer; RF_AccTraceEntry_t *tracerec = node->dagHdr->tracerec; @@ -206,9 +207,9 @@ rf_PQDoubleRecoveryFunc(RF_DagNode_t *no (asmap->failedPDAs[1]->numSector + asmap->failedPDAs[0]->numSector < secPerSU)) { RF_ASSERT(0); ppda = node->params[np - 6].p; - ppda2 = node->params[np - 5].p; + /* ppda2 = node->params[np - 5].p; */ qpda = node->params[np - 4].p; - qpda2 = node->params[np - 3].p; + /* qpda2 = node->params[np - 3].p; */ d = (np - 6); two = 1; } else { @@ -219,9 +220,9 @@ rf_PQDoubleRecoveryFunc(RF_DagNode_t *no for (i = 0; i < d; i++) { pda = node->params[i].p; - buf = pda->bufPtr; - suoffset = rf_StripeUnitOffset(layoutPtr, pda->startSector); - len = pda->numSector; + /* buf = pda->bufPtr; */ + /* suoffset = rf_StripeUnitOffset(layoutPtr, pda->startSector); */ + /* len = pda->numSector; */ coeff = rf_RaidAddressToStripeUnitID(layoutPtr, pda->raidAddress); /* compute the data unit offset within the column */ coeff = (coeff % raidPtr->Layout.numDataCol); @@ -245,9 +246,9 @@ rf_PQDoubleRecoveryFunc(RF_DagNode_t *no coeff = (coeff % raidPtr->Layout.numDataCol); for (i = 0; i < numDataCol; i++) { npda.raidAddress = sosAddr + (i * secPerSU); - (raidPtr->Layout.map->MapSector) (raidPtr, npda.raidAddress, &(npda.row), &(npda.col), &(npda.startSector), 0); + (raidPtr->Layout.map->MapSector) (raidPtr, npda.raidAddress, &(npda.col), &(npda.startSector), 0); /* skip over dead disks */ - if (RF_DEAD_DISK(raidPtr->Disks[npda.row][npda.col].status)) + if (RF_DEAD_DISK(raidPtr->Disks[npda.col].status)) if (i != coeff) break; } @@ -267,10 +268,9 @@ rf_PQDoubleRecoveryFunc(RF_DagNode_t *no if (tracerec) tracerec->q_us += RF_ETIMER_VAL_US(timer); rf_GenericWakeupFunc(node, 0); - return (0); } -int +void rf_PQWriteDoubleRecoveryFunc(RF_DagNode_t *node) { /* The situation: @@ -327,9 +327,9 @@ rf_PQWriteDoubleRecoveryFunc(RF_DagNode_ coeff = (coeff % raidPtr->Layout.numDataCol); for (i = 0; i < numDataCol; i++) { npda.raidAddress = sosAddr + (i * secPerSU); - (raidPtr->Layout.map->MapSector) (raidPtr, npda.raidAddress, &(npda.row), &(npda.col), &(npda.startSector), 0); + (raidPtr->Layout.map->MapSector) (raidPtr, npda.raidAddress, &(npda.col), &(npda.startSector), 0); /* skip over dead disks */ - if (RF_DEAD_DISK(raidPtr->Disks[npda.row][npda.col].status)) + if (RF_DEAD_DISK(raidPtr->Disks[npda.col].status)) if (i != coeff) break; } @@ -351,7 +351,8 @@ rf_PQWriteDoubleRecoveryFunc(RF_DagNode_ RF_ASSERT(asmap->numStripeUnitsAccessed == 1); /* dest, src, len, coeff */ rf_IncQ((unsigned long *) qpda->bufPtr, (unsigned long *) asmap->failedPDAs[0]->bufPtr, rf_RaidAddressToByte(raidPtr, qpda->numSector), coeff); - rf_bxor(asmap->failedPDAs[0]->bufPtr, ppda->bufPtr, rf_RaidAddressToByte(raidPtr, ppda->numSector), node->dagHdr->bp); + /* rf_bxor(asmap->failedPDAs[0]->bufPtr, ppda->bufPtr, rf_RaidAddressToByte(raidPtr, ppda->numSector), node->dagHdr->bp); */ + rf_bxor(asmap->failedPDAs[0]->bufPtr, ppda->bufPtr, rf_RaidAddressToByte(raidPtr, ppda->numSector)); /* now apply all the recovery data */ for (i = 0; i < numDataCol - 2; i++) @@ -363,7 +364,6 @@ rf_PQWriteDoubleRecoveryFunc(RF_DagNode_ tracerec->q_us += RF_ETIMER_VAL_US(timer); rf_GenericWakeupFunc(node, 0); - return (0); } RF_CREATE_DAG_FUNC_DECL(rf_PQ_DDLargeWrite) { Index: src/sys/dev/raidframe/rf_pqdegdags.h diff -u src/sys/dev/raidframe/rf_pqdegdags.h:1.3 src/sys/dev/raidframe/rf_pqdegdags.h:1.4 --- src/sys/dev/raidframe/rf_pqdegdags.h:1.3 Fri Feb 5 00:06:15 1999 +++ src/sys/dev/raidframe/rf_pqdegdags.h Sun Oct 15 18:15:20 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_pqdegdags.h,v 1.3 1999/02/05 00:06:15 oster Exp $ */ +/* $NetBSD: rf_pqdegdags.h,v 1.4 2023/10/15 18:15:20 oster Exp $ */ /* * rf_pqdegdags.h */ @@ -39,8 +39,8 @@ #include "rf_dag.h" RF_CREATE_DAG_FUNC_DECL(rf_PQ_DoubleDegRead); -int rf_PQDoubleRecoveryFunc(RF_DagNode_t * node); -int rf_PQWriteDoubleRecoveryFunc(RF_DagNode_t * node); +void rf_PQDoubleRecoveryFunc(RF_DagNode_t * node); +void rf_PQWriteDoubleRecoveryFunc(RF_DagNode_t * node); RF_CREATE_DAG_FUNC_DECL(rf_PQ_DDLargeWrite); RF_CREATE_DAG_FUNC_DECL(rf_PQ_DDSimpleSmallWrite); RF_CREATE_DAG_FUNC_DECL(rf_PQ_200_CreateWriteDAG);