2008-07-25 Robert Millan <rmh@aybabtu.com>
* util/getroot.c (find_root_device): Skip devices that match /dev/dm-[0-9]. This lets the real device be found for any type of abstraction (LVM, EVMS, RAID..). (grub_guess_root_device): Do not traverse /dev/mapper (for LVM) and /dev/evms (for EVMS) before traversing /dev. If a /dev/dm-[0-9] device is found first, find_root_device() will now skip it.
This commit is contained in:
parent
51cc519338
commit
9051607e1e
2 changed files with 20 additions and 14 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-07-25 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
|
* util/getroot.c (find_root_device): Skip devices that match
|
||||||
|
/dev/dm-[0-9]. This lets the real device be found for any type of
|
||||||
|
abstraction (LVM, EVMS, RAID..).
|
||||||
|
(grub_guess_root_device): Do not traverse /dev/mapper (for LVM)
|
||||||
|
and /dev/evms (for EVMS) before traversing /dev. If a /dev/dm-[0-9]
|
||||||
|
device is found first, find_root_device() will now skip it.
|
||||||
|
|
||||||
2008-07-24 Pavel Roskin <proski@gnu.org>
|
2008-07-24 Pavel Roskin <proski@gnu.org>
|
||||||
|
|
||||||
* include/grub/types.h: Use __builtin_bswap32() and
|
* include/grub/types.h: Use __builtin_bswap32() and
|
||||||
|
|
|
@ -229,6 +229,17 @@ find_root_device (const char *dir, dev_t dev)
|
||||||
|
|
||||||
if (S_ISBLK (st.st_mode) && st.st_rdev == dev)
|
if (S_ISBLK (st.st_mode) && st.st_rdev == dev)
|
||||||
{
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
/* Skip useless device names like /dev/dm-0, which prevent us from
|
||||||
|
finding /dev/mapper/*, /dev/evms/*, /dev/md*, etc. */
|
||||||
|
if (ent->d_name[0] == 'd' &&
|
||||||
|
ent->d_name[1] == 'm' &&
|
||||||
|
ent->d_name[2] == '-' &&
|
||||||
|
ent->d_name[3] >= '0' &&
|
||||||
|
ent->d_name[3] <= '9')
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Found! */
|
/* Found! */
|
||||||
char *res;
|
char *res;
|
||||||
char *cwd;
|
char *cwd;
|
||||||
|
@ -358,20 +369,6 @@ grub_guess_root_device (const char *dir)
|
||||||
if (stat (dir, &st) < 0)
|
if (stat (dir, &st) < 0)
|
||||||
grub_util_error ("Cannot stat `%s'", dir);
|
grub_util_error ("Cannot stat `%s'", dir);
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
/* We first try to find the device in the /dev/mapper directory. If
|
|
||||||
we don't do this, we get useless device names like /dev/dm-0 for
|
|
||||||
LVM. */
|
|
||||||
os_dev = find_root_device ("/dev/mapper", st.st_dev);
|
|
||||||
if (os_dev)
|
|
||||||
return os_dev;
|
|
||||||
|
|
||||||
/* The same applies to /dev/evms directory (for EVMS volumes). */
|
|
||||||
os_dev = find_root_device ("/dev/evms", st.st_dev);
|
|
||||||
if (os_dev)
|
|
||||||
return os_dev;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __CYGWIN__
|
#ifdef __CYGWIN__
|
||||||
/* Cygwin specific function. */
|
/* Cygwin specific function. */
|
||||||
os_dev = find_cygwin_root_device (dir, st.st_dev);
|
os_dev = find_cygwin_root_device (dir, st.st_dev);
|
||||||
|
|
Loading…
Reference in a new issue