diff options
Diffstat (limited to 'sys/dev/raidframe/rf_psstatus.h')
-rw-r--r-- | sys/dev/raidframe/rf_psstatus.h | 185 |
1 files changed, 115 insertions, 70 deletions
diff --git a/sys/dev/raidframe/rf_psstatus.h b/sys/dev/raidframe/rf_psstatus.h index 76fbb6999a0..2fa397981e9 100644 --- a/sys/dev/raidframe/rf_psstatus.h +++ b/sys/dev/raidframe/rf_psstatus.h @@ -1,5 +1,6 @@ -/* $OpenBSD: rf_psstatus.h,v 1.2 1999/02/16 00:03:13 niklas Exp $ */ +/* $OpenBSD: rf_psstatus.h,v 1.3 2002/12/16 07:01:04 tdeval Exp $ */ /* $NetBSD: rf_psstatus.h,v 1.3 1999/02/05 00:06:15 oster Exp $ */ + /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -32,101 +33,145 @@ * psstatus.h * * The reconstruction code maintains a bunch of status related to the parity - * stripes that are currently under reconstruction. This header file defines + * stripes that are currently under reconstruction. This header file defines * the status structures. * *****************************************************************************/ -#ifndef _RF__RF_PSSTATUS_H_ -#define _RF__RF_PSSTATUS_H_ +#ifndef _RF__RF_PSSTATUS_H_ +#define _RF__RF_PSSTATUS_H_ #include "rf_types.h" #include "rf_threadstuff.h" #include "rf_callback.h" -#define RF_PS_MAX_BUFS 10 /* max number of bufs we'll accumulate before - * we do an XOR */ +#define RF_PS_MAX_BUFS 10 /* + * Max number of bufs we'll + * accumulate before we do + * an XOR. + */ -#define RF_PSS_DEFAULT_TABLESIZE 200 +#define RF_PSS_DEFAULT_TABLESIZE 200 /* * Macros to acquire/release the mutex lock on a parity stripe status * descriptor. Note that we use just one lock for the whole hash chain. */ -#define RF_HASH_PSID(_raid_,_psid_) ( (_psid_) % ((_raid_)->pssTableSize) ) /* simple hash function */ -#define RF_LOCK_PSS_MUTEX(_raidPtr, _row, _psid) \ - RF_LOCK_MUTEX((_raidPtr)->reconControl[_row]->pssTable[ RF_HASH_PSID(_raidPtr,_psid) ].mutex) -#define RF_UNLOCK_PSS_MUTEX(_raidPtr, _row, _psid) \ - RF_UNLOCK_MUTEX((_raidPtr)->reconControl[_row]->pssTable[ RF_HASH_PSID(_raidPtr,_psid) ].mutex) +/* Simple hash function. */ +#define RF_HASH_PSID(_raid_,_psid_) ((_psid_) % ((_raid_)->pssTableSize)) + +#define RF_LOCK_PSS_MUTEX(_raidPtr,_row,_psid) \ + RF_LOCK_MUTEX((_raidPtr)->reconControl[_row] \ + ->pssTable[RF_HASH_PSID(_raidPtr, _psid)].mutex) +#define RF_UNLOCK_PSS_MUTEX(_raidPtr, _row, _psid) \ + RF_UNLOCK_MUTEX((_raidPtr)->reconControl[_row] \ + ->pssTable[RF_HASH_PSID(_raidPtr, _psid)].mutex) struct RF_ReconParityStripeStatus_s { - RF_StripeNum_t parityStripeID; /* the parity stripe ID */ - RF_ReconUnitNum_t which_ru; /* which reconstruction unit with the - * indicated parity stripe */ - RF_PSSFlags_t flags; /* flags indicating various conditions */ - void *rbuf; /* this is the accumulating xor sum */ - void *writeRbuf; /* DEBUG ONLY: a pointer to the rbuf after it - * has filled & been sent to disk */ - void *rbufsForXor[RF_PS_MAX_BUFS]; /* these are buffers still to + RF_StripeNum_t parityStripeID;/* The parity stripe ID. */ + RF_ReconUnitNum_t which_ru; /* + * Which reconstruction unit + * with the indicated parity + * stripe. + */ + RF_PSSFlags_t flags; /* + * Flags indicating various + * conditions. + */ + void *rbuf; /* + * This is the accumulating + * xor sum. + */ + void *writeRbuf; /* + * DEBUG ONLY: A pointer to + * the rbuf after it has filled + * & been sent to disk. + */ + void *rbufsForXor[RF_PS_MAX_BUFS]; + /* + * These are buffers still to * be xored into the - * accumulating sum */ - int xorBufCount; /* num buffers waiting to be xored */ - int blockCount; /* count of # proc that have blocked recon on - * this parity stripe */ - char *issued; /* issued[i]==1 <=> column i has already - * issued a read request for the indicated RU */ - RF_CallbackDesc_t *procWaitList; /* list of user procs waiting - * for recon to be done */ - RF_CallbackDesc_t *blockWaitList; /* list of disks blocked + * accumulating sum. + */ + int xorBufCount; /* + * Num buffers waiting to be + * xored. + */ + int blockCount; /* + * Count of # proc that have + * blocked recon on this parity + * stripe. + */ + char *issued; /* + * issued[i]==1 <=> column i + * has already issued a read + * request for the indicated + * RU. + */ + RF_CallbackDesc_t *procWaitList; /* + * List of user procs waiting + * for recon to be done. + */ + RF_CallbackDesc_t *blockWaitList; /* + * List of disks blocked * waiting for user write to - * complete */ - RF_CallbackDesc_t *bufWaitList; /* list of disks blocked waiting to - * acquire a buffer for this RU */ + * complete. + */ + RF_CallbackDesc_t *bufWaitList; /* + * List of disks blocked + * waiting to acquire a buffer + * for this RU. + */ RF_ReconParityStripeStatus_t *next; }; struct RF_PSStatusHeader_s { - RF_DECLARE_MUTEX(mutex) /* mutex for this hash chain */ - RF_ReconParityStripeStatus_t *chain; /* the hash chain */ + RF_DECLARE_MUTEX(mutex); /* Mutex for this hash chain. */ + RF_ReconParityStripeStatus_t *chain; /* The hash chain. */ }; -/* masks for the "flags" field above */ -#define RF_PSS_NONE 0x00000000 /* no flags */ -#define RF_PSS_UNDER_RECON 0x00000001 /* this parity stripe is + +/* Masks for the "flags" field above. */ +#define RF_PSS_NONE 0x00000000 /* No flags. */ +#define RF_PSS_UNDER_RECON 0x00000001 /* + * This parity stripe is * currently under - * reconstruction */ -#define RF_PSS_FORCED_ON_WRITE 0x00000002 /* indicates a recon was + * reconstruction. + */ +#define RF_PSS_FORCED_ON_WRITE 0x00000002 /* + * Indicates a recon was * forced due to a user-write - * operation */ -#define RF_PSS_FORCED_ON_READ 0x00000004 /* ditto for read, but not - * currently implemented */ -#define RF_PSS_RECON_BLOCKED 0x00000008 /* reconstruction is currently + * operation. + */ +#define RF_PSS_FORCED_ON_READ 0x00000004 /* + * Ditto for read, but not + * currently implemented. + */ +#define RF_PSS_RECON_BLOCKED 0x00000008 /* + * Reconstruction is currently * blocked due to a pending - * user I/O */ -#define RF_PSS_CREATE 0x00000010 /* tells LookupRUStatus to - * create the entry */ -#define RF_PSS_BUFFERWAIT 0x00000020 /* someone is waiting for a - * buffer for this RU */ - -int -rf_ConfigurePSStatus(RF_ShutdownList_t ** listp, RF_Raid_t * raidPtr, - RF_Config_t * cfgPtr); + * user I/O. + */ +#define RF_PSS_CREATE 0x00000010 /* + * Tells LookupRUStatus to + * create the entry. + */ +#define RF_PSS_BUFFERWAIT 0x00000020 /* + * Someone is waiting for a + * buffer for this RU. + */ -RF_PSStatusHeader_t *rf_MakeParityStripeStatusTable(RF_Raid_t * raidPtr); -void -rf_FreeParityStripeStatusTable(RF_Raid_t * raidPtr, - RF_PSStatusHeader_t * pssTable); -RF_ReconParityStripeStatus_t * -rf_LookupRUStatus(RF_Raid_t * raidPtr, - RF_PSStatusHeader_t * pssTable, RF_StripeNum_t psID, - RF_ReconUnitNum_t which_ru, RF_PSSFlags_t flags, int *created); -void -rf_PSStatusDelete(RF_Raid_t * raidPtr, RF_PSStatusHeader_t * pssTable, - RF_ReconParityStripeStatus_t * pssPtr); -void -rf_RemoveFromActiveReconTable(RF_Raid_t * raidPtr, RF_RowCol_t row, - RF_StripeNum_t psid, RF_ReconUnitNum_t which_ru); -RF_ReconParityStripeStatus_t *rf_AllocPSStatus(RF_Raid_t * raidPtr); -void rf_FreePSStatus(RF_Raid_t * raidPtr, RF_ReconParityStripeStatus_t * p); -void rf_PrintPSStatusTable(RF_Raid_t * raidPtr, RF_RowCol_t row); +int rf_ConfigurePSStatus(RF_ShutdownList_t **, RF_Raid_t *, RF_Config_t *); +RF_PSStatusHeader_t *rf_MakeParityStripeStatusTable(RF_Raid_t *); +void rf_FreeParityStripeStatusTable(RF_Raid_t *, RF_PSStatusHeader_t *); +RF_ReconParityStripeStatus_t *rf_LookupRUStatus(RF_Raid_t *, + RF_PSStatusHeader_t *, RF_StripeNum_t, RF_ReconUnitNum_t, + RF_PSSFlags_t, int *); +void rf_PSStatusDelete(RF_Raid_t *, RF_PSStatusHeader_t *, + RF_ReconParityStripeStatus_t *); +void rf_RemoveFromActiveReconTable(RF_Raid_t *, RF_RowCol_t, + RF_StripeNum_t, RF_ReconUnitNum_t); +RF_ReconParityStripeStatus_t *rf_AllocPSStatus(RF_Raid_t *); +void rf_FreePSStatus(RF_Raid_t *, RF_ReconParityStripeStatus_t *); +void rf_PrintPSStatusTable(RF_Raid_t *, RF_RowCol_t); -#endif /* !_RF__RF_PSSTATUS_H_ */ +#endif /* !_RF__RF_PSSTATUS_H_ */ |