[BACK]Return to rf_desc.h CVS log [TXT][DIR] Up to [local] / sys / dev / raidframe

Annotation of sys/dev/raidframe/rf_desc.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: rf_desc.h,v 1.6 2002/12/16 07:01:03 tdeval Exp $      */
        !             2: /*     $NetBSD: rf_desc.h,v 1.5 2000/01/09 00:00:18 oster Exp $        */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1995 Carnegie-Mellon University.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Author: Mark Holland
        !             9:  *
        !            10:  * Permission to use, copy, modify and distribute this software and
        !            11:  * its documentation is hereby granted, provided that both the copyright
        !            12:  * notice and this permission notice appear in all copies of the
        !            13:  * software, derivative works or modified versions, and any portions
        !            14:  * thereof, and that both notices appear in supporting documentation.
        !            15:  *
        !            16:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            17:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
        !            18:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            19:  *
        !            20:  * Carnegie Mellon requests users of this software to return to
        !            21:  *
        !            22:  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
        !            23:  *  School of Computer Science
        !            24:  *  Carnegie Mellon University
        !            25:  *  Pittsburgh PA 15213-3890
        !            26:  *
        !            27:  * any improvements or extensions that they make and grant Carnegie the
        !            28:  * rights to redistribute these changes.
        !            29:  */
        !            30:
        !            31: #ifndef        _RF__RF_DESC_H_
        !            32: #define        _RF__RF_DESC_H_
        !            33:
        !            34: #include "rf_archs.h"
        !            35: #include "rf_types.h"
        !            36: #include "rf_etimer.h"
        !            37: #include "rf_dag.h"
        !            38:
        !            39: struct RF_RaidReconDesc_s {
        !            40:        RF_Raid_t       *raidPtr;       /* Raid device descriptor. */
        !            41:        RF_RowCol_t      row;           /* Row of failed disk. */
        !            42:        RF_RowCol_t      col;           /* Col of failed disk. */
        !            43:        int              state;         /*
        !            44:                                         * How far along the reconstruction
        !            45:                                         * operation has gotten.
        !            46:                                         */
        !            47:        RF_RaidDisk_t   *spareDiskPtr;  /*
        !            48:                                         * Describes target disk for recon.
        !            49:                                         * (not used in dist sparing)
        !            50:                                         */
        !            51:        int              numDisksDone;  /*
        !            52:                                         * The number of surviving disks that
        !            53:                                         * have completed their work.
        !            54:                                         */
        !            55:        RF_RowCol_t      srow;          /*
        !            56:                                         * Row ID of the spare disk.
        !            57:                                         * (not used in dist sparing)
        !            58:                                         */
        !            59:        RF_RowCol_t      scol;          /*
        !            60:                                         * Col ID of the spare disk.
        !            61:                                         * (not used in dist sparing)
        !            62:                                         */
        !            63:        /*
        !            64:          * Prevent recon from hogging CPU
        !            65:          */
        !            66:        RF_Etimer_t      recon_exec_timer;
        !            67:        RF_uint64        reconExecTimerRunning;
        !            68:        RF_uint64        reconExecTicks;
        !            69:        RF_uint64        maxReconExecTicks;
        !            70:
        !            71: #if    RF_RECON_STATS > 0
        !            72:        RF_uint64        hsStallCount;  /* Head sep stall count. */
        !            73:        RF_uint64        numReconExecDelays;
        !            74:        RF_uint64        numReconEventWaits;
        !            75: #endif /* RF_RECON_STATS > 0 */
        !            76:        RF_RaidReconDesc_t *next;
        !            77: };
        !            78:
        !            79: struct RF_RaidAccessDesc_s {
        !            80:        RF_Raid_t        *raidPtr;      /* Raid device descriptor. */
        !            81:        RF_IoType_t       type;         /* Read or write. */
        !            82:        RF_RaidAddr_t     raidAddress;  /*
        !            83:                                         * Starting address in raid address
        !            84:                                         * space.
        !            85:                                         */
        !            86:        RF_SectorCount_t  numBlocks;    /*
        !            87:                                         * Number of blocks (sectors)
        !            88:                                         * to transfer.
        !            89:                                         */
        !            90:        RF_StripeCount_t  numStripes;   /*
        !            91:                                         * Number of stripes involved in
        !            92:                                         * access.
        !            93:                                         */
        !            94:        caddr_t           bufPtr;       /* Pointer to data buffer. */
        !            95:        RF_RaidAccessFlags_t flags;     /* Flags controlling operation. */
        !            96:        int               state;        /*
        !            97:                                         * Index into states telling how far
        !            98:                                         * along the RAID operation has gotten.
        !            99:                                         */
        !           100:        RF_AccessState_t *states;       /* Array of states to be run. */
        !           101:        int               status;       /*
        !           102:                                         * Pass/fail status of the last
        !           103:                                         * operation.
        !           104:                                         */
        !           105:        RF_DagList_t     *dagArray;     /*
        !           106:                                         * Array of DAG lists, one list
        !           107:                                         * per stripe.
        !           108:                                         */
        !           109:        RF_AccessStripeMapHeader_t *asmap; /* The asm for this I/O. */
        !           110:        void             *bp;           /*
        !           111:                                         * Buffer pointer for this RAID acc.
        !           112:                                         * Ignored outside the kernel.
        !           113:                                         */
        !           114:        RF_DagHeader_t  **paramDAG;     /*
        !           115:                                         * Allows the DAG to be returned to
        !           116:                                         * the caller after I/O completion.
        !           117:                                         */
        !           118:        RF_AccessStripeMapHeader_t **paramASM;  /*
        !           119:                                                 * Allows the ASM to be
        !           120:                                                 * returned to the caller
        !           121:                                                 * after I/O completion.
        !           122:                                                 */
        !           123:        RF_AccTraceEntry_t tracerec;    /*
        !           124:                                         * Perf monitoring information for a
        !           125:                                         * user access (not for dag stats).
        !           126:                                         */
        !           127:        void            (*callbackFunc) (RF_CBParam_t);
        !           128:                                        /* Callback function for this I/O. */
        !           129:        void             *callbackArg;  /* Arg to give to callback func. */
        !           130:
        !           131:        RF_AllocListElem_t *cleanupList; /*
        !           132:                                          * Memory to be freed at the
        !           133:                                          * end of the access.
        !           134:                                          */
        !           135:
        !           136:        RF_RaidAccessDesc_t *next;
        !           137:        RF_RaidAccessDesc_t *head;
        !           138:
        !           139:        int               numPending;
        !           140:
        !           141:        RF_DECLARE_MUTEX( mutex );      /*
        !           142:                                         * These are used to implement
        !           143:                                         * blocking I/O.
        !           144:                                         */
        !           145:        RF_DECLARE_COND(  cond );
        !           146:        int               async_flag;
        !           147:
        !           148:        RF_Etimer_t       timer;        /* Used for timing this access. */
        !           149: };
        !           150:
        !           151: #endif /* ! _RF__RF_DESC_H_ */

CVSweb