This is independent of the last two patches.
Name: Daemonize idle task
Author: Rusty Russell
D: This patch allows daemonize() to be called on another process (if
D: not started yet), and calls it on the idle task.
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal working-2.5.14-dofork+clonepid/include/linux/sched.h tmp/include/linux/sched.h
--- working-2.5.14-dofork+clonepid/include/linux/sched.h Thu May 9 18:25:21 2002
+++ tmp/include/linux/sched.h Thu May 9 18:36:17 2002
@@ -654,7 +654,12 @@
extern void exit_sighand(struct task_struct *);
extern void reparent_to_init(void);
-extern void daemonize(void);
+extern void __daemonize(struct task_struct *);
+static inline void daemonize(void)
+{
+ __daemonize(current);
+}
+
extern task_t *child_reaper;
extern int do_execve(char *, char **, char **, struct pt_regs *);
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal working-2.5.14-dofork+clonepid/kernel/exit.c tmp/kernel/exit.c
--- working-2.5.14-dofork+clonepid/kernel/exit.c Mon Apr 29 16:00:29 2002
+++ tmp/kernel/exit.c Thu May 9 18:36:17 2002
@@ -201,32 +201,30 @@
* Put all the gunge required to become a kernel thread without
* attached user resources in one place where it belongs.
*/
-
-void daemonize(void)
+void __daemonize(struct task_struct *tsk)
{
struct fs_struct *fs;
-
/*
* If we were started as result of loading a module, close all of the
* user space pages. We don't need them, and if we didn't close them
* they would be locked into memory.
*/
- exit_mm(current);
+ exit_mm(tsk);
- current->session = 1;
- current->pgrp = 1;
- current->tty = NULL;
+ tsk->session = 1;
+ tsk->pgrp = 1;
+ tsk->tty = NULL;
/* Become as one with the init task */
- exit_fs(current); /* current->fs->count--; */
+ exit_fs(tsk); /* current->fs->count--; */
fs = init_task.fs;
- current->fs = fs;
+ tsk->fs = fs;
atomic_inc(&fs->count);
- exit_files(current);
- current->files = init_task.files;
- atomic_inc(¤t->files->count);
+ exit_files(tsk);
+ tsk->files = init_task.files;
+ atomic_inc(&tsk->files->count);
}
/*
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal working-2.5.14-dofork+clonepid/kernel/sched.c tmp/kernel/sched.c
--- working-2.5.14-dofork+clonepid/kernel/sched.c Wed May 1 15:09:29 2002
+++ tmp/kernel/sched.c Thu May 9 18:45:17 2002
@@ -1555,6 +1555,8 @@
runqueue_t *idle_rq = cpu_rq(cpu), *rq = cpu_rq(idle->thread_info->cpu);
unsigned long flags;
+ if (idle != &init_task)
+ __daemonize(idle);
__save_flags(flags);
__cli();
double_rq_lock(idle_rq, rq);
-- Anyone who quotes me in their sig is an idiot. -- Rusty Russell. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/