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.
This commit is contained in:
Colin Watson 2010-09-17 11:00:37 +01:00
parent 0f7ee3c969
commit a939d135ec
2 changed files with 24 additions and 8 deletions

View file

@ -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.

View 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;