178
179
return grub_errno;
180
181
/* Look whether there is a mdraid 0.90 superblock. */
181
if (sb.md_magic != SB_MAGIC)
182
if (grub_le_to_cpu32 (sb.md_magic) != SB_MAGIC)
182
183
return grub_error (GRUB_ERR_OUT_OF_RANGE, "not 0.9x raid");
184
if (sb.major_version != 0 || sb.minor_version != 90)
185
if (grub_le_to_cpu32 (sb.major_version) != 0
186
|| grub_le_to_cpu32 (sb.minor_version) != 90)
185
187
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
186
188
"unsupported RAID version: %d.%d",
187
sb.major_version, sb.minor_version);
189
grub_le_to_cpu32 (sb.major_version),
190
grub_le_to_cpu32 (sb.minor_version));
189
192
/* FIXME: Check the checksum. */
194
level = grub_le_to_cpu32 (sb.level);
192
if ((int) sb.level == -4)
196
if ((int) level == -4)
195
if (sb.level != 0 && sb.level != 1 && sb.level != 4 &&
196
sb.level != 5 && sb.level != 6 && sb.level != 10)
199
if (level != 0 && level != 1 && level != 4 &&
200
level != 5 && level != 6 && level != 10)
197
201
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
198
"unsupported RAID level: %d", sb.level);
199
if (sb.this_disk.number == 0xffff || sb.this_disk.number == 0xfffe)
202
"unsupported RAID level: %d", level);
203
if (grub_le_to_cpu32 (sb.this_disk.number) == 0xffff
204
|| grub_le_to_cpu32 (sb.this_disk.number) == 0xfffe)
200
205
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
201
206
"spares aren't implemented");
203
208
array->name = NULL;
204
array->number = sb.md_minor;
205
array->level = sb.level;
206
array->layout = sb.layout;
207
array->total_devs = sb.raid_disks;
208
array->disk_size = (sb.size) ? sb.size * 2 : sector;
209
array->chunk_size = sb.chunk_size >> 9;
210
array->index = sb.this_disk.number;
209
array->number = grub_le_to_cpu32 (sb.md_minor);
210
array->level = level;
211
array->layout = grub_le_to_cpu32 (sb.layout);
212
array->total_devs = grub_le_to_cpu32 (sb.raid_disks);
213
array->disk_size = (sb.size) ? grub_le_to_cpu32 (sb.size) * 2 : sector;
214
array->chunk_size = grub_le_to_cpu32 (sb.chunk_size) >> 9;
215
array->index = grub_le_to_cpu32 (sb.this_disk.number);
211
216
array->uuid_len = 16;
212
217
array->uuid = grub_malloc (16);
213
218
if (!array->uuid)