diff options
authorH. Peter Anvin <hpa@linux.intel.com>2009-01-14 11:28:35 -0800
committerH. Peter Anvin <hpa@linux.intel.com>2009-01-14 11:28:35 -0800
commit73310a169aebe257efdd35a763cce1c7658f40c9 (patch)
parent23a22d57a8962479ca630c9542e62d6f86fdf927 (diff)
init: make initrd/initramfs decompression failure a KERN_EMERG event
Impact: More consistent behaviour, avoid policy in the kernel Upgrade/downgrade initrd/initramfs decompression failure from inconsistently a panic or a KERN_ALERT message to a KERN_EMERG event. It is, however, possible do design a system which can recover from this (using the kernel builtin code and/or the internal initramfs), which means this is policy, not a technical necessity. A good way to handle this would be to have a panic-level=X option, to force a panic on a printk above a certain level. That is a separate patch, however. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2 files changed, 9 insertions, 5 deletions
diff --git a/init/do_mounts_rd.c b/init/do_mounts_rd.c
index 91d0cfca507..027a402708d 100644
--- a/init/do_mounts_rd.c
+++ b/init/do_mounts_rd.c
@@ -83,7 +83,8 @@ identify_ramdisk_image(int fd, int start_block, decompress_fn *decompressor)
printk(KERN_NOTICE "RAMDISK: %s image found at block %d\n",
compress_name, start_block);
if (!*decompressor)
- printk(KERN_CRIT "RAMDISK: %s decompressor not configured!\n",
+ printk(KERN_EMERG
+ "RAMDISK: %s decompressor not configured!\n",
nblocks = 0;
goto done;
diff --git a/init/initramfs.c b/init/initramfs.c
index 9a7290ec818..7dcde7ea660 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -528,7 +528,7 @@ static int __init populate_rootfs(void)
char *err = unpack_to_rootfs(__initramfs_start,
__initramfs_end - __initramfs_start, 0);
if (err)
- panic(err);
+ panic(err); /* Failed to decompress INTERNAL initramfs */
if (initrd_start) {
int fd;
@@ -554,9 +554,12 @@ static int __init populate_rootfs(void)
printk(KERN_INFO "Unpacking initramfs...");
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start, 0);
- if (err)
- panic(err);
- printk(" done\n");
+ if (err) {
+ printk(" failed!\n");
+ printk(KERN_EMERG "%s\n", err);
+ } else {
+ printk(" done\n");
+ }