 fork.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff -ruNp 3060-fork-non-conflicting-pages-for-copyback-old/kernel/fork.c 3060-fork-non-conflicting-pages-for-copyback-new/kernel/fork.c
--- 3060-fork-non-conflicting-pages-for-copyback-old/kernel/fork.c	2006-02-18 08:56:06.000000000 +1000
+++ 3060-fork-non-conflicting-pages-for-copyback-new/kernel/fork.c	2006-02-25 19:24:20.000000000 +1000
@@ -35,6 +35,7 @@
 #include <linux/swap.h>
 #include <linux/syscalls.h>
 #include <linux/jiffies.h>
+#include <linux/suspend.h>
 #include <linux/futex.h>
 #include <linux/rcupdate.h>
 #include <linux/ptrace.h>
@@ -166,7 +167,12 @@ static struct task_struct *dup_task_stru
 	if (!tsk)
 		return NULL;
 
-	ti = alloc_thread_info(tsk);
+	if (unlikely(test_suspend_state(SUSPEND_FORK_COPYBACK_THREAD))) {
+		extern void * suspend_get_nonconflicting_pages(int);
+		ti = suspend_get_nonconflicting_pages(get_order(THREAD_SIZE));
+	} else
+		ti = alloc_thread_info(tsk);
+
 	if (!ti) {
 		free_task_struct(tsk);
 		return NULL;
