Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[sfrench/cifs-2.6.git] / init / do_mounts_initrd.c
index a06f037fa000a932d9de7b6f8dee909e5ce01720..b222ce9e1c8bd3e4871acf564d187225ba0e574c 100644 (file)
@@ -1,4 +1,3 @@
-#define __KERNEL_SYSCALLS__
 #include <linux/unistd.h>
 #include <linux/kernel.h>
 #include <linux/fs.h>
@@ -7,6 +6,7 @@
 #include <linux/romfs_fs.h>
 #include <linux/initrd.h>
 #include <linux/sched.h>
+#include <linux/freezer.h>
 
 #include "do_mounts.h"
 
@@ -35,7 +35,7 @@ static int __init do_linuxrc(void * shell)
        (void) sys_open("/dev/console",O_RDWR,0);
        (void) sys_dup(0);
        (void) sys_dup(0);
-       return execve(shell, argv, envp_init);
+       return kernel_execve(shell, argv, envp_init);
 }
 
 static void __init handle_initrd(void)
@@ -55,11 +55,12 @@ static void __init handle_initrd(void)
        sys_mount(".", "/", NULL, MS_MOVE, NULL);
        sys_chroot(".");
 
-       current->flags |= PF_NOFREEZE;
        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 */