static grub_err_t grub_raid_read (grub_disk_t disk, grub_disk_addr_t sector, grub_size_t size, char *buf)
case 0: case 1: case 10: { read_sector = grub_divmod64 (sector, array->chunk_size, &b); Bean, this is a bit wrong because array->chunk_size is 0 in the RAID 1 case and sector is 0 too in the case I got with gdb. The easiest fix would be probable to just set chunk_size to for example 64. Attached patch does it, but maybe you have a better/other idea? -- Felix Zielcke
2008-09-04 Felix Zielcke <[EMAIL PROTECTED]> * disk/mdraid_linux.c (grub_mdraid_detect): Set `array->chunk_size' to 64 for RAID level 1. * disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Likewise. Index: disk/mdraid_linux.c =================================================================== --- disk/mdraid_linux.c (Revision 1849) +++ disk/mdraid_linux.c (Arbeitskopie) @@ -200,7 +200,7 @@ grub_mdraid_detect (grub_disk_t disk, st array->layout = sb.layout; array->total_devs = sb.raid_disks; array->disk_size = (sb.size) ? sb.size * 2 : sector; - array->chunk_size = sb.chunk_size >> 9; + array->chunk_size = (sb.level == 1) ? 64 : sb.chunk_size >> 9; array->index = sb.this_disk.number; array->uuid_len = 16; array->uuid = grub_malloc (16); Index: disk/dmraid_nvidia.c =================================================================== --- disk/dmraid_nvidia.c (Revision 1849) +++ disk/dmraid_nvidia.c (Arbeitskopie) @@ -135,7 +135,7 @@ grub_dmraid_nv_detect (grub_disk_t disk, array->number = 0; array->total_devs = sb.array.total_volumes; - array->chunk_size = sb.array.stripe_block_size; + array->chunk_size = (array->level == 1) ? 64 : sb.array.stripe_block_size; array->index = sb.unit_number; array->uuid_len = sizeof (sb.array.signature); array->uuid = grub_malloc (sizeof (sb.array.signature));
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel