1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #ifndef _RF__RF_DECLUSTER_H_
41 #define _RF__RF_DECLUSTER_H_
42
43 #include "rf_types.h"
44
45
46
47
48
49
50 struct RF_SpareTableEntry_s {
51 u_int spareDisk;
52 u_int spareBlockOffsetInSUs;
53
54
55
56 };
57
58 #define RF_SPAREMAP_NAME_LEN 128
59
60
61
62
63 struct RF_DeclusteredConfigInfo_s {
64
65 RF_StripeCount_t groupSize;
66
67 RF_RowCol_t **LayoutTable;
68 RF_RowCol_t **OffsetTable;
69
70 RF_RowCol_t **BlockTable;
71
72 RF_StripeCount_t SUsPerFullTable;
73
74 RF_StripeCount_t SUsPerTable;
75
76 RF_StripeCount_t PUsPerBlock;
77
78 RF_StripeCount_t SUsPerBlock;
79
80 RF_StripeCount_t BlocksPerTable;
81
82 RF_StripeCount_t NumParityReps;
83
84 RF_StripeCount_t TableDepthInPUs;
85
86 RF_StripeCount_t FullTableDepthInPUs;
87
88 RF_StripeCount_t FullTableLimitSUID;
89
90 RF_StripeCount_t ExtraTablesPerDisk;
91
92 RF_SectorNum_t DiskOffsetOfLastFullTableInSUs;
93
94 RF_StripeCount_t numCompleteFullTablesPerDisk;
95
96 u_int Lambda;
97
98
99
100 RF_StripeCount_t FullTablesPerSpareRegion;
101
102 RF_StripeCount_t TablesPerSpareRegion;
103
104 RF_SectorCount_t SpareSpaceDepthPerRegionInSUs;
105
106 RF_SectorCount_t SpareRegionDepthInSUs;
107
108 RF_SectorNum_t DiskOffsetOfLastSpareSpaceChunkInSUs;
109
110 RF_StripeCount_t TotSparePUsPerDisk;
111
112 RF_StripeCount_t NumCompleteSRs;
113 RF_SpareTableEntry_t **SpareTable;
114
115 char sparemap_fname[RF_SPAREMAP_NAME_LEN];
116
117 };
118
119 int rf_ConfigureDeclustered(RF_ShutdownList_t **, RF_Raid_t *, RF_Config_t *);
120 int rf_ConfigureDeclusteredDS(RF_ShutdownList_t **, RF_Raid_t *,
121 RF_Config_t *);
122
123 void rf_MapSectorDeclustered(RF_Raid_t *, RF_RaidAddr_t, RF_RowCol_t *,
124 RF_RowCol_t *, RF_SectorNum_t *, int);
125 void rf_MapParityDeclustered(RF_Raid_t *, RF_RaidAddr_t, RF_RowCol_t *,
126 RF_RowCol_t *, RF_SectorNum_t *, int);
127 void rf_IdentifyStripeDeclustered(RF_Raid_t *, RF_RaidAddr_t, RF_RowCol_t **,
128 RF_RowCol_t *);
129 void rf_MapSIDToPSIDDeclustered(RF_RaidLayout_t *, RF_StripeNum_t,
130 RF_StripeNum_t *, RF_ReconUnitNum_t *);
131 int rf_InstallSpareTable(RF_Raid_t *, RF_RowCol_t, RF_RowCol_t);
132 void rf_FreeSpareTable(RF_Raid_t *);
133
134 RF_HeadSepLimit_t rf_GetDefaultHeadSepLimitDeclustered(RF_Raid_t *);
135 int rf_GetDefaultNumFloatingReconBuffersDeclustered(RF_Raid_t *);
136
137 void rf_decluster_adjust_params(RF_RaidLayout_t *, RF_StripeNum_t *,
138 RF_StripeCount_t *, RF_StripeCount_t *, RF_StripeNum_t *);
139 void rf_remap_to_spare_space(RF_RaidLayout_t *, RF_DeclusteredConfigInfo_t *,
140 RF_RowCol_t, RF_StripeNum_t, RF_StripeNum_t, RF_SectorNum_t,
141 RF_StripeNum_t, RF_StripeNum_t, RF_RowCol_t *, RF_StripeNum_t *);
142 int rf_SetSpareTable(RF_Raid_t *, void *);
143 RF_ReconUnitCount_t rf_GetNumSpareRUsDeclustered(RF_Raid_t *);
144
145 #endif