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
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel