Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753713Ab1EKRl7 (ORCPT ); Wed, 11 May 2011 13:41:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52688 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752172Ab1EKRl6 (ORCPT ); Wed, 11 May 2011 13:41:58 -0400 Date: Wed, 11 May 2011 18:49:47 +0200 From: Oleg Nesterov To: Tejun Heo Cc: jan.kratochvil@redhat.com, vda.linux@googlemail.com, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, akpm@linux-foundation.org, indan@nul.nu Subject: Re: [PATCH 10/11] ptrace: move JOBCTL_TRAPPING wait to wait(2) and ptrace_check_attach() Message-ID: <20110511164947.GA26383@redhat.com> References: <1304869745-1073-1-git-send-email-tj@kernel.org> <1304869745-1073-11-git-send-email-tj@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1304869745-1073-11-git-send-email-tj@kernel.org> User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1997 Lines: 57 On 05/08, Tejun Heo wrote: > > TRAPPING will also be used to implement end of group stop retrapping, > which can be initiated by tasks other than tracer. To allow this, I didn't read the next patch yet, so I can't undestand/comment the motivation. But, > this patch moves TRAPPING wait from attach completion path to > operations which are actually affected by the transition - wait(2) and > following ptrace(2) requests. You know, I'd wish I could find the serious bugs in this patch. The code becomes really hairy. -EAGAIN in do_wait() doesn't make it more simple ;) > Both wait and ptrace paths are updated to retry the operation after > TRAPPING wait. Note that wait_task_stopped() now always grabs siglock > for ptrace waits. This can be avoided with "task_stopped_code() -> > rmb() -> TRAPPING -> rmb() -> task_stopped_code()" sequence And so far I think this would be better, because it seems we can avoid the retry logic. First of all, this patch returns one of the user-visible and undesirable changes. The tracer know that the task is stopped, attaches, and then it can see the TASK_RUNNING tracee after ptrace(PTRACE_ATTACH) returns. I agree, this looks minor. But if we can tolerate this, probably we can tolerate another oddity: wait_task_stopped() can succeed and eat the stop code before the tracee actually stopps, no? IOW, ignoring mb's and read-ordering, suppose that we simply change task_stopped_code: if (ptrace) { - if (task_is_stopped_or_traced(p)) + if (task_is_traced(p) || JOBCTL_TRAPPING) return &p->exit_code; } else { As for ptrace_check_attach(), it can simply do wait_event(), we only need to verify the caller is the tracer. No need to play with lock/unlock/retry. What do you think? Oleg. -- 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/