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

