MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / DiskLayout

Method DiskLayout

lib/data/layout.cc:167–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165}
166
167DiskLayout::DiskLayout(const ConfigProto& config)
168{
169 minPhysicalCylinder = minPhysicalHead = UINT_MAX;
170 maxPhysicalCylinder = maxPhysicalHead = 0;
171
172 numLogicalCylinders = config.layout().tracks();
173 numLogicalHeads = config.layout().sides();
174
175 groupSize = getTrackStep(config);
176 headBias = config.drive().head_bias();
177 swapSides = config.layout().swap_sides();
178
179 switch (config.drive().drive_type())
180 {
181 case DRIVETYPE_APPLE2:
182 headWidth = 4;
183 break;
184
185 default:
186 headWidth = 1;
187 break;
188 }
189
190 for (unsigned logicalCylinder = 0; logicalCylinder < numLogicalCylinders;
191 logicalCylinder++)
192 for (unsigned logicalHead = 0; logicalHead < numLogicalHeads;
193 logicalHead++)
194 {
195 auto ltl = std::make_shared<LogicalTrackLayout>();
196 CylinderHead ch(logicalCylinder, logicalHead);
197 layoutByLogicalLocation[ch] = ltl;
198 logicalLocations.push_back(ch);
199
200 ltl->logicalCylinder = logicalCylinder;
201 ltl->logicalHead = logicalHead;
202 ltl->groupSize = groupSize;
203 ltl->physicalCylinder =
204 remapCylinderLogicalToPhysical(logicalCylinder);
205 ltl->physicalHead = remapHeadLogicalToPhysical(logicalHead);
206
207 minPhysicalCylinder =
208 std::min(minPhysicalCylinder, ltl->physicalCylinder);
209 maxPhysicalCylinder = std::max(maxPhysicalCylinder,
210 ltl->physicalCylinder + ltl->groupSize - 1);
211 minPhysicalHead = std::min(minPhysicalHead, ltl->physicalHead);
212 maxPhysicalHead = std::max(maxPhysicalHead, ltl->physicalHead);
213
214 auto layoutdata =
215 getLayoutData(logicalCylinder, logicalHead, config);
216 ltl->sectorSize = layoutdata.sector_size();
217 ltl->diskSectorOrder = expandSectorList(layoutdata.physical());
218 ltl->naturalSectorOrder = ltl->diskSectorOrder;
219 std::sort(
220 ltl->naturalSectorOrder.begin(), ltl->naturalSectorOrder.end());
221 ltl->numSectors = ltl->naturalSectorOrder.size();
222
223 if (layoutdata.has_filesystem())
224 {

Callers

nothing calls this directly

Calls 10

getTrackStepFunction · 0.85
getLayoutDataFunction · 0.85
expandSectorListFunction · 0.85
errorFunction · 0.85
getTrackOrderingFunction · 0.85
createTestConfigFunction · 0.85
push_backMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected