[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110812175550.GA7484@redhat.com>
Date: Fri, 12 Aug 2011 19:55:50 +0200
From: Oleg Nesterov <oleg@...hat.com>
To: Tejun Heo <tj@...nel.org>,
Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Roland McGrath <roland@...k.frob.com>,
Denys Vlasenko <dvlasenk@...hat.com>,
KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>,
Matt Fleming <matt.fleming@...ux.intel.com>,
linux-kernel@...r.kernel.org, Pavel Machek <pavel@....cz>
Subject: [PATCH v2 0/3] make vfork killable
Hi Tejun,
On 07/29, Tejun Heo wrote:
>
> If the current implementation is too nasty,
OK, I agree, the patches I sent doesn't look very clear/clean.
But,
> an alternative approach
> could be handling vfork waiting as a type of job control stop.
Well, I didn't see the code, but to be honest this doesn't look
like a good idea to me. Firstly, personally I do not think this
has something to do with the job control stop.
And, to me sys_restart_syscall() looks like the very natural
approach, and simple.
> * When entering get_signal_to_deliver(), if vfork child exists, save
> sigmask and block all blockable signals.
Oh, I'd like to avoid this. Why should we change get_signal_to_deliver()
paths to help vfork?
> * When leaving get_signal_to_deliver(), restore sigmask if saved on
> entry.
And I _think_ we need much more complications. We still need to
communicate with the child, for example. Unless we are going to
add the "struct completion vfork_done" or something into task_struct,
personally I dislike this idea.
> Haven't really thought a lot about the details so this might end up
> uglier than the current attempt. :)
I _hope_ it is much uglier, but I can be wrong of course ;)
OK. Can't we make the first step at least? Make it killable. I think
this will simplify the next changes anyway.
So. This seried makes vfork() killable. No restarts, just
s/wait_for_completion/wait_for_completion_killable/ + clear
child->vfork_done if killed.
The only overhead this patch adds to CLONE_VFORK
- parent does get_task_struct() + put_task_struct()
- child does task_lock() + task_unlock()
4/3 is off-topic, somehow I hate PF_STARTING irrationally. and it
helps to make the diffstat below better ;)
Oleg.
fs/exec.c | 18 +-------------
include/linux/sched.h | 1 -
kernel/fork.c | 61 +++++++++++++++++++++++++++++++-----------------
3 files changed, 41 insertions(+), 39 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists