diff options
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.patch | 64 |
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 @@ | |||
| 1 | Upstream-Status: Backport | ||
| 2 | |||
| 3 | Patch is a slightly edited version from debian. Upstream link is: | ||
| 4 | http://bzr.savannah.gnu.org/lh/grub/trunk/grub/revision/3318 | ||
| 5 | |||
| 6 | Description: Don't stat devices unless we have to | ||
| 7 | Author: Vladimir Serbinenko <phcoder@gmail.com> | ||
| 8 | Author: Colin Watson <cjwatson@ubuntu.com> | ||
| 9 | Bug-Debian: http://bugs.debian.org/627587 | ||
| 10 | Forwarded: yes | ||
| 11 | Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3318 | ||
| 12 | Last-Update: 2011-05-31 | ||
| 13 | |||
| 14 | Index: b/grub-core/kern/emu/getroot.c | ||
| 15 | =================================================================== | ||
| 16 | --- a/grub-core/kern/emu/getroot.c | ||
| 17 | +++ b/grub-core/kern/emu/getroot.c | ||
| 18 | @@ -358,7 +358,7 @@ | ||
| 19 | |||
| 20 | if (S_ISLNK (st.st_mode)) { | ||
| 21 | #ifdef __linux__ | ||
| 22 | - if (strcmp (dir, "mapper") == 0) { | ||
| 23 | + if (strcmp (dir, "mapper") == 0 || strcmp (dir, "/dev/mapper") == 0) { | ||
| 24 | /* Follow symbolic links under /dev/mapper/; the canonical name | ||
| 25 | may be something like /dev/dm-0, but the names under | ||
| 26 | /dev/mapper/ are more human-readable and so we prefer them if | ||
| 27 | @@ -609,20 +609,27 @@ | ||
| 28 | |||
| 29 | if (os_dev) | ||
| 30 | { | ||
| 31 | - if (stat (os_dev, &st) >= 0) | ||
| 32 | - dev = st.st_rdev; | ||
| 33 | - else | ||
| 34 | - grub_util_error ("cannot stat `%s'", os_dev); | ||
| 35 | - free (os_dev); | ||
| 36 | + char *tmp = os_dev; | ||
| 37 | + os_dev = canonicalize_file_name (os_dev); | ||
| 38 | + free (tmp); | ||
| 39 | } | ||
| 40 | - else | ||
| 41 | + | ||
| 42 | + if (os_dev) | ||
| 43 | { | ||
| 44 | - if (stat (dir, &st) >= 0) | ||
| 45 | - dev = st.st_dev; | ||
| 46 | - else | ||
| 47 | - grub_util_error ("cannot stat `%s'", dir); | ||
| 48 | + if (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) != 0) | ||
| 49 | + return os_dev; | ||
| 50 | + if (stat (os_dev, &st) < 0) | ||
| 51 | + grub_util_error ("cannot stat `%s'", os_dev); | ||
| 52 | + free (os_dev); | ||
| 53 | + dev = st.st_rdev; | ||
| 54 | + return grub_find_device ("/dev/mapper", dev); | ||
| 55 | } | ||
| 56 | |||
| 57 | + if (stat (dir, &st) < 0) | ||
| 58 | + grub_util_error ("cannot stat `%s'", dir); | ||
| 59 | + | ||
| 60 | + dev = st.st_dev; | ||
| 61 | + | ||
| 62 | #ifdef __CYGWIN__ | ||
| 63 | /* Cygwin specific function. */ | ||
| 64 | os_dev = grub_find_device (dir, dev); | ||
