]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix DM-RAID probing with recent versions of device-mapper udev
authorColin Watson <cjwatson@ubuntu.com>
Fri, 17 Sep 2010 10:00:37 +0000 (11:00 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Fri, 17 Sep 2010 10:00:37 +0000 (11:00 +0100)
rules.
* grub-core/kern/emu/hostdisk.c (read_device_map): Don't
canonicalise device paths under /dev/mapper/.
(convert_system_partition_to_system_disk): Compare the
uncanonicalised path to /dev/mapper/ rather than the canonicalised
path, since device nodes under /dev/mapper/ are often symlinks.

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

index 885ae3be8b463f27ff3291823b71088c93b244f5..7f5ba2d44d1db76a4aa6c9770a62af0e98254547 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-09-17  Colin Watson  <cjwatson@ubuntu.com>
+
+       Fix DM-RAID probing with recent versions of device-mapper udev
+       rules.
+
+       * grub-core/kern/emu/hostdisk.c (read_device_map): Don't
+       canonicalise device paths under /dev/mapper/.
+       (convert_system_partition_to_system_disk): Compare the
+       uncanonicalised path to /dev/mapper/ rather than the canonicalised
+       path, since device nodes under /dev/mapper/ are often symlinks.
+
 2010-09-17  Yves Blusseau  <blusseau@zetam.org>
 
        * .bzrignore: *.d removed (old rule), add *.image and symlist.h.
index edf8dc219658c40134fa2a5773dc241eedc21dbf..69c5ed921c295c87f5a99011c7ef52cc473abd94 100644 (file)
@@ -955,13 +955,16 @@ read_device_map (const char *dev_map)
 #ifdef __linux__
       /* On Linux, the devfs uses symbolic links horribly, and that
         confuses the interface very much, so use realpath to expand
-        symbolic links.  */
-      map[drive].device = xmalloc (PATH_MAX);
-      if (! realpath (p, map[drive].device))
-       grub_util_error ("cannot get the real path of `%s'", p);
-#else
-      map[drive].device = xstrdup (p);
+        symbolic links.  Leave /dev/mapper/ alone, though.  */
+      if (strncmp (p, "/dev/mapper/", 12) != 0)
+       {
+         map[drive].device = xmalloc (PATH_MAX);
+         if (! realpath (p, map[drive].device))
+           grub_util_error ("cannot get the real path of `%s'", p);
+       }
+      else
 #endif
+      map[drive].device = xstrdup (p);
     }
 
   fclose (fp);
@@ -1153,8 +1156,10 @@ convert_system_partition_to_system_disk (const char *os_dev, struct stat *st)
        }
 
 #ifdef HAVE_DEVICE_MAPPER
-      /* If this is a DM-RAID device.  */
-      if ((strncmp ("mapper/", p, 7) == 0))
+      /* If this is a DM-RAID device.
+         Compare os_dev rather than path here, since nodes under
+         /dev/mapper/ are often symlinks.  */
+      if ((strncmp ("/dev/mapper/", os_dev, 12) == 0))
        {
          static struct dm_tree *tree = NULL;
          uint32_t maj, min;