summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoroster <oster@NetBSD.org>2004-03-18 17:26:36 +0000
committeroster <oster@NetBSD.org>2004-03-18 17:26:36 +0000
commitba5bdf004853ecf78c508fd4d2a4ff2ff746aa5b (patch)
tree60adbad9d8999ee68bd6b3b4a1477bdeeed35332 /sys/dev
parent1051cc745f4ff7f45dca12591577b98787e6e6ce (diff)
Use rf_AllocDAGNode() to get new DAG nodes.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/raidframe/rf_parityscan.c50
1 files changed, 34 insertions, 16 deletions
diff --git a/sys/dev/raidframe/rf_parityscan.c b/sys/dev/raidframe/rf_parityscan.c
index 873d2abb29c..4b689770c0f 100644
--- a/sys/dev/raidframe/rf_parityscan.c
+++ b/sys/dev/raidframe/rf_parityscan.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_parityscan.c,v 1.26 2004/03/05 03:58:21 oster Exp $ */
+/* $NetBSD: rf_parityscan.c,v 1.27 2004/03/18 17:26:36 oster Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -33,7 +33,7 @@
****************************************************************************/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_parityscan.c,v 1.26 2004/03/05 03:58:21 oster Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_parityscan.c,v 1.27 2004/03/18 17:26:36 oster Exp $");
#include <dev/raidframe/raidframevar.h>
@@ -406,16 +406,10 @@ rf_MakeSimpleDAG(RF_Raid_t *raidPtr, int nNodes, int bytesPerSU, char *databuf,
RF_RaidAccessFlags_t flags, int priority)
{
RF_DagHeader_t *dag_h;
- RF_DagNode_t *nodes, *termNode, *blockNode, *unblockNode;
+ RF_DagNode_t *nodes, *termNode, *blockNode, *unblockNode, *tmpNode;
int i;
- /* create the nodes, the block & unblock nodes, and the terminator
- * node */
- RF_MallocAndAdd(nodes, (nNodes + 3) * sizeof(RF_DagNode_t),
- (RF_DagNode_t *), alloclist);
- blockNode = &nodes[nNodes];
- unblockNode = blockNode + 1;
- termNode = unblockNode + 1;
+ /* grab a DAG header... */
dag_h = rf_AllocDAGHeader();
dag_h->raidPtr = (void *) raidPtr;
@@ -429,18 +423,42 @@ rf_MakeSimpleDAG(RF_Raid_t *raidPtr, int nNodes, int bytesPerSU, char *databuf,
dag_h->numCommitNodes = 1;
dag_h->numCommits = 0;
+ /* create the nodes, the block & unblock nodes, and the terminator
+ * node */
+
+ for (i = 0; i < nNodes; i++) {
+ tmpNode = rf_AllocDAGNode();
+ tmpNode->list_next = dag_h->nodes;
+ dag_h->nodes = tmpNode;
+ }
+ nodes = dag_h->nodes;
+
+ blockNode = rf_AllocDAGNode();
+ blockNode->list_next = dag_h->nodes;
+ dag_h->nodes = blockNode;
+
+ unblockNode = rf_AllocDAGNode();
+ unblockNode->list_next = dag_h->nodes;
+ dag_h->nodes = unblockNode;
+
+ termNode = rf_AllocDAGNode();
+ termNode->list_next = dag_h->nodes;
+ dag_h->nodes = termNode;
+
dag_h->succedents[0] = blockNode;
rf_InitNode(blockNode, rf_wait, RF_FALSE, rf_NullNodeFunc, rf_NullNodeUndoFunc, NULL, nNodes, 0, 0, 0, dag_h, "Nil", alloclist);
rf_InitNode(unblockNode, rf_wait, RF_TRUE, rf_NullNodeFunc, rf_NullNodeUndoFunc, NULL, 1, nNodes, 0, 0, dag_h, "Nil", alloclist);
unblockNode->succedents[0] = termNode;
+ tmpNode = nodes;
for (i = 0; i < nNodes; i++) {
- blockNode->succedents[i] = unblockNode->antecedents[i] = &nodes[i];
+ blockNode->succedents[i] = unblockNode->antecedents[i] = tmpNode;
unblockNode->antType[i] = rf_control;
- rf_InitNode(&nodes[i], rf_wait, RF_FALSE, doFunc, undoFunc, rf_GenericWakeupFunc, 1, 1, 4, 0, dag_h, name, alloclist);
- nodes[i].succedents[0] = unblockNode;
- nodes[i].antecedents[0] = blockNode;
- nodes[i].antType[0] = rf_control;
- nodes[i].params[1].p = (databuf + (i * bytesPerSU));
+ rf_InitNode(tmpNode, rf_wait, RF_FALSE, doFunc, undoFunc, rf_GenericWakeupFunc, 1, 1, 4, 0, dag_h, name, alloclist);
+ tmpNode->succedents[0] = unblockNode;
+ tmpNode->antecedents[0] = blockNode;
+ tmpNode->antType[0] = rf_control;
+ tmpNode->params[1].p = (databuf + (i * bytesPerSU));
+ tmpNode = tmpNode->list_next;
}
rf_InitNode(termNode, rf_wait, RF_FALSE, rf_TerminateFunc, rf_TerminateUndoFunc, NULL, 0, 1, 0, 0, dag_h, "Trm", alloclist);
termNode->antecedents[0] = unblockNode;