+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.
#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);
}
#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;