aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch')
-rw-r--r--meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch b/meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch
new file mode 100644
index 0000000000..cde8b87a47
--- /dev/null
+++ b/meta/recipes-bsp/grub/grub-1.99/grub-1.99-lazy_stat.patch
@@ -0,0 +1,64 @@
+Upstream-Status: Backport
+
+Patch is a slightly edited version from debian. Upstream link is:
+http://bzr.savannah.gnu.org/lh/grub/trunk/grub/revision/3318
+
+Description: Don't stat devices unless we have to
+Author: Vladimir Serbinenko <phcoder@gmail.com>
+Author: Colin Watson <cjwatson@ubuntu.com>
+Bug-Debian: http://bugs.debian.org/627587
+Forwarded: yes
+Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3318
+Last-Update: 2011-05-31
+
+Index: b/grub-core/kern/emu/getroot.c
+===================================================================
+--- a/grub-core/kern/emu/getroot.c
++++ b/grub-core/kern/emu/getroot.c
+@@ -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
+- grub_util_error ("cannot stat `%s'", os_dev);
+- free (os_dev);
++ char *tmp = os_dev;
++ os_dev = canonicalize_file_name (os_dev);
++ free (tmp);
+ }
+- else
++
++ if (os_dev)
+ {
+- if (stat (dir, &st) >= 0)
+- dev = st.st_dev;
+- else
+- grub_util_error ("cannot stat `%s'", dir);
++ 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);
++ 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);