diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-14 11:28:35 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-14 11:28:35 -0800 |
commit | 73310a169aebe257efdd35a763cce1c7658f40c9 (patch) | |
tree | 4195dba6ed5c20fafc4d790167600433841f125e /init/initramfs.c | |
parent | 23a22d57a8962479ca630c9542e62d6f86fdf927 (diff) | |
download | linux-73310a169aebe257efdd35a763cce1c7658f40c9.tar.gz linux-73310a169aebe257efdd35a763cce1c7658f40c9.tar.bz2 linux-73310a169aebe257efdd35a763cce1c7658f40c9.zip |
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>
Diffstat (limited to 'init/initramfs.c')
-rw-r--r-- | init/initramfs.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/init/initramfs.c b/init/initramfs.c index 9a7290ec8187..7dcde7ea6603 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) { #ifdef CONFIG_BLK_DEV_RAM 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"); + } free_initrd(); #endif } |