]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/emu/getroot.c (grub_util_get_grub_dev) [__linux__]:
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 30 Mar 2011 14:37:10 +0000 (16:37 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 30 Mar 2011 14:37:10 +0000 (16:37 +0200)
Preserve partition number in mdadm code path.

ChangeLog
grub-core/kern/emu/getroot.c

index b93141df69a5d63975965cd8e31d16c4fb7588bd..0afcadf681c5c535338f22f478b586e7bfc7a04b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-30  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/emu/getroot.c (grub_util_get_grub_dev) [__linux__]:
+       Preserve partition number in mdadm code path.
+
 2011-03-30  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): Add
index 1d87442d9e25d41f437e7a6b613f1467bc9225b3..ae066d2f8356e93feb74ec3888d3f8c5d8a0392c 100644 (file)
@@ -808,12 +808,30 @@ grub_util_get_grub_dev (const char *os_dev)
        if (mdadm_name)
          {
            char *newname;
+           char *q;
+
+           for (q = os_dev + strlen (os_dev) - 1; q >= os_dev && isdigit (*q);
+                q--);
+
+           if (q >= os_dev && *q == 'p')
+             {
+               newname = xasprintf ("/dev/md/%sp%s", mdadm_name, q + 1);
+               if (stat (newname, &st) == 0)
+                 {
+                   free (grub_dev);
+                   grub_dev = xasprintf ("md/%s,%s", mdadm_name, q + 1);
+                   goto done;
+                 }
+               free (newname);
+             }
            newname = xasprintf ("/dev/md/%s", mdadm_name);
            if (stat (newname, &st) == 0)
              {
                free (grub_dev);
                grub_dev = xasprintf ("md/%s", mdadm_name);
              }
+
+         done:
            free (newname);
            free (mdadm_name);
          }