blob: ca8a0239003bf09720698c2e92f877e6b9077fd8 [file] [log] [blame]
--- grub-core/kern/emu/getroot.c 2011-05-18 07:35:47 +0000
+++ grub-core/kern/emu/getroot.c 2011-05-21 05:03:55 +0000
@@ -358,7 +358,7 @@
if (S_ISLNK (st.st_mode)) {
#ifdef __linux__
- if (strcmp (dir, "mapper") == 0) {
+ if (strcmp (dir, "mapper") == 0 || strcmp (dir, "/dev/mapper") == 0) {
/* Follow symbolic links under /dev/mapper/; the canonical name
may be something like /dev/dm-0, but the names under
/dev/mapper/ are more human-readable and so we prefer them if
@@ -609,20 +609,27 @@
if (os_dev)
{
- if (stat (os_dev, &st) >= 0)
- dev = st.st_rdev;
- else
+ char *tmp = os_dev;
+ os_dev = canonicalize_file_name (os_dev);
+ free (tmp);
+ }
+
+ if (os_dev)
+ {
+ if (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) != 0)
+ return os_dev;
+ if (stat (os_dev, &st) < 0)
grub_util_error ("cannot stat `%s'", os_dev);
free (os_dev);
- }
- else
- {
- if (stat (dir, &st) >= 0)
- dev = st.st_dev;
- else
- grub_util_error ("cannot stat `%s'", dir);
- }
-
+ dev = st.st_rdev;
+ return grub_find_device ("/dev/mapper", dev);
+ }
+
+ if (stat (dir, &st) < 0)
+ grub_util_error ("cannot stat `%s'", dir);
+
+ dev = st.st_dev;
+
#ifdef __CYGWIN__
/* Cygwin specific function. */
os_dev = grub_find_device (dir, dev);
--- grub-core/kern/emu/hostdisk.c 2011-05-18 07:35:47 +0000
+++ grub-core/kern/emu/hostdisk.c 2011-05-21 05:03:55 +0000
@@ -1408,7 +1408,8 @@
if (tree)
dm_tree_free (tree);
free (path);
- char *ret = grub_find_device (NULL, (major << 8) | minor);
+ char *ret = grub_find_device ("/dev/mapper",
+ (major << 8) | minor);
return ret;
}