summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2007-12-06 22:52:00 +0100
committerLen Brown <len.brown@intel.com>2007-12-06 22:52:00 +0100
commit982286d1b8e438f595cdc9304cc4c185c7b90a39 (patch)
treebf310a3ab93f92c21f3a1c8f8ff1321602922fab
parentPull apm-freeze-fix into release branch (diff)
parentFreezer: Fix s2disk resume from initrd (diff)
downloadlinux-982286d1b8e438f595cdc9304cc4c185c7b90a39.tar.xz
linux-982286d1b8e438f595cdc9304cc4c185c7b90a39.zip
Pull bugzilla-9345 into release branch
-rw-r--r--init/do_mounts_initrd.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/init/do_mounts_initrd.c b/init/do_mounts_initrd.c
index fd4fc12d2624..614241b5200c 100644
--- a/init/do_mounts_initrd.c
+++ b/init/do_mounts_initrd.c
@@ -55,12 +55,18 @@ static void __init handle_initrd(void)
sys_mount(".", "/", NULL, MS_MOVE, NULL);
sys_chroot(".");
+ /*
+ * In case that a resume from disk is carried out by linuxrc or one of
+ * its children, we need to tell the freezer not to wait for us.
+ */
+ current->flags |= PF_FREEZER_SKIP;
+
pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
if (pid > 0)
- while (pid != sys_wait4(-1, NULL, 0, NULL)) {
- try_to_freeze();
+ while (pid != sys_wait4(-1, NULL, 0, NULL))
yield();
- }
+
+ current->flags &= ~PF_FREEZER_SKIP;
/* move initrd to rootfs' /old */
sys_fchdir(old_fd);