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

Reply via email to