diff options
author | Tejun Heo <tj@kernel.org> | 2013-01-18 14:05:56 -0800 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-01-18 14:05:56 -0800 |
commit | bb813f4c933ae9f887a014483690d5f8b8ec05e1 (patch) | |
tree | 04107b0ae2d1881960dea63b623915db159ecacc /init/initramfs.c | |
parent | 84b233adcca3cacd5cfa8013a5feda7a3db4a9af (diff) | |
download | lwn-bb813f4c933ae9f887a014483690d5f8b8ec05e1.tar.gz lwn-bb813f4c933ae9f887a014483690d5f8b8ec05e1.zip |
init, block: try to load default elevator module early during boot
This patch adds default module loading and uses it to load the default
block elevator. During boot, it's called right after initramfs or
initrd is made available and right before control is passed to
userland. This ensures that as long as the modules are available in
the usual places in initramfs, initrd or the root filesystem, the
default modules are loaded as soon as possible.
This will replace the on-demand elevator module loading from elevator
init path.
v2: Fixed build breakage when !CONFIG_BLOCK. Reported by kbuild test
robot.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Alex Riesen <raa.lkml@gmail.com>
Cc: Fengguang We <fengguang.wu@intel.com>
Diffstat (limited to 'init/initramfs.c')
-rw-r--r-- | init/initramfs.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/init/initramfs.c b/init/initramfs.c index 84c6bf111300..a67ef9dbda9d 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -592,7 +592,7 @@ static int __init populate_rootfs(void) initrd_end - initrd_start); if (!err) { free_initrd(); - return 0; + goto done; } else { clean_rootfs(); unpack_to_rootfs(__initramfs_start, __initramfs_size); @@ -607,6 +607,7 @@ static int __init populate_rootfs(void) sys_close(fd); free_initrd(); } + done: #else printk(KERN_INFO "Unpacking initramfs...\n"); err = unpack_to_rootfs((char *)initrd_start, @@ -615,6 +616,11 @@ static int __init populate_rootfs(void) printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err); free_initrd(); #endif + /* + * Try loading default modules from initramfs. This gives + * us a chance to load before device_initcalls. + */ + load_default_modules(); } return 0; } |