X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=init%2Fdo_mounts.c;h=093f65915501bad5db5a8f9c348b5d62ad8a484c;hb=bd60c33e77a806e18309bb8ab787aa852e30fa56;hp=5efca73b39f908bfbd4844c97c0a3b9dc60d8377;hpb=bca1033b092a6fab2ed00036e8a7f6e2df5d99a2;p=safe%2Fjmp%2Flinux-2.6 diff --git a/init/do_mounts.c b/init/do_mounts.c index 5efca73..093f659 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include @@ -229,7 +231,8 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data) void __init mount_block_root(char *name, int flags) { - char *fs_names = __getname(); + char *fs_names = __getname_gfp(GFP_KERNEL + | __GFP_NOTRACK_FALSE_POSITIVE); char *p; #ifdef CONFIG_BLOCK char b[BDEVNAME_SIZE]; @@ -369,9 +372,14 @@ void __init prepare_namespace(void) ssleep(root_delay); } - /* wait for the known devices to complete their probing */ - while (driver_probe_done() != 0) - msleep(100); + /* + * wait for the known devices to complete their probing + * + * Note: this is a potential source of long boot delays. + * For example, it is not atypical to wait 5 seconds here + * for the touchpad of a laptop to initialize. + */ + wait_for_device_probe(); md_run_setup(); @@ -397,6 +405,7 @@ void __init prepare_namespace(void) while (driver_probe_done() != 0 || (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) msleep(100); + async_synchronize_full(); } is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;