diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-14 14:28:35 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-14 14:28:35 -0500 |
commit | 73310a169aebe257efdd35a763cce1c7658f40c9 (patch) | |
tree | 4195dba6ed5c20fafc4d790167600433841f125e /init | |
parent | 23a22d57a8962479ca630c9542e62d6f86fdf927 (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>
Diffstat (limited to 'init')
-rw-r--r-- | init/do_mounts_rd.c | 3 | ||||
-rw-r--r-- | init/initramfs.c | 11 |
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) | |||
83 | printk(KERN_NOTICE "RAMDISK: %s image found at block %d\n", | 83 | printk(KERN_NOTICE "RAMDISK: %s image found at block %d\n", |
84 | compress_name, start_block); | 84 | compress_name, start_block); |
85 | if (!*decompressor) | 85 | if (!*decompressor) |
86 | printk(KERN_CRIT "RAMDISK: %s decompressor not configured!\n", | 86 | printk(KERN_EMERG |
87 | "RAMDISK: %s decompressor not configured!\n", | ||
87 | compress_name); | 88 | compress_name); |
88 | nblocks = 0; | 89 | nblocks = 0; |
89 | goto done; | 90 | 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) | |||
528 | char *err = unpack_to_rootfs(__initramfs_start, | 528 | char *err = unpack_to_rootfs(__initramfs_start, |
529 | __initramfs_end - __initramfs_start, 0); | 529 | __initramfs_end - __initramfs_start, 0); |
530 | if (err) | 530 | if (err) |
531 | panic(err); | 531 | panic(err); /* Failed to decompress INTERNAL initramfs */ |
532 | if (initrd_start) { | 532 | if (initrd_start) { |
533 | #ifdef CONFIG_BLK_DEV_RAM | 533 | #ifdef CONFIG_BLK_DEV_RAM |
534 | int fd; | 534 | int fd; |
@@ -554,9 +554,12 @@ static int __init populate_rootfs(void) | |||
554 | printk(KERN_INFO "Unpacking initramfs..."); | 554 | printk(KERN_INFO "Unpacking initramfs..."); |
555 | err = unpack_to_rootfs((char *)initrd_start, | 555 | err = unpack_to_rootfs((char *)initrd_start, |
556 | initrd_end - initrd_start, 0); | 556 | initrd_end - initrd_start, 0); |
557 | if (err) | 557 | if (err) { |
558 | panic(err); | 558 | printk(" failed!\n"); |
559 | printk(" done\n"); | 559 | printk(KERN_EMERG "%s\n", err); |
560 | } else { | ||
561 | printk(" done\n"); | ||
562 | } | ||
560 | free_initrd(); | 563 | free_initrd(); |
561 | #endif | 564 | #endif |
562 | } | 565 | } |