summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe/rf_reconstruct.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/raidframe/rf_reconstruct.h')
-rw-r--r--sys/dev/raidframe/rf_reconstruct.h285
1 files changed, 112 insertions, 173 deletions
diff --git a/sys/dev/raidframe/rf_reconstruct.h b/sys/dev/raidframe/rf_reconstruct.h
index 5913e626609..c8bc680f0f6 100644
--- a/sys/dev/raidframe/rf_reconstruct.h
+++ b/sys/dev/raidframe/rf_reconstruct.h
@@ -1,5 +1,5 @@
-/* $OpenBSD: rf_reconstruct.h,v 1.1 1999/01/11 14:29:47 niklas Exp $ */
-/* $NetBSD: rf_reconstruct.h,v 1.1 1998/11/13 04:20:34 oster Exp $ */
+/* $OpenBSD: rf_reconstruct.h,v 1.2 1999/02/16 00:03:23 niklas Exp $ */
+/* $NetBSD: rf_reconstruct.h,v 1.3 1999/02/05 00:06:16 oster Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@@ -31,94 +31,6 @@
* rf_reconstruct.h -- header file for reconstruction code
*********************************************************/
-/* :
- * Log: rf_reconstruct.h,v
- * Revision 1.25 1996/08/01 15:57:24 jimz
- * minor cleanup
- *
- * Revision 1.24 1996/07/22 19:52:16 jimz
- * switched node params to RF_DagParam_t, a union of
- * a 64-bit int and a void *, for better portability
- * attempted hpux port, but failed partway through for
- * lack of a single C compiler capable of compiling all
- * source files
- *
- * Revision 1.23 1996/07/15 05:40:41 jimz
- * some recon datastructure cleanup
- * better handling of multiple failures
- * added undocumented double-recon test
- *
- * Revision 1.22 1996/07/13 00:00:59 jimz
- * sanitized generalized reconstruction architecture
- * cleaned up head sep, rbuf problems
- *
- * Revision 1.21 1996/07/11 19:08:00 jimz
- * generalize reconstruction mechanism
- * allow raid1 reconstructs via copyback (done with array
- * quiesced, not online, therefore not disk-directed)
- *
- * Revision 1.20 1996/06/11 10:57:30 jimz
- * add rf_RegisterReconDoneProc
- *
- * Revision 1.19 1996/06/10 11:55:47 jimz
- * Straightened out some per-array/not-per-array distinctions, fixed
- * a couple bugs related to confusion. Added shutdown lists. Removed
- * layout shutdown function (now subsumed by shutdown lists).
- *
- * Revision 1.18 1996/06/07 21:33:04 jimz
- * begin using consistent types for sector numbers,
- * stripe numbers, row+col numbers, recon unit numbers
- *
- * Revision 1.17 1996/06/05 18:06:02 jimz
- * Major code cleanup. The Great Renaming is now done.
- * Better modularity. Better typing. Fixed a bunch of
- * synchronization bugs. Made a lot of global stuff
- * per-desc or per-array. Removed dead code.
- *
- * Revision 1.16 1996/06/03 23:28:26 jimz
- * more bugfixes
- * check in tree to sync for IPDS runs with current bugfixes
- * there still may be a problem with threads in the script test
- * getting I/Os stuck- not trivially reproducible (runs ~50 times
- * in a row without getting stuck)
- *
- * Revision 1.15 1996/06/02 17:31:48 jimz
- * Moved a lot of global stuff into array structure, where it belongs.
- * Fixed up paritylogging, pss modules in this manner. Some general
- * code cleanup. Removed lots of dead code, some dead files.
- *
- * Revision 1.14 1996/05/31 22:26:54 jimz
- * fix a lot of mapping problems, memory allocation problems
- * found some weird lock issues, fixed 'em
- * more code cleanup
- *
- * Revision 1.13 1996/05/30 11:29:41 jimz
- * Numerous bug fixes. Stripe lock release code disagreed with the taking code
- * about when stripes should be locked (I made it consistent: no parity, no lock)
- * There was a lot of extra serialization of I/Os which I've removed- a lot of
- * it was to calculate values for the cache code, which is no longer with us.
- * More types, function, macro cleanup. Added code to properly quiesce the array
- * on shutdown. Made a lot of stuff array-specific which was (bogusly) general
- * before. Fixed memory allocation, freeing bugs.
- *
- * Revision 1.12 1996/05/27 18:56:37 jimz
- * more code cleanup
- * better typing
- * compiles in all 3 environments
- *
- * Revision 1.11 1996/05/23 21:46:35 jimz
- * checkpoint in code cleanup (release prep)
- * lots of types, function names have been fixed
- *
- * Revision 1.10 1996/05/18 19:51:34 jimz
- * major code cleanup- fix syntax, make some types consistent,
- * add prototypes, clean out dead code, et cetera
- *
- * Revision 1.9 1995/12/06 15:04:55 root
- * added copyright info
- *
- */
-
#ifndef _RF__RF_RECONSTRUCT_H_
#define _RF__RF_RECONSTRUCT_H_
@@ -129,31 +41,37 @@
/* reconstruction configuration information */
struct RF_ReconConfig_s {
- unsigned numFloatingReconBufs; /* number of floating recon bufs to use */
- RF_HeadSepLimit_t headSepLimit; /* how far apart the heads are allow to become, in parity stripes */
+ unsigned numFloatingReconBufs; /* number of floating recon bufs to
+ * use */
+ RF_HeadSepLimit_t headSepLimit; /* how far apart the heads are allow
+ * to become, in parity stripes */
};
-
/* a reconstruction buffer */
struct RF_ReconBuffer_s {
- RF_Raid_t *raidPtr; /* void * to avoid recursive includes */
- caddr_t buffer; /* points to the data */
- RF_StripeNum_t parityStripeID; /* the parity stripe that this data relates to */
- int which_ru; /* which reconstruction unit within the PSS */
- RF_SectorNum_t failedDiskSectorOffset;/* the offset into the failed disk */
- RF_RowCol_t row, col; /* which disk this buffer belongs to or is targeted at */
- RF_StripeCount_t count; /* counts the # of SUs installed so far */
- int priority; /* used to force hi priority recon */
- RF_RbufType_t type; /* FORCED or FLOATING */
- char *arrived; /* [x] = 1/0 if SU from disk x has/hasn't arrived */
- RF_ReconBuffer_t *next; /* used for buffer management */
- void *arg; /* generic field for general use */
- RF_RowCol_t spRow, spCol; /* spare disk to which this buf should be written */
- /* if dist sparing off, always identifies the replacement disk */
- RF_SectorNum_t spOffset; /* offset into the spare disk */
- /* if dist sparing off, identical to failedDiskSectorOffset */
- RF_ReconParityStripeStatus_t *pssPtr; /* debug- pss associated with issue-pending write */
+ RF_Raid_t *raidPtr; /* void * to avoid recursive includes */
+ caddr_t buffer; /* points to the data */
+ RF_StripeNum_t parityStripeID; /* the parity stripe that this data
+ * relates to */
+ int which_ru; /* which reconstruction unit within the PSS */
+ RF_SectorNum_t failedDiskSectorOffset; /* the offset into the failed
+ * disk */
+ RF_RowCol_t row, col; /* which disk this buffer belongs to or is
+ * targeted at */
+ RF_StripeCount_t count; /* counts the # of SUs installed so far */
+ int priority; /* used to force hi priority recon */
+ RF_RbufType_t type; /* FORCED or FLOATING */
+ char *arrived; /* [x] = 1/0 if SU from disk x has/hasn't
+ * arrived */
+ RF_ReconBuffer_t *next; /* used for buffer management */
+ void *arg; /* generic field for general use */
+ RF_RowCol_t spRow, spCol; /* spare disk to which this buf should
+ * be written */
+ /* if dist sparing off, always identifies the replacement disk */
+ RF_SectorNum_t spOffset;/* offset into the spare disk */
+ /* if dist sparing off, identical to failedDiskSectorOffset */
+ RF_ReconParityStripeStatus_t *pssPtr; /* debug- pss associated with
+ * issue-pending write */
};
-
/* a reconstruction event descriptor. The event types currently are:
* RF_REVENT_READDONE -- a read operation has completed
* RF_REVENT_WRITEDONE -- a write operation has completed
@@ -172,87 +90,108 @@ typedef enum RF_Revent_e {
RF_REVENT_HEADSEPCLEAR,
RF_REVENT_SKIP,
RF_REVENT_FORCEDREADDONE
-} RF_Revent_t;
+} RF_Revent_t;
struct RF_ReconEvent_s {
- RF_Revent_t type; /* what kind of event has occurred */
- RF_RowCol_t col; /* row ID is implicit in the queue in which the event is placed */
- void *arg; /* a generic argument */
- RF_ReconEvent_t *next;
+ RF_Revent_t type; /* what kind of event has occurred */
+ RF_RowCol_t col; /* row ID is implicit in the queue in which
+ * the event is placed */
+ void *arg; /* a generic argument */
+ RF_ReconEvent_t *next;
};
-
/*
* Reconstruction control information maintained per-disk
* (for surviving disks)
*/
struct RF_PerDiskReconCtrl_s {
- RF_ReconCtrl_t *reconCtrl;
- RF_RowCol_t row, col; /* to make this structure self-identifying */
- RF_StripeNum_t curPSID; /* the next parity stripe ID to check on this disk */
- RF_HeadSepLimit_t headSepCounter; /* counter used to control maximum head separation */
- RF_SectorNum_t diskOffset; /* the offset into the indicated disk of the current PU */
- RF_ReconUnitNum_t ru_count; /* this counts off the recon units within each parity unit */
- RF_ReconBuffer_t *rbuf; /* the recon buffer assigned to this disk */
+ RF_ReconCtrl_t *reconCtrl;
+ RF_RowCol_t row, col; /* to make this structure self-identifying */
+ RF_StripeNum_t curPSID; /* the next parity stripe ID to check on this
+ * disk */
+ RF_HeadSepLimit_t headSepCounter; /* counter used to control
+ * maximum head separation */
+ RF_SectorNum_t diskOffset; /* the offset into the indicated disk
+ * of the current PU */
+ RF_ReconUnitNum_t ru_count; /* this counts off the recon units
+ * within each parity unit */
+ RF_ReconBuffer_t *rbuf; /* the recon buffer assigned to this disk */
};
-
/* main reconstruction control structure */
struct RF_ReconCtrl_s {
- RF_RaidReconDesc_t *reconDesc;
- RF_RowCol_t fcol; /* which column has failed */
- RF_PerDiskReconCtrl_t *perDiskInfo; /* information maintained per-disk */
- RF_ReconMap_t *reconMap; /* map of what has/has not been reconstructed */
- RF_RowCol_t spareRow; /* which of the spare disks we're using */
- RF_RowCol_t spareCol;
- RF_StripeNum_t lastPSID; /* the ID of the last parity stripe we want reconstructed */
- int percentComplete; /* percentage completion of reconstruction */
-
- /* reconstruction event queue */
- RF_ReconEvent_t *eventQueue; /* queue of pending reconstruction events */
- RF_DECLARE_MUTEX(eq_mutex) /* mutex for locking event queue */
- RF_DECLARE_COND(eq_cond) /* condition variable for signalling recon events */
- int eq_count; /* debug only */
-
- /* reconstruction buffer management */
- RF_DECLARE_MUTEX(rb_mutex) /* mutex for messing around with recon buffers */
- RF_ReconBuffer_t *floatingRbufs; /* available floating reconstruction buffers */
- RF_ReconBuffer_t *committedRbufs; /* recon buffers that have been committed to some waiting disk */
- RF_ReconBuffer_t *fullBufferList; /* full buffers waiting to be written out */
- RF_ReconBuffer_t *priorityList; /* full buffers that have been elevated to higher priority */
- RF_CallbackDesc_t *bufferWaitList; /* disks that are currently blocked waiting for buffers */
-
- /* parity stripe status table */
- RF_PSStatusHeader_t *pssTable; /* stores the reconstruction status of active parity stripes */
-
- /* maximum-head separation control */
- RF_HeadSepLimit_t minHeadSepCounter; /* the minimum hs counter over all disks */
- RF_CallbackDesc_t *headSepCBList; /* list of callbacks to be done as minPSID advances */
-
- /* performance monitoring */
- struct timeval starttime; /* recon start time */
-
- void (*continueFunc)(void *); /* function to call when io returns*/
- void *continueArg; /* argument for Func */
+ RF_RaidReconDesc_t *reconDesc;
+ RF_RowCol_t fcol; /* which column has failed */
+ RF_PerDiskReconCtrl_t *perDiskInfo; /* information maintained
+ * per-disk */
+ RF_ReconMap_t *reconMap;/* map of what has/has not been reconstructed */
+ RF_RowCol_t spareRow; /* which of the spare disks we're using */
+ RF_RowCol_t spareCol;
+ RF_StripeNum_t lastPSID;/* the ID of the last parity stripe we want
+ * reconstructed */
+ int percentComplete;/* percentage completion of reconstruction */
+
+ /* reconstruction event queue */
+ RF_ReconEvent_t *eventQueue; /* queue of pending reconstruction
+ * events */
+ RF_DECLARE_MUTEX(eq_mutex) /* mutex for locking event
+ * queue */
+ RF_DECLARE_COND(eq_cond) /* condition variable for
+ * signalling recon events */
+ int eq_count; /* debug only */
+
+ /* reconstruction buffer management */
+ RF_DECLARE_MUTEX(rb_mutex) /* mutex for messing around
+ * with recon buffers */
+ RF_ReconBuffer_t *floatingRbufs; /* available floating
+ * reconstruction buffers */
+ RF_ReconBuffer_t *committedRbufs; /* recon buffers that have
+ * been committed to some
+ * waiting disk */
+ RF_ReconBuffer_t *fullBufferList; /* full buffers waiting to be
+ * written out */
+ RF_ReconBuffer_t *priorityList; /* full buffers that have been
+ * elevated to higher priority */
+ RF_CallbackDesc_t *bufferWaitList; /* disks that are currently
+ * blocked waiting for buffers */
+
+ /* parity stripe status table */
+ RF_PSStatusHeader_t *pssTable; /* stores the reconstruction status of
+ * active parity stripes */
+
+ /* maximum-head separation control */
+ RF_HeadSepLimit_t minHeadSepCounter; /* the minimum hs counter over
+ * all disks */
+ RF_CallbackDesc_t *headSepCBList; /* list of callbacks to be
+ * done as minPSID advances */
+
+ /* performance monitoring */
+ struct timeval starttime; /* recon start time */
+
+ void (*continueFunc) (void *); /* function to call when io
+ * returns */
+ void *continueArg; /* argument for Func */
};
-
/* the default priority for reconstruction accesses */
#define RF_IO_RECON_PRIORITY RF_IO_LOW_PRIORITY
-int rf_ConfigureReconstruction(RF_ShutdownList_t **listp);
+int rf_ConfigureReconstruction(RF_ShutdownList_t ** listp);
-int rf_ReconstructFailedDisk(RF_Raid_t *raidPtr, RF_RowCol_t row,
- RF_RowCol_t col);
+int
+rf_ReconstructFailedDisk(RF_Raid_t * raidPtr, RF_RowCol_t row,
+ RF_RowCol_t col);
-int rf_ReconstructFailedDiskBasic(RF_Raid_t *raidPtr, RF_RowCol_t row,
- RF_RowCol_t col);
+int
+rf_ReconstructFailedDiskBasic(RF_Raid_t * raidPtr, RF_RowCol_t row,
+ RF_RowCol_t col);
-int rf_ContinueReconstructFailedDisk(RF_RaidReconDesc_t *reconDesc);
+int rf_ContinueReconstructFailedDisk(RF_RaidReconDesc_t * reconDesc);
-int rf_ForceOrBlockRecon(RF_Raid_t *raidPtr, RF_AccessStripeMap_t *asmap,
- void (*cbFunc)(RF_Raid_t *,void *), void *cbArg);
+int
+rf_ForceOrBlockRecon(RF_Raid_t * raidPtr, RF_AccessStripeMap_t * asmap,
+ void (*cbFunc) (RF_Raid_t *, void *), void *cbArg);
-int rf_UnblockRecon(RF_Raid_t *raidPtr, RF_AccessStripeMap_t *asmap);
+ int rf_UnblockRecon(RF_Raid_t * raidPtr, RF_AccessStripeMap_t * asmap);
-int rf_RegisterReconDoneProc(RF_Raid_t *raidPtr, void (*proc)(RF_Raid_t *, void *), void *arg,
- RF_ReconDoneProc_t **handlep);
+ int rf_RegisterReconDoneProc(RF_Raid_t * raidPtr, void (*proc) (RF_Raid_t *, void *), void *arg,
+ RF_ReconDoneProc_t ** handlep);
-#endif /* !_RF__RF_RECONSTRUCT_H_ */
+#endif /* !_RF__RF_RECONSTRUCT_H_ */