Commit 019ad4a0 authored by Nigel Cunningham's avatar Nigel Cunningham Committed by Linus Torvalds

Fix failure to resume from initrds

Commit 83144186 (Freezer: make kernel
threads nonfreezable by default) breaks freezing when attempting to resume
from an initrd, because the init (which is freezeable) spins while waiting
for another thread to run /linuxrc, but doesn't check whether it has been
told to enter the refrigerator.  The original patch replaced a call to
try_to_freeze() with a call to yield().  I believe a simple reversion is
wrong because if !CONFIG_PM_SLEEP, try_to_freeze() is a noop.  It should
still yield.
Signed-off-by: default avatarNigel Cunningham <nigel@nigel.suspend2.net>
Acked-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2c392a4f
...@@ -57,8 +57,10 @@ static void __init handle_initrd(void) ...@@ -57,8 +57,10 @@ static void __init handle_initrd(void)
pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD); pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
if (pid > 0) if (pid > 0)
while (pid != sys_wait4(-1, NULL, 0, NULL)) while (pid != sys_wait4(-1, NULL, 0, NULL)) {
try_to_freeze();
yield(); yield();
}
/* move initrd to rootfs' /old */ /* move initrd to rootfs' /old */
sys_fchdir(old_fd); sys_fchdir(old_fd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment