The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/raidframe/rf_raid0.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: rf_raid0.c,v 1.10.2.1 2004/08/30 08:44:25 tron Exp $   */
    2 /*
    3  * Copyright (c) 1995 Carnegie-Mellon University.
    4  * All rights reserved.
    5  *
    6  * Author: Mark Holland
    7  *
    8  * Permission to use, copy, modify and distribute this software and
    9  * its documentation is hereby granted, provided that both the copyright
   10  * notice and this permission notice appear in all copies of the
   11  * software, derivative works or modified versions, and any portions
   12  * thereof, and that both notices appear in supporting documentation.
   13  *
   14  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
   15  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
   16  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   17  *
   18  * Carnegie Mellon requests users of this software to return to
   19  *
   20  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
   21  *  School of Computer Science
   22  *  Carnegie Mellon University
   23  *  Pittsburgh PA 15213-3890
   24  *
   25  * any improvements or extensions that they make and grant Carnegie the
   26  * rights to redistribute these changes.
   27  */
   28 
   29 /***************************************
   30  *
   31  * rf_raid0.c -- implements RAID Level 0
   32  *
   33  ***************************************/
   34 
   35 #include <sys/cdefs.h>
   36 __KERNEL_RCSID(0, "$NetBSD: rf_raid0.c,v 1.10.2.1 2004/08/30 08:44:25 tron Exp $");
   37 
   38 #include <dev/raidframe/raidframevar.h>
   39 
   40 #include "rf_raid.h"
   41 #include "rf_raid0.h"
   42 #include "rf_dag.h"
   43 #include "rf_dagffrd.h"
   44 #include "rf_dagffwr.h"
   45 #include "rf_dagutils.h"
   46 #include "rf_dagfuncs.h"
   47 #include "rf_general.h"
   48 #include "rf_parityscan.h"
   49 
   50 typedef struct RF_Raid0ConfigInfo_s {
   51         RF_RowCol_t *stripeIdentifier;
   52 }       RF_Raid0ConfigInfo_t;
   53 
   54 int 
   55 rf_ConfigureRAID0(RF_ShutdownList_t **listp, RF_Raid_t *raidPtr,
   56                   RF_Config_t *cfgPtr)
   57 {
   58         RF_RaidLayout_t *layoutPtr = &raidPtr->Layout;
   59         RF_Raid0ConfigInfo_t *info;
   60         RF_RowCol_t i;
   61 
   62         /* create a RAID level 0 configuration structure */
   63         RF_MallocAndAdd(info, sizeof(RF_Raid0ConfigInfo_t), (RF_Raid0ConfigInfo_t *), raidPtr->cleanupList);
   64         if (info == NULL)
   65                 return (ENOMEM);
   66         layoutPtr->layoutSpecificInfo = (void *) info;
   67 
   68         RF_MallocAndAdd(info->stripeIdentifier, raidPtr->numCol * sizeof(RF_RowCol_t), (RF_RowCol_t *), raidPtr->cleanupList);
   69         if (info->stripeIdentifier == NULL)
   70                 return (ENOMEM);
   71         for (i = 0; i < raidPtr->numCol; i++)
   72                 info->stripeIdentifier[i] = i;
   73 
   74         raidPtr->totalSectors = layoutPtr->stripeUnitsPerDisk * raidPtr->numCol * layoutPtr->sectorsPerStripeUnit;
   75         layoutPtr->numStripe = layoutPtr->stripeUnitsPerDisk;
   76         layoutPtr->dataSectorsPerStripe = raidPtr->numCol * layoutPtr->sectorsPerStripeUnit;
   77         layoutPtr->numDataCol = raidPtr->numCol;
   78         layoutPtr->numParityCol = 0;
   79         return (0);
   80 }
   81 
   82 void 
   83 rf_MapSectorRAID0(RF_Raid_t *raidPtr, RF_RaidAddr_t raidSector,
   84                   RF_RowCol_t *col, RF_SectorNum_t *diskSector, int remap)
   85 {
   86         RF_StripeNum_t SUID = raidSector / raidPtr->Layout.sectorsPerStripeUnit;
   87         *col = SUID % raidPtr->numCol;
   88         *diskSector = (SUID / raidPtr->numCol) * raidPtr->Layout.sectorsPerStripeUnit +
   89             (raidSector % raidPtr->Layout.sectorsPerStripeUnit);
   90 }
   91 
   92 void 
   93 rf_MapParityRAID0(RF_Raid_t *raidPtr, RF_RaidAddr_t raidSector,
   94                   RF_RowCol_t *col, RF_SectorNum_t *diskSector, int remap)
   95 {
   96         *col = 0;
   97         *diskSector = 0;
   98 }
   99 
  100 void 
  101 rf_IdentifyStripeRAID0(RF_Raid_t *raidPtr, RF_RaidAddr_t addr,
  102                        RF_RowCol_t **diskids)
  103 {
  104         RF_Raid0ConfigInfo_t *info;
  105 
  106         info = raidPtr->Layout.layoutSpecificInfo;
  107         *diskids = info->stripeIdentifier;
  108 }
  109 
  110 void 
  111 rf_MapSIDToPSIDRAID0(RF_RaidLayout_t *layoutPtr, RF_StripeNum_t stripeID,
  112                      RF_StripeNum_t *psID, RF_ReconUnitNum_t *which_ru)
  113 {
  114         *which_ru = 0;
  115         *psID = stripeID;
  116 }
  117 
  118 void 
  119 rf_RAID0DagSelect(
  120     RF_Raid_t * raidPtr,
  121     RF_IoType_t type,
  122     RF_AccessStripeMap_t * asmap,
  123     RF_VoidFuncPtr * createFunc)
  124 {
  125         if (raidPtr->numFailures > 0) {
  126                 *createFunc = NULL;
  127                 return;
  128         }
  129         *createFunc = ((type == RF_IO_TYPE_READ) ?
  130             (RF_VoidFuncPtr) rf_CreateFaultFreeReadDAG : (RF_VoidFuncPtr) rf_CreateRAID0WriteDAG);
  131 }
  132 
  133 int 
  134 rf_VerifyParityRAID0(RF_Raid_t *raidPtr, RF_RaidAddr_t raidAddr,
  135                      RF_PhysDiskAddr_t *parityPDA, int correct_it,
  136                      RF_RaidAccessFlags_t flags)
  137 {
  138         /*
  139          * No parity is always okay.
  140          */
  141         return (RF_PARITY_OKAY);
  142 }

Cache object: d00941f68b0cf889acbf4e047b86fb71


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.