Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754364AbYFAP3k (ORCPT ); Sun, 1 Jun 2008 11:29:40 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752220AbYFAP3N (ORCPT ); Sun, 1 Jun 2008 11:29:13 -0400 Received: from x346.tv-sign.ru ([89.108.83.215]:58892 "EHLO mail.screens.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752119AbYFAP3M (ORCPT ); Sun, 1 Jun 2008 11:29:12 -0400 Date: Sun, 1 Jun 2008 19:30:42 +0400 From: Oleg Nesterov To: Andrew Morton Cc: "Eric W. Biederman" , Ingo Molnar , Linus Torvalds , Roland McGrath , linux-kernel@vger.kernel.org Subject: [PATCH 1/3] introduce PF_KTHREAD flag Message-ID: <20080601153042.GA8238@tv-sign.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.11 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2932 Lines: 68 Introduce the new PF_KTHREAD flag to mark the kernel threads. It is set by INIT_TASK() and copied to the forked childs (we could set it in kthreadd() along with PF_NOFREEZE instead). daemonize() was changed as well. In that case testing of PF_KTHREAD is racy, but daemonize() is hopeless anyway. This flag is cleared in do_execve(), before search_binary_handler(). Probably not the best place, we can do this in exec_mmap() or in start_thread(), or clear it along with PF_FORKNOEXEC. But I think this doesn't matter in practice, and if do_execve() fails kthread should die soon. Signed-off-by: Oleg Nesterov include/linux/sched.h | 1 + include/linux/init_task.h | 2 +- kernel/exit.c | 2 +- fs/exec.c | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) --- 26-rc2/include/linux/sched.h~2_MAKE_PF_KTHREAD 2008-05-18 15:44:16.000000000 +0400 +++ 26-rc2/include/linux/sched.h 2008-05-18 20:08:13.000000000 +0400 @@ -1508,6 +1508,7 @@ static inline void put_task_struct(struc #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ +#define PF_KTHREAD 0x80000000 /* I am a kernel thread */ /* * Only the _current_ task can read/write to tsk->flags, but other --- 26-rc2/include/linux/init_task.h~2_MAKE_PF_KTHREAD 2008-05-18 15:44:15.000000000 +0400 +++ 26-rc2/include/linux/init_task.h 2008-05-18 20:14:30.000000000 +0400 @@ -143,7 +143,7 @@ extern struct group_info init_groups; .state = 0, \ .stack = &init_thread_info, \ .usage = ATOMIC_INIT(2), \ - .flags = 0, \ + .flags = PF_KTHREAD, \ .lock_depth = -1, \ .prio = MAX_PRIO-20, \ .static_prio = MAX_PRIO-20, \ --- 26-rc2/kernel/exit.c~2_MAKE_PF_KTHREAD 2008-05-18 15:44:18.000000000 +0400 +++ 26-rc2/kernel/exit.c 2008-05-18 18:11:13.000000000 +0400 @@ -416,7 +416,7 @@ void daemonize(const char *name, ...) * We don't want to have TIF_FREEZE set if the system-wide hibernation * or suspend transition begins right now. */ - current->flags |= PF_NOFREEZE; + current->flags |= (PF_NOFREEZE | PF_KTHREAD); if (current->nsproxy != &init_nsproxy) { get_nsproxy(&init_nsproxy); --- 26-rc2/fs/exec.c~2_MAKE_PF_KTHREAD 2008-05-18 15:44:00.000000000 +0400 +++ 26-rc2/fs/exec.c 2008-05-18 18:36:30.000000000 +0400 @@ -1317,6 +1317,7 @@ int do_execve(char * filename, if (retval < 0) goto out; + current->flags &= ~PF_KTHREAD; retval = search_binary_handler(bprm,regs); if (retval >= 0) { /* execve success */ -- 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/