mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-20 22:48:22 +00:00
* 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.
This commit is contained in:
1 parent
014b68068d
commit
0ca09e6c52
3 files changed
+22
-6
No files matched your search
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user