Fix failure to resume from initrds
PATCH 1/1 Fix failure to resume from initrds
[Please consider as 2.6.23 material]
---
From: Nigel Cunningham <[email protected]>
Commit 831441862956fffa17b9801db37e6ea1650b0f69 (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.
--- init/do_mounts_initrd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
init/do_mounts_initrd.c +3 -1
@@ -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);
Hi!
Quoted 10 lines
From: Nigel Cunningham <[email protected]>
Commit
831441862956fffa17b9801db37e6ea1650b0f69(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 totry_to_freeze()with a call toyield(). I believe a simple reversion is wrong because
if !CONFIG_PM_SLEEP,try_to_freeze()is a noop. It should still yield.
Quoted 2 lines
Signed-off-by Nigel Cunningham <[email protected]>
ACK.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html