~ubuntu-branches/ubuntu/wily/grub2/wily

« back to all changes in this revision

Viewing changes to grub-core/disk/mdraid_linux.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2011-01-11 17:11:44 UTC
  • mto: (17.3.26 experimental)
  • mto: This revision was merged to the branch mainline in revision 60.
  • Revision ID: james.westby@ubuntu.com-20110111171144-o2h6luxzei5fivmf
Tags: upstream-1.99~20110111
ImportĀ upstreamĀ versionĀ 1.99~20110111

Show diffs side-by-side

added added

removed removed

Lines of Context:
167
167
  grub_uint64_t size;
168
168
  struct grub_raid_super_09 sb;
169
169
  grub_uint32_t *uuid;
 
170
  grub_uint32_t level;
170
171
 
171
172
  /* The sector where the mdraid 0.90 superblock is stored, if available.  */
172
173
  size = grub_disk_get_size (disk);
178
179
    return grub_errno;
179
180
 
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");
183
184
 
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));
188
191
 
189
192
  /* FIXME: Check the checksum.  */
190
193
 
 
194
  level = grub_le_to_cpu32 (sb.level);
191
195
  /* Multipath.  */
192
 
  if ((int) sb.level == -4)
193
 
    sb.level = 1;
 
196
  if ((int) level == -4)
 
197
    level = 1;
194
198
 
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");
202
207
 
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)