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);