mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 04:34:08 +08:00
Fix failure to resume from initrds
Commit 8314418629
(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: Nigel Cunningham <nigel@nigel.suspend2.net>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
2c392a4f47
commit
019ad4a0a6
@ -57,8 +57,10 @@ static void __init handle_initrd(void)
|
||||
|
||||
pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
|
||||
if (pid > 0)
|
||||
while (pid != sys_wait4(-1, NULL, 0, NULL))
|
||||
while (pid != sys_wait4(-1, NULL, 0, NULL)) {
|
||||
try_to_freeze();
|
||||
yield();
|
||||
}
|
||||
|
||||
/* move initrd to rootfs' /old */
|
||||
sys_fchdir(old_fd);
|
||||
|
Loading…
Reference in New Issue
Block a user