]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/disk/raid5_recover.c (grub_raid5_recover): Add missing
authorDoug Nazar <nazard.michi@gmail.com>
Fri, 7 Jan 2011 13:41:44 +0000 (14:41 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 7 Jan 2011 13:41:44 +0000 (14:41 +0100)
array->members[i].start_sector.
* grub-core/disk/raid6_recover.c (grub_raid6_recover): Likewise.

ChangeLog
grub-core/disk/raid5_recover.c
grub-core/disk/raid6_recover.c

index d734d86b6e509fe32fba2a510ac5f79c91ad70a2..c5cc7afa6a03ea61cec47ead0df85238f8b76fc5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-01-07  Doug Nazar  <nazard.michi@gmail.com>
+
+       * grub-core/disk/raid5_recover.c (grub_raid5_recover): Add missing
+       array->members[i].start_sector.
+       * grub-core/disk/raid6_recover.c (grub_raid6_recover): Likewise.
+
 2011-01-07  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/grub-setup.c (setup): Handle NetBSD and OpenBSD disklabels.
index 2cda67533f526ab11c95549201087fc95b90d234..349eb0291d081d4e78914bf7a1c905307242a4d1 100644 (file)
@@ -45,7 +45,9 @@ grub_raid5_recover (struct grub_raid_array *array, int disknr,
       if (i == disknr)
         continue;
 
-      err = grub_disk_read (array->members[i].device, sector, 0, size, buf2);
+      err = grub_disk_read (array->members[i].device,
+                           array->members[i].start_sector + sector,
+                           0, size, buf2);
 
       if (err)
         {
index 01daa2c79dae147a7d8999386188f53ef3706a70..dfaa60ea4d1126b4bfdc83c472c6580f54430209 100644 (file)
@@ -119,7 +119,8 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
       else
         {
           if ((array->members[pos].device) &&
-              (! grub_disk_read (array->members[pos].device, sector,
+              (! grub_disk_read (array->members[pos].device,
+                                array->members[i].start_sector + sector,
                                 0, size, buf)))
             {
               grub_raid_block_xor (pbuf, buf, size);
@@ -150,7 +151,9 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
     {
       /* One bad device */
       if ((array->members[p].device) &&
-          (! grub_disk_read (array->members[p].device, sector, 0, size, buf)))
+          (! grub_disk_read (array->members[p].device,
+                            array->members[i].start_sector + sector,
+                            0, size, buf)))
         {
           grub_raid_block_xor (buf, pbuf, size);
           goto quit;
@@ -163,7 +166,8 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
         }
 
       grub_errno = GRUB_ERR_NONE;
-      if (grub_disk_read (array->members[q].device, sector, 0, size, buf))
+      if (grub_disk_read (array->members[q].device,
+                         array->members[i].start_sector + sector, 0, size, buf))
         goto quit;
 
       grub_raid_block_xor (buf, qbuf, size);
@@ -181,12 +185,16 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
           goto quit;
         }
 
-      if (grub_disk_read (array->members[p].device, sector, 0, size, buf))
+      if (grub_disk_read (array->members[p].device,
+                         array->members[i].start_sector + sector,
+                         0, size, buf))
         goto quit;
 
       grub_raid_block_xor (pbuf, buf, size);
 
-      if (grub_disk_read (array->members[q].device, sector, 0, size, buf))
+      if (grub_disk_read (array->members[q].device,
+                         array->members[i].start_sector + sector,
+                         0, size, buf))
         goto quit;
 
       grub_raid_block_xor (qbuf, buf, size);