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