diff options
author | Thierry Deval <tdeval@cvs.openbsd.org> | 2002-12-16 07:01:06 +0000 |
---|---|---|
committer | Thierry Deval <tdeval@cvs.openbsd.org> | 2002-12-16 07:01:06 +0000 |
commit | 9f4f754a2c89fa0aae2495b9897832c871e55410 (patch) | |
tree | 990a42520130e4092662926e20b65536fa947a43 /sys/dev/raidframe/rf_dag.h | |
parent | d18f950d8b18360863af577de1796c0079f4bc20 (diff) |
Major KNF. Incentive from Tedu
Diffstat (limited to 'sys/dev/raidframe/rf_dag.h')
-rw-r--r-- | sys/dev/raidframe/rf_dag.h | 425 |
1 files changed, 270 insertions, 155 deletions
diff --git a/sys/dev/raidframe/rf_dag.h b/sys/dev/raidframe/rf_dag.h index 6221d88fbd4..f75153f7716 100644 --- a/sys/dev/raidframe/rf_dag.h +++ b/sys/dev/raidframe/rf_dag.h @@ -1,5 +1,6 @@ -/* $OpenBSD: rf_dag.h,v 1.3 2002/06/14 21:34:59 todd Exp $ */ +/* $OpenBSD: rf_dag.h,v 1.4 2002/12/16 07:01:03 tdeval Exp $ */ /* $NetBSD: rf_dag.h,v 1.3 1999/02/05 00:06:07 oster Exp $ */ + /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -33,8 +34,8 @@ * * ****************************************************************************/ -#ifndef _RF__RF_DAG_H_ -#define _RF__RF_DAG_H_ +#ifndef _RF__RF_DAG_H_ +#define _RF__RF_DAG_H_ #include "rf_types.h" #include "rf_threadstuff.h" @@ -45,38 +46,50 @@ #include "rf_acctrace.h" #include "rf_memchunk.h" -#define RF_THREAD_CONTEXT 0 /* we were invoked from thread context */ -#define RF_INTR_CONTEXT 1 /* we were invoked from interrupt context */ -#define RF_MAX_ANTECEDENTS 20 /* max num of antecedents a node may posses */ +#define RF_THREAD_CONTEXT 0 /* We were invoked from thread context. */ +#define RF_INTR_CONTEXT 1 /* We were invoked from interrupt context. */ +#define RF_MAX_ANTECEDENTS 20 /* Max num of antecedents a node may possess. */ #include <sys/buf.h> -struct RF_PropHeader_s { /* structure for propagation of results */ - int resultNum; /* bind result # resultNum */ - int paramNum; /* to parameter # paramNum */ - RF_PropHeader_t *next; /* linked list for multiple results/params */ +struct RF_PropHeader_s { /* Structure for propagation of results. */ + int resultNum; /* Bind result # resultNum. */ + int paramNum; /* To parameter # paramNum. */ + RF_PropHeader_t *next; /* Linked list for multiple + * results/params. */ }; typedef enum RF_NodeStatus_e { - rf_bwd1, /* node is ready for undo logging (backward - * error recovery only) */ - rf_bwd2, /* node has completed undo logging (backward - * error recovery only) */ - rf_wait, /* node is waiting to be executed */ - rf_fired, /* node is currently executing its do function */ - rf_good, /* node successfully completed execution of - * its do function */ - rf_bad, /* node failed to successfully execute its do - * function */ - rf_skipped, /* not used anymore, used to imply a node was - * not executed */ - rf_recover, /* node is currently executing its undo - * function */ - rf_panic, /* node failed to successfully execute its - * undo function */ - rf_undone /* node successfully executed its undo - * function */ -} RF_NodeStatus_t; + rf_bwd1, /* + * Node is ready for undo logging + * (backward error recovery only). + */ + rf_bwd2, /* + * Node has completed undo logging + * (backward error recovery only). + */ + rf_wait, /* Node is waiting to be executed. */ + rf_fired, /* Node is currently executing its do function. */ + rf_good, /* + * Node successfully completed execution + * of its do function. + */ + rf_bad, /* + * Node failed to successfully execute + * its do function. + */ + rf_skipped, /* + * Not used anymore, used to imply a node + * was not executed. + */ + rf_recover, /* Node is currently executing its undo function. */ + rf_panic, /* + * Node failed to successfully execute + * its undo function. + */ + rf_undone /* Node successfully executed its undo function. */ +} RF_NodeStatus_t; + /* * These were used to control skipping a node. * Now, these are only used as comments. @@ -86,151 +99,253 @@ typedef enum RF_AntecedentType_e { rf_antiData, rf_outputData, rf_control -} RF_AntecedentType_t; -#define RF_DAG_PTRCACHESIZE 40 -#define RF_DAG_PARAMCACHESIZE 12 +} RF_AntecedentType_t; +#define RF_DAG_PTRCACHESIZE 40 +#define RF_DAG_PARAMCACHESIZE 12 typedef RF_uint8 RF_DagNodeFlags_t; struct RF_DagNode_s { - RF_NodeStatus_t status; /* current status of this node */ - int (*doFunc) (RF_DagNode_t *); /* normal function */ - int (*undoFunc) (RF_DagNode_t *); /* func to remove effect of - * doFunc */ - int (*wakeFunc) (RF_DagNode_t *, int status); /* func called when the - * node completes an I/O */ - int numParams; /* number of parameters required by *funcPtr */ - int numResults; /* number of results produced by *funcPtr */ - int numAntecedents; /* number of antecedents */ - int numAntDone; /* number of antecedents which have finished */ - int numSuccedents; /* number of succedents */ - int numSuccFired; /* incremented when a succedent is fired - * during forward execution */ - int numSuccDone; /* incremented when a succedent finishes - * during rollBackward */ - int commitNode; /* boolean flag - if true, this is a commit - * node */ - RF_DagNode_t **succedents; /* succedents, array size - * numSuccedents */ - RF_DagNode_t **antecedents; /* antecedents, array size - * numAntecedents */ - RF_AntecedentType_t antType[RF_MAX_ANTECEDENTS]; /* type of each - * antecedent */ - void **results; /* array of results produced by *funcPtr */ - RF_DagParam_t *params; /* array of parameters required by *funcPtr */ - RF_PropHeader_t **propList; /* propagation list, size - * numSuccedents */ - RF_DagHeader_t *dagHdr; /* ptr to head of dag containing this node */ - void *dagFuncData; /* dag execution func uses this for whatever - * it wants */ - RF_DagNode_t *next; - int nodeNum; /* used by PrintDAG for debug only */ - int visited; /* used to avoid re-visiting nodes on DAG - * walks */ - /* ANY CODE THAT USES THIS FIELD MUST MAINTAIN THE PROPERTY THAT AFTER - * IT FINISHES, ALL VISITED FLAGS IN THE DAG ARE IDENTICAL */ - char *name; /* debug only */ - RF_DagNodeFlags_t flags;/* see below */ - RF_DagNode_t *dag_ptrs[RF_DAG_PTRCACHESIZE]; /* cache for performance */ - RF_DagParam_t dag_params[RF_DAG_PARAMCACHESIZE]; /* cache for performance */ + RF_NodeStatus_t status; /* Current status of this node. */ + int (*doFunc) (RF_DagNode_t *); + /* Normal function. */ + int (*undoFunc) (RF_DagNode_t *); + /* Func to remove effect of doFunc. */ + int (*wakeFunc) (RF_DagNode_t *, int status); + /* + * Func called when the node completes + * an I/O. + */ + int numParams; /* + * Number of parameters required + * by *funcPtr. + */ + int numResults; /* + * Number of results produced + * by *funcPtr. + */ + int numAntecedents; /* Number of antecedents. */ + int numAntDone; /* + * Number of antecedents that + * have finished. + */ + int numSuccedents; /* Number of succedents. */ + int numSuccFired; /* + * Incremented when a succedent + * is fired during forward execution. + */ + int numSuccDone; /* + * Incremented when a succedent + * finishes during rollBackward. + */ + int commitNode; /* + * Boolean flag - if true, this is + * a commit node. + */ + RF_DagNode_t **succedents; /* + * Succedents, array size + * numSuccedents. + */ + RF_DagNode_t **antecedents; /* + * Antecedents, array size + * numAntecedents. + */ + RF_AntecedentType_t antType[RF_MAX_ANTECEDENTS]; + /* Type of each antecedent. */ + void **results; /* + * Array of results produced + * by *funcPtr. + */ + RF_DagParam_t *params; /* + * Array of parameters required + * by *funcPtr. + */ + RF_PropHeader_t **propList; /* + * Propagation list, + * size numSuccedents. + */ + RF_DagHeader_t *dagHdr; /* + * Ptr to head of dag containing + * this node. + */ + void *dagFuncData; /* + * Dag execution func uses this + * for whatever it wants. + */ + RF_DagNode_t *next; + int nodeNum; /* Used by PrintDAG for debug only. */ + int visited; /* + * Used to avoid re-visiting + * nodes on DAG walks. + */ + /* + * ANY CODE THAT USES THIS FIELD MUST MAINTAIN THE PROPERTY THAT + * AFTER IT FINISHES, ALL VISITED FLAGS IN THE DAG ARE IDENTICAL. + */ + + char *name; /* Debug only. */ + RF_DagNodeFlags_t flags; /* See below. */ + RF_DagNode_t *dag_ptrs[RF_DAG_PTRCACHESIZE]; + /* Cache for performance. */ + RF_DagParam_t dag_params[RF_DAG_PARAMCACHESIZE]; + /* Cache for performance. */ }; + /* - * Bit values for flags field of RF_DagNode_t + * Bit values for flags field of RF_DagNode_t. */ -#define RF_DAGNODE_FLAG_NONE 0x00 -#define RF_DAGNODE_FLAG_YIELD 0x01 /* in the kernel, yield the processor - * before firing this node */ +#define RF_DAGNODE_FLAG_NONE 0x00 +#define RF_DAGNODE_FLAG_YIELD 0x01 /* + * In the kernel, yield the processor + * before firing this node. + */ -/* enable - DAG ready for normal execution, no errors encountered - * rollForward - DAG encountered an error after commit point, rolling forward - * rollBackward - DAG encountered an error prior to commit point, rolling backward +/* + * rf_enable - DAG ready for normal execution, no errors encountered. + * rf_rollForward - DAG encountered an error after commit point, rolling + * forward. + * rf_rollBackward - DAG encountered an error prior to commit point, rolling + * backward. */ typedef enum RF_DagStatus_e { rf_enable, rf_rollForward, rf_rollBackward -} RF_DagStatus_t; -#define RF_MAX_HDR_SUCC 1 +} RF_DagStatus_t; + +#define RF_MAX_HDR_SUCC 1 -#define RF_MAXCHUNKS 10 +#define RF_MAXCHUNKS 10 struct RF_DagHeader_s { - RF_DagStatus_t status; /* status of this DAG */ - int numSuccedents; /* DAG may be a tree, i.e. may have > 1 root */ - int numCommitNodes; /* number of commit nodes in graph */ - int numCommits; /* number of commit nodes which have been - * fired */ - RF_DagNode_t *succedents[RF_MAX_HDR_SUCC]; /* array of succedents, - * size numSuccedents */ - RF_DagHeader_t *next; /* ptr to allow a list of dags */ - RF_AllocListElem_t *allocList; /* ptr to list of ptrs to be freed - * prior to freeing DAG */ - RF_AccessStripeMapHeader_t *asmList; /* list of access stripe maps - * to be freed */ - int nodeNum; /* used by PrintDAG for debug only */ - int numNodesCompleted; - RF_AccTraceEntry_t *tracerec; /* perf mon only */ - - void (*cbFunc) (void *); /* function to call when the dag - * completes */ - void *cbArg; /* argument for cbFunc */ - char *creator; /* name of function used to create this dag */ - - RF_Raid_t *raidPtr; /* the descriptor for the RAID device this DAG - * is for */ - void *bp; /* the bp for this I/O passed down from the - * file system. ignored outside kernel */ - - RF_ChunkDesc_t *memChunk[RF_MAXCHUNKS]; /* experimental- Chunks of - * memory to be retained upon - * DAG free for re-use */ - int chunkIndex; /* the idea is to avoid calls to alloc and - * free */ + RF_DagStatus_t status; /* Status of this DAG. */ + int numSuccedents; /* + * DAG may be a tree, + * i.e. may have > 1 root. + */ + int numCommitNodes; /* + * Number of commit nodes + * in graph. + */ + int numCommits; /* + * Number of commit nodes + * that have been fired. + */ + RF_DagNode_t *succedents[RF_MAX_HDR_SUCC]; /* + * Array of succedents, + * size numSuccedents. + */ + RF_DagHeader_t *next; /* + * Ptr to allow a list + * of dags. + */ + RF_AllocListElem_t *allocList; /* + * Ptr to list of ptrs + * to be freed prior to + * freeing DAG. + */ + RF_AccessStripeMapHeader_t *asmList; /* + * List of access stripe maps + * to be freed. + */ + int nodeNum; /* + * Used by PrintDAG for + * debug only. + */ + int numNodesCompleted; + RF_AccTraceEntry_t *tracerec; /* Perf mon only. */ - RF_ChunkDesc_t **xtraMemChunk; /* escape hatch which allows - * SelectAlgorithm to merge memChunks - * from several dags */ - int xtraChunkIndex; /* number of ptrs to valid chunks */ - int xtraChunkCnt; /* number of ptrs to chunks allocated */ + void (*cbFunc) (void *); /* + * Function to call when + * the dag completes. + */ + void *cbArg; /* Argument for cbFunc. */ + char *creator; /* + * Name of function used + * to create this dag. + */ + RF_Raid_t *raidPtr; /* + * The descriptor for the + * RAID device this DAG + * is for. + */ + void *bp; /* + * The bp for this I/O passed + * down from the file system. + * ignored outside kernel. + */ + + RF_ChunkDesc_t *memChunk[RF_MAXCHUNKS]; /* + * Experimental- Chunks of + * memory to be retained upon + * DAG free for re-use. + */ + int chunkIndex; /* + * The idea is to avoid calls + * to alloc and free. + */ + + RF_ChunkDesc_t **xtraMemChunk; /* + * Escape hatch that allows + * SelectAlgorithm to merge + * memChunks from several dags. + */ + int xtraChunkIndex; /* + * Number of ptrs to valid + * chunks. + */ + int xtraChunkCnt; /* + * Number of ptrs to chunks + * allocated. + */ }; struct RF_DagList_s { - /* common info for a list of dags which will be fired sequentially */ - int numDags; /* number of dags in the list */ - int numDagsFired; /* number of dags in list which have initiated - * execution */ - int numDagsDone; /* number of dags in list which have completed - * execution */ - RF_DagHeader_t *dags; /* list of dags */ - RF_RaidAccessDesc_t *desc; /* ptr to descriptor for this access */ - RF_AccTraceEntry_t tracerec; /* perf mon info for dags (not user - * info) */ + /* Common info for a list of dags that will be fired sequentially. */ + int numDags; /* Number of dags in the list. */ + int numDagsFired; /* + * Number of dags in list that + * have initiated execution. + */ + int numDagsDone; /* + * Number of dags in list that + * have completed execution. + */ + RF_DagHeader_t *dags; /* List of dags. */ + RF_RaidAccessDesc_t *desc; /* Ptr to descriptor for this access. */ + RF_AccTraceEntry_t tracerec; /* + * Perf mon info for dags (not user + * info). + */ }; -/* resets a node so that it can be fired again */ -#define RF_ResetNode(_n_) { \ - (_n_)->status = rf_wait; \ - (_n_)->numAntDone = 0; \ - (_n_)->numSuccFired = 0; \ - (_n_)->numSuccDone = 0; \ - (_n_)->next = NULL; \ -} - -#define RF_ResetDagHeader(_h_) { \ - (_h_)->numNodesCompleted = 0; \ - (_h_)->numCommits = 0; \ - (_h_)->status = rf_enable; \ -} - -/* convenience macro for declaring a create dag function */ - -#define RF_CREATE_DAG_FUNC_DECL(_name_) \ -void _name_ ( \ - RF_Raid_t *raidPtr, \ - RF_AccessStripeMap_t *asmap, \ - RF_DagHeader_t *dag_h, \ - void *bp, \ - RF_RaidAccessFlags_t flags, \ - RF_AllocListElem_t *allocList) - -#endif /* !_RF__RF_DAG_H_ */ + +/* Reset a node so that it can be fired again. */ +#define RF_ResetNode(_n_) do { \ + (_n_)->status = rf_wait; \ + (_n_)->numAntDone = 0; \ + (_n_)->numSuccFired = 0; \ + (_n_)->numSuccDone = 0; \ + (_n_)->next = NULL; \ +} while (0) + +#define RF_ResetDagHeader(_h_) do { \ + (_h_)->numNodesCompleted = 0; \ + (_h_)->numCommits = 0; \ + (_h_)->status = rf_enable; \ +} while (0) + +/* Convenience macro for declaring a create dag function. */ +#define RF_CREATE_DAG_FUNC_DECL(_name_) \ +void _name_ (RF_Raid_t *, RF_AccessStripeMap_t *, RF_DagHeader_t *, \ + void *, RF_RaidAccessFlags_t, RF_AllocListElem_t *); \ +void _name_ ( \ + RF_Raid_t *raidPtr, \ + RF_AccessStripeMap_t *asmap, \ + RF_DagHeader_t *dag_h, \ + void *bp, \ + RF_RaidAccessFlags_t flags, \ + RF_AllocListElem_t *allocList \ +) + +#endif /* !_RF__RF_DAG_H_ */ |