diff options
author | 2011-09-04 09:17:44 +0000 | |
---|---|---|
committer | 2011-09-04 09:17:44 +0000 | |
commit | 9a876b24db0be3ac724ca1135fe6ee7590a41ea2 (patch) | |
tree | 8eb9af44f464b07b7cac506d63eee99f0495858e /sys-boot/grub | |
parent | Fix compilation on Solaris (diff) | |
download | historical-9a876b24db0be3ac724ca1135fe6ee7590a41ea2.tar.gz historical-9a876b24db0be3ac724ca1135fe6ee7590a41ea2.tar.bz2 historical-9a876b24db0be3ac724ca1135fe6ee7590a41ea2.zip |
Backport patches to fix esissues with non-existant /dev/root. Fixes bug #381491.
Package-Manager: portage-2.2.0_alpha53/cvs/Linux x86_64
Diffstat (limited to 'sys-boot/grub')
-rw-r--r-- | sys-boot/grub/ChangeLog | 11 | ||||
-rw-r--r-- | sys-boot/grub/Manifest | 36 | ||||
-rw-r--r-- | sys-boot/grub/files/1.99-do_not_stat_so_often.patch | 65 | ||||
-rw-r--r-- | sys-boot/grub/files/1.99-improve_devmapper.patch | 279 | ||||
-rw-r--r-- | sys-boot/grub/files/1.99-stat_root_device_properly-p1.patch | 21 | ||||
-rw-r--r-- | sys-boot/grub/files/1.99-stat_root_device_properly-p2.patch | 21 | ||||
-rw-r--r-- | sys-boot/grub/grub-1.99-r2.ebuild (renamed from sys-boot/grub/grub-1.99-r1.ebuild) | 8 |
7 files changed, 422 insertions, 19 deletions
diff --git a/sys-boot/grub/ChangeLog b/sys-boot/grub/ChangeLog index 554ea6e2cfa3..d54995d987a2 100644 --- a/sys-boot/grub/ChangeLog +++ b/sys-boot/grub/ChangeLog @@ -1,6 +1,15 @@ # ChangeLog for sys-boot/grub # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-boot/grub/ChangeLog,v 1.163 2011/08/31 11:27:51 alexxy Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-boot/grub/ChangeLog,v 1.164 2011/09/04 09:17:44 scarabeus Exp $ + +*grub-1.99-r2 (04 Sep 2011) + + 04 Sep 2011; Tomáš Chvátal <scarabeus@gentoo.org> + +files/1.99-do_not_stat_so_often.patch, +files/1.99-improve_devmapper.patch, + +files/1.99-stat_root_device_properly-p1.patch, -grub-1.99-r1.ebuild, + +files/1.99-stat_root_device_properly-p2.patch, +grub-1.99-r2.ebuild: + Backport patches to fix esissues with non-existant /dev/root. Fixes bug + #381491. 31 Aug 2011; Alexey Shvetsov <alexxy@gentoo.org> grub-1.99-r1.ebuild, grub-9999.ebuild: diff --git a/sys-boot/grub/Manifest b/sys-boot/grub/Manifest index 9f1d7b7552c5..0bf0517a10c4 100644 --- a/sys-boot/grub/Manifest +++ b/sys-boot/grub/Manifest @@ -1,7 +1,11 @@ -----BEGIN PGP SIGNED MESSAGE----- -Hash: SHA256 +Hash: SHA1 AUX 1.99-call_proper_grub_probe.patch 536 RMD160 28e914f6ef8e2d9eb73316fa8e5d29b6541d806f SHA1 91237ebbe574baf48d05302c01422c0f0b5c8b49 SHA256 0e27b4ba6a0deedef2f65822e3b76aea4a817cb7219b01c29c8f682c450bd5e8 +AUX 1.99-do_not_stat_so_often.patch 1731 RMD160 ed04af18876c27ca6a85d627d2082a773add19c8 SHA1 ee1936e26f2a3f564195385465752ccee7d29713 SHA256 a33fdbcab7fa4ad66b26598d9a6f1703f419229058c1e9c9c14edb6272783727 +AUX 1.99-improve_devmapper.patch 7134 RMD160 a8dbf91626c607f5fec85235a2042b7e82ffd8d2 SHA1 d3684f80d5f319059ccee1f6822b5a96dd467258 SHA256 b12624944d129820966146d55693b325d48d5d56901727142e386be082661778 +AUX 1.99-stat_root_device_properly-p1.patch 698 RMD160 f28b945c2342a2a95e67357c5387cadf16d8e34f SHA1 3872ccd325e8f4f4693984f0abf26b935c475dae SHA256 1facf84e5195eb98b390e43e0a0d6f791e9500ef678b025e95f96d5a2769da5a +AUX 1.99-stat_root_device_properly-p2.patch 621 RMD160 2b52c8cbddf95def3fcc77ec8a2cb3524891fd1e SHA1 280dafa0d0c93905a850b17e9a9f09cea1357a05 SHA256 431876459562c0aae6e854a97eeaf0cacdad8ceb5477788a4d691e4e6fa613eb AUX grub-0.97-gpt.patch 10682 RMD160 53dd38d52f2b38fb28dfb670d6fd27e47a562bbb SHA1 6057a076110d469fb63e56e57711d281221f9b42 SHA256 5e38046cfb727420e5b4b19d71c7fb4ddff22cbcc356c9f888763b0c1963d389 AUX grub.conf.gentoo 627 RMD160 d90fb4373bad476f98ec9c5065d6cdfd9e3b706f SHA1 004f2fc04605ec9190de0a87e7df8bbc33daff89 SHA256 914b15af252210a32776196437cd8013e10e57d5780e66877ef3fe9a2b4b9776 AUX grub.default 1229 RMD160 457cd4cac9c8d8a6edf5ae347c13f5f3feeea734 SHA1 cdeb5d577df33d340bf233fec76fdefa6251d25f SHA256 1ca3065f28c72043036fdc19565e66b1315928c725765463b2c6037e04deb1c5 @@ -37,24 +41,24 @@ EBUILD grub-0.97-r6.ebuild 8801 RMD160 3da0ba7ea62758c9fd352f7290b441c3e9f08fb6 EBUILD grub-0.97-r8.ebuild 8941 RMD160 4caee80e02de14e6a88a3ab016df32f90c258f09 SHA1 be1f73938f4763cf6413afee97062abb8666ffbb SHA256 5876009e82e6556be90d2355defd3039d244f5a53313ba29ce937e9c14e169ff EBUILD grub-0.97-r9.ebuild 9045 RMD160 5db30743506d7ae274695a94bd1c7c5fea8003e2 SHA1 4796cd56c8e77239719bd31a0542b11129e7922f SHA256 153939f732549503f08dd2acff27325b3e398ffc065e16c1749281c6c66a97d5 EBUILD grub-0.97.ebuild 4494 RMD160 f798b7101af90add6d45725e34aeb7f219e0b748 SHA1 fbb215b293127635ba41e7fa952518e5e07f118a SHA256 d08c03989b1cd6ad91fa2e1a098e0230994570472d0f11a6d926e21e06071c58 -EBUILD grub-1.99-r1.ebuild 7338 RMD160 3aadc2a4618f577b9fc68364592ead32463a59be SHA1 8a70a4b8fa2d6ea21eb13946aa2be5e476fcfc6d SHA256 6ff5faec027266f5daa2b83c4358f8ff8482e982995cad50587911c7f00b9d7a +EBUILD grub-1.99-r2.ebuild 7554 RMD160 91db4744ac5d8c488aeb486d2e124e1226669a05 SHA1 664023fbe97f4fc6be3955cf23f636a8708a5de4 SHA256 c3fb04f4006528c084895c0567012556135a9d6a3d7247ce344585d9473f05a4 EBUILD grub-9999.ebuild 7336 RMD160 896a695954a8e3d1eaffd2675ddeca8bb360e2aa SHA1 e467a2e4438a7e9d1b8b32749e0819d03bd779e4 SHA256 a9858a80fbaf3b83e7b585c0ea6e75acd7bb109b4557bf222b6e89327603c52d -MISC ChangeLog 33450 RMD160 86dfe680dc7e1a18d5f6e1abbc6f912523ad02cd SHA1 e0b6b98cbb3392279c551c69db06559cddf8fbd3 SHA256 b40d568aecb8931683a19dd3d63fe1fdc75883d544ef2e68f192c721c400cfc6 +MISC ChangeLog 33846 RMD160 2d726dcc0775c694ec929333c4052e57b61f74bd SHA1 8ef3268a3982503074f533c91d888b2ad1e9ef9c SHA256 fa42e5c247722ec23713eb83a2ae71b2cf740a016fccc777d59558b95bb41a57 MISC metadata.xml 515 RMD160 7ff103974a6e301b4ba14c55c674c1bf35b1a045 SHA1 05d70f211a5f37e1368b74f7a74b0830d8198787 SHA256 dc713fb7db877b0d8405ac8dba28c4253347205a46d677ffe71901c2f017fb0c -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) -iQIcBAEBCAAGBQJOXhq4AAoJEOf+E+/4L5LmM3kP/3hsFtxsB07hInbndKnZh5v+ -CSfl/2feW2ymPQWQWRaDonVXOLczYkbL0qIhbGz7Qj3oajIU/aRG8jf3NDZ9QloC -CQv5lnr5kD8z/n5yJb9kPm2zMQWGu1BRZlRSEoqjv+tx/81RAxgRvkCw2MfJRQn0 -zjgCbrODvPpufolMceYq4ZG0RYU9Bo6EKec9Gl7fPMXQGtccJyQUoEEOAgdREse/ -bLQCX8kdmqC0XaKONvcTXLlEmz0WLaoP8JllZS0Wu1TvBvrwQNdxUVObjPSpUFMK -l7PU1KjBTzq37r92QD2yujHsjmpWuMC4yEiHETumk9e725+gJXUIjJYKHxYfDOZf -d9j9UNUpQif/DNi0Nr1GbksTt7767asAwisO2vUuwGhM92EQMyZZ7+6vKfcdlb9F -EqvFppxuUNDkkmJmJOIdqCG0YaMpjU0Wi671WTsvjBMaQ+JWn7ziWEC9nGjkGQBC -EaXA9OdRcybyO+wzeitEYAXsf5aux/2lxK4wOfHB6xChq2bBawdDkogBponjxfP3 -jpGUrGIGlUOhyEeI+4/E3/yE6YJdx+//h4vRMylQVWd6vEYra38VA+/R+bn1wnqW -IUrW7Qat6fXHClGC9rSPju+vu2BOgo2BxIZLj3/5A2AO8uG+dhu2B5b3Cs3BmoN9 -jjolHdyLJ1bLkeZbvut2 -=3Z39 +iQIcBAEBAgAGBQJOY0JRAAoJEOSiRoyO7jvopbEP/0E+YMAsEgUSiiUMOKTiNpY3 +ytMPD+bTNMq11oZUqpY/syJvqVZZRiDZ1RJOcPin9UnI6vsOy4BkL/0umzAPyJOA +Aaul38B7kamqO/FZiXWLnGwN+mG+80YaT0UEFL7feTd1PfveosLsg97s5ixGdX/d +3MFIWgZz8fPGDRDc3G6zUWCfHVtwbe1DqYjN4JUGeEuy6hANZyebm3nkYBDoGqk2 +JOC8y2VJAsSWHAhoo/98/ayiL4/Z/IIOtnJkN5XS0W4W9vraJWVE61r61gQGep0f +1aayiLNmbcSwpxMPCj9KEUIx2lOrtxc9BnCZcTJfwNX4bfOidSNTVGZiVdDRNyHK +ozkIZU8Jg9ROvOkMKH65en3G8X5BLNzcWIar13MAoJJqft4NJlvZN3pzL7NCvf70 +FJ8RDOxoMFnlJvM39CLOjrkYGy+KQvzSccUX0VTw0x2upzJDoduIqXHg1KewDHM6 +yQhXPVOL3yhKMP0DJSpF3E5BZe1wYb/SDFfAPJO3OINcsM8ACeh1fl9eX6Y/9Pbi +0i9hooJVPNehyvyOAhPMzJzcHzgfHx6wIwRexHbnHZKoiFRju8228qVOzJKnjzN3 +xr45LM/gcH95LqqXEsnpQ6+plylUK7MFFD3QuAb0QFXx5qLtOb/3OnynyPQHMbXp +rR9bL6xYxO6Znwq5TWv+ +=AJ+M -----END PGP SIGNATURE----- diff --git a/sys-boot/grub/files/1.99-do_not_stat_so_often.patch b/sys-boot/grub/files/1.99-do_not_stat_so_often.patch new file mode 100644 index 000000000000..ca8a0239003b --- /dev/null +++ b/sys-boot/grub/files/1.99-do_not_stat_so_often.patch @@ -0,0 +1,65 @@ +--- 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; + } + + diff --git a/sys-boot/grub/files/1.99-improve_devmapper.patch b/sys-boot/grub/files/1.99-improve_devmapper.patch new file mode 100644 index 000000000000..5f0a930e3773 --- /dev/null +++ b/sys-boot/grub/files/1.99-improve_devmapper.patch @@ -0,0 +1,279 @@ +--- grub-core/kern/emu/getroot.c 2011-04-21 09:26:29 +0000 ++++ grub-core/kern/emu/getroot.c 2011-05-18 07:35:47 +0000 +@@ -34,6 +34,10 @@ + #include <stdint.h> + #include <grub/util/misc.h> + ++#ifdef HAVE_DEVICE_MAPPER ++# include <libdevmapper.h> ++#endif ++ + #ifdef __GNU__ + #include <hurd.h> + #include <hurd/lookup.h> +@@ -634,32 +638,65 @@ + } + + static int +-grub_util_is_dmraid (const char *os_dev) ++grub_util_is_lvm (const char *os_dev) + { +- if (! strncmp (os_dev, "/dev/mapper/nvidia_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/isw_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/hpt37x_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/hpt45x_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/via_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/lsi_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/pdc_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/jmicron_", 20)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/asr_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/sil_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/ddf1_", 17)) +- return 1; +- +- return 0; ++ if ((strncmp ("/dev/mapper/", os_dev, 12) != 0)) ++ return 0; ++ ++#ifdef HAVE_DEVICE_MAPPER ++ { ++ struct dm_tree *tree; ++ uint32_t maj, min; ++ struct dm_tree_node *node = NULL; ++ const char *node_uuid; ++ struct stat st; ++ ++ if (stat (os_dev, &st) < 0) ++ return 0; ++ ++ tree = dm_tree_create (); ++ if (! tree) ++ { ++ grub_printf ("Failed to create tree\n"); ++ grub_dprintf ("hostdisk", "dm_tree_create failed\n"); ++ return 0; ++ } ++ ++ maj = major (st.st_rdev); ++ min = minor (st.st_rdev); ++ ++ if (! dm_tree_add_dev (tree, maj, min)) ++ { ++ grub_dprintf ("hostdisk", "dm_tree_add_dev failed\n"); ++ dm_tree_free (tree); ++ return 0; ++ } ++ ++ node = dm_tree_find_node (tree, maj, min); ++ if (! node) ++ { ++ grub_dprintf ("hostdisk", "dm_tree_find_node failed\n"); ++ dm_tree_free (tree); ++ return 0; ++ } ++ node_uuid = dm_tree_node_get_uuid (node); ++ if (! node_uuid) ++ { ++ grub_dprintf ("hostdisk", "%s has no DM uuid\n", os_dev); ++ dm_tree_free (tree); ++ return 0; ++ } ++ if (strncmp (node_uuid, "LVM-", 4) != 0) ++ { ++ dm_tree_free (tree); ++ return 0; ++ } ++ dm_tree_free (tree); ++ return 1; ++ } ++#else ++ return 1; ++#endif /* HAVE_DEVICE_MAPPER */ + } + + int +@@ -671,13 +708,11 @@ + return GRUB_DEV_ABSTRACTION_NONE; + + /* Check for LVM. */ +- if (!strncmp (os_dev, "/dev/mapper/", 12) +- && ! grub_util_is_dmraid (os_dev) +- && strncmp (os_dev, "/dev/mapper/mpath", 17) != 0) ++ if (grub_util_is_lvm (os_dev)) + return GRUB_DEV_ABSTRACTION_LVM; + + /* Check for RAID. */ +- if (!strncmp (os_dev, "/dev/md", 7)) ++ if (!strncmp (os_dev, "/dev/md", 7) && ! grub_util_device_is_mapped (os_dev)) + return GRUB_DEV_ABSTRACTION_RAID; + #endif + + +=== modified file 'grub-core/kern/emu/hostdisk.c' +--- grub-core/kern/emu/hostdisk.c 2011-05-09 16:59:35 +0000 ++++ grub-core/kern/emu/hostdisk.c 2011-05-18 07:35:47 +0000 +@@ -24,6 +24,7 @@ + #include <grub/err.h> + #include <grub/emu/misc.h> + #include <grub/emu/hostdisk.h> ++#include <grub/emu/getroot.h> + #include <grub/misc.h> + #include <grub/i18n.h> + #include <grub/list.h> +@@ -331,18 +332,23 @@ + return GRUB_ERR_NONE; + } + ++int ++grub_util_device_is_mapped (const char *dev) ++{ + #ifdef HAVE_DEVICE_MAPPER +-static int +-device_is_mapped (const char *dev) +-{ + struct stat st; + ++ if (!grub_device_mapper_supported ()) ++ return 0; ++ + if (stat (dev, &st) < 0) + return 0; + + return dm_is_dm_major (major (st.st_rdev)); ++#else ++ return 0; ++#endif /* HAVE_DEVICE_MAPPER */ + } +-#endif /* HAVE_DEVICE_MAPPER */ + + #if defined (__FreeBSD__) || defined(__FreeBSD_kernel__) + /* FIXME: geom actually gives us the whole container hierarchy. +@@ -418,7 +424,7 @@ + # endif /* !defined(HAVE_DIOCGDINFO) */ + + # ifdef HAVE_DEVICE_MAPPER +- if (grub_device_mapper_supported () && device_is_mapped (dev)) { ++ if (grub_util_device_is_mapped (dev)) { + struct dm_task *task = NULL; + grub_uint64_t start, length; + char *target_type, *params, *space; +@@ -1149,6 +1155,54 @@ + return ret; + } + ++#ifdef HAVE_DEVICE_MAPPER ++static int ++grub_util_get_dm_node_linear_info (const char *dev, ++ int *maj, int *min) ++{ ++ struct dm_task *dmt; ++ void *next = NULL; ++ uint64_t length, start; ++ char *target, *params; ++ char *ptr; ++ int major, minor; ++ ++ dmt = dm_task_create(DM_DEVICE_TABLE); ++ if (!dmt) ++ return 0; ++ ++ if (!dm_task_set_name(dmt, dev)) ++ return 0; ++ dm_task_no_open_count(dmt); ++ if (!dm_task_run(dmt)) ++ return 0; ++ next = dm_get_next_target(dmt, next, &start, &length, ++ &target, ¶ms); ++ if (grub_strcmp (target, "linear") != 0) ++ return 0; ++ major = grub_strtoul (params, &ptr, 10); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (*ptr != ':') ++ return 0; ++ ptr++; ++ minor = grub_strtoul (ptr, 0, 10); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (maj) ++ *maj = major; ++ if (min) ++ *min = minor; ++ return 1; ++} ++#endif ++ + static char * + convert_system_partition_to_system_disk (const char *os_dev, struct stat *st) + { +@@ -1325,9 +1379,39 @@ + node = NULL; + goto devmapper_out; + } +- else if (strncmp (node_uuid, "DMRAID-", 7) != 0) +- { ++ if (strncmp (node_uuid, "LVM-", 4) == 0) ++ { ++ grub_dprintf ("hostdisk", "%s is an LVM\n", path); ++ node = NULL; ++ goto devmapper_out; ++ } ++ if (strncmp (node_uuid, "mpath-", 6) == 0) ++ { ++ /* Multipath partitions have partN-mpath-* UUIDs, and are ++ linear mappings so are handled by ++ grub_util_get_dm_node_linear_info. Multipath disks are not ++ linear mappings and must be handled specially. */ ++ grub_dprintf ("hostdisk", "%s is a multipath disk\n", path); ++ mapper_name = dm_tree_node_get_name (node); ++ goto devmapper_out; ++ } ++ if (strncmp (node_uuid, "DMRAID-", 7) != 0) ++ { ++ int major, minor; ++ const char *node_name; + grub_dprintf ("hostdisk", "%s is not DM-RAID\n", path); ++ ++ if ((node_name = dm_tree_node_get_name (node)) ++ && grub_util_get_dm_node_linear_info (node_name, ++ &major, &minor)) ++ { ++ if (tree) ++ dm_tree_free (tree); ++ free (path); ++ char *ret = grub_find_device (NULL, (major << 8) | minor); ++ return ret; ++ } ++ + node = NULL; + goto devmapper_out; + } + +--- include/grub/emu/misc.h 2010-12-02 13:26:46 +0000 ++++ include/grub/emu/misc.h 2011-05-18 07:35:47 +0000 +@@ -54,6 +54,8 @@ + + char *grub_make_system_path_relative_to_its_root (const char *path) + __attribute__ ((warn_unused_result)); ++int ++grub_util_device_is_mapped (const char *dev); + + void * EXPORT_FUNC(xmalloc) (grub_size_t size) __attribute__ ((warn_unused_result)); + void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) __attribute__ ((warn_unused_result)); + diff --git a/sys-boot/grub/files/1.99-stat_root_device_properly-p1.patch b/sys-boot/grub/files/1.99-stat_root_device_properly-p1.patch new file mode 100644 index 000000000000..fc14c536b879 --- /dev/null +++ b/sys-boot/grub/files/1.99-stat_root_device_properly-p1.patch @@ -0,0 +1,21 @@ +--- grub-core/kern/emu/getroot.c 2011-05-21 05:03:55 +0000 ++++ grub-core/kern/emu/getroot.c 2011-06-23 17:50:41 +0000 +@@ -616,13 +616,15 @@ + + if (os_dev) + { +- if (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) != 0) ++ int dm = (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) == 0); ++ int root = (strcmp (os_dev, "/dev/root") == 0); ++ if (!dm && !root) + 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); ++ return grub_find_device (dm ? "/dev/mapper" : "/dev", dev); + } + + if (stat (dir, &st) < 0) + diff --git a/sys-boot/grub/files/1.99-stat_root_device_properly-p2.patch b/sys-boot/grub/files/1.99-stat_root_device_properly-p2.patch new file mode 100644 index 000000000000..aa7fd1867560 --- /dev/null +++ b/sys-boot/grub/files/1.99-stat_root_device_properly-p2.patch @@ -0,0 +1,21 @@ +--- grub-core/kern/emu/getroot.c 2011-06-23 17:50:41 +0000 ++++ grub-core/kern/emu/getroot.c 2011-06-24 02:32:54 +0000 +@@ -620,11 +620,13 @@ + int root = (strcmp (os_dev, "/dev/root") == 0); + if (!dm && !root) + return os_dev; +- if (stat (os_dev, &st) < 0) +- grub_util_error ("cannot stat `%s'", os_dev); ++ if (stat (os_dev, &st) >= 0) ++ { ++ free (os_dev); ++ dev = st.st_rdev; ++ return grub_find_device (dm ? "/dev/mapper" : "/dev", dev); ++ } + free (os_dev); +- dev = st.st_rdev; +- return grub_find_device (dm ? "/dev/mapper" : "/dev", dev); + } + + if (stat (dir, &st) < 0) + diff --git a/sys-boot/grub/grub-1.99-r1.ebuild b/sys-boot/grub/grub-1.99-r2.ebuild index 7d48192597aa..641f91e69282 100644 --- a/sys-boot/grub/grub-1.99-r1.ebuild +++ b/sys-boot/grub/grub-1.99-r2.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-boot/grub/grub-1.99-r1.ebuild,v 1.2 2011/08/31 11:27:51 alexxy Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-boot/grub/grub-1.99-r2.ebuild,v 1.1 2011/09/04 09:17:44 scarabeus Exp $ EAPI=4 @@ -157,7 +157,11 @@ src_prepare() { local i j archs epatch \ - "${FILESDIR}/1.99-call_proper_grub_probe.patch" + "${FILESDIR}/1.99-call_proper_grub_probe.patch" \ + "${FILESDIR}/1.99-improve_devmapper.patch" \ + "${FILESDIR}/1.99-do_not_stat_so_often.patch" \ + "${FILESDIR}/1.99-stat_root_device_properly-p1.patch" \ + "${FILESDIR}/1.99-stat_root_device_properly-p2.patch" epatch_user |