[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v3] disk/mdraid1x: Fix >2TB RAID detection with BIOS

From: Robert LeBlanc
Subject: [PATCH v3] disk/mdraid1x: Fix >2TB RAID detection with BIOS
Date: Wed, 25 Jan 2017 15:02:46 -0700

Changes in v3:
  - Fix to return if not out of range instead of breaking out of the

Changes in v2:
  - Only continue checking for other metadata versions if we get an out
    of range error and reset grub_errno if we continue.

When a mdadm RAID array is on a drive larger than 2TB, the array is not
able to be detected and as such even if the array has a partition that
holds /boot under the 2TB limit, it is unable to boot the machine. This
is caused by metadata 1.0 being tested first which allocates the
superblock at the end of the device. When it tries to access the end of
the device it throws an error and the code returns without trying to
find the superblock at other locations (metadata 1.1 and 1.2). This
patch changes the error to not be fatal and allow for the checking for
the other metadata versions and allowing the machine to boot as long as
/boot is under the 2TB BIOS limit. This won't cause issues with 1.0
metadata because GRUB is able to read the partitions from the front of
the drive/partition without having to determine the data offset, since
the data for metadata 1.0 starts at sector 0.

Signed-off-by: Robert LeBlanc <address@hidden>
 grub-core/disk/mdraid1x_linux.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c
index 7cc80d3df..f0aeb6829 100644
--- a/grub-core/disk/mdraid1x_linux.c
+++ b/grub-core/disk/mdraid1x_linux.c
@@ -148,7 +148,17 @@ grub_mdraid_detect (grub_disk_t disk,
       if (grub_disk_read (disk, sector, 0, sizeof (struct grub_raid_super_1x),
-       return NULL;
+       {
+         if (grub_errno == GRUB_ERR_OUT_OF_RANGE)
+           {
+             grub_errno = GRUB_ERR_NONE;
+             continue;
+           }
+          else
+           {
+             return NULL;
+           }
+       }
       if (sb.magic != grub_cpu_to_le32_compile_time (SB_MAGIC)
          || grub_le_to_cpu64 (sb.super_offset) != sector)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]