diff --git a/ChangeLog b/ChangeLog index a2cc07f9a..a00842cec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-08-23 Vladimir Serbinenko + + * commands/search.c (search_fs): Try searching without autoload first. + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Load + filesystem module explicitly for faster booting. + 2009-08-23 Colin Watson * util/grub-mkconfig.in: Export GRUB_DISABLE_OS_PROBER. diff --git a/commands/search.c b/commands/search.c index d10b51abf..0cfd0ebbc 100644 --- a/commands/search.c +++ b/commands/search.c @@ -51,6 +51,7 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type) { int count = 0; char *buf = NULL; + grub_fs_autoload_hook_t saved_autoload; auto int iterate_device (const char *name); int iterate_device (const char *name) @@ -131,7 +132,22 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type) return (found && var); } - grub_device_iterate (iterate_device); + /* First try without autoloading if we're setting variable. */ + if (var) + { + saved_autoload = grub_fs_autoload_hook; + grub_fs_autoload_hook = 0; + grub_device_iterate (iterate_device); + + /* Restore autoload hook. */ + grub_fs_autoload_hook = saved_autoload; + + /* Retry with autoload if nothing found. */ + if (grub_errno == GRUB_ERR_NONE && count == 0) + grub_device_iterate (iterate_device); + } + else + grub_device_iterate (iterate_device); grub_free (buf); diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in index 3585a68ef..2385b0878 100644 --- a/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in @@ -140,6 +140,11 @@ prepare_grub_to_access_device () echo "insmod ${module}" done + fs="`${grub_probe} --device ${device} --target=fs`" + for module in ${fs} ; do + echo "insmod ${module}" + done + # If there's a filesystem UUID that GRUB is capable of identifying, use it; # otherwise set root as per value in device.map. echo "set root=`${grub_probe} --device ${device} --target=drive`"