* disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Add start_sector

parameter.  Set its pointer target to 0.
* disk/mdraid_linux.c (grub_mdraid_detect): Add start_sector
parameter.  Set its pointer target to 0 for 0.9 metadata, or to the
`data_offset' value from the superblock for 1.x metadata.
* disk/raid.c (grub_raid_read): Offset reads by the start sector of
data on the device.
(insert_array): Record the start sector of data on the device.
(grub_raid_register): Pass start_sector parameters to
grub_raid_list->detect and insert_array.
* include/grub/raid.h (struct grub_raid_array): Add start_sector
member.
(struct grub_raid): Add start_sector parameter to `detect'.
This commit is contained in:
Colin Watson 2010-07-18 18:31:10 +01:00
parent 139ab97dc3
commit 1c785436da
5 changed files with 40 additions and 8 deletions

View file

@ -229,7 +229,8 @@ struct grub_raid_super_1x
#define WriteMostly1 1 /* Mask for writemostly flag in above devflags. */
static grub_err_t
grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array)
grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array,
grub_disk_addr_t *start_sector)
{
grub_disk_addr_t sector;
grub_uint64_t size, sb_size;
@ -328,6 +329,8 @@ superblock_0_90:
uuid[2] = sb.set_uuid2;
uuid[3] = sb.set_uuid3;
*start_sector = 0;
return 0;
superblock_1_x:
@ -387,6 +390,8 @@ superblock_0_90:
grub_memcpy (array->uuid, sb_1x->set_uuid, 16);
*start_sector = sb_1x->data_offset;
grub_free (sb_1x);
return 0;
}