Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932646AbZKMXj0 (ORCPT ); Fri, 13 Nov 2009 18:39:26 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932571AbZKMXjZ (ORCPT ); Fri, 13 Nov 2009 18:39:25 -0500 Received: from mx1.redhat.com ([209.132.183.28]:60879 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932565AbZKMXjY (ORCPT ); Fri, 13 Nov 2009 18:39:24 -0500 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit From: Roland McGrath To: Masami Hiramatsu X-Fcc: ~/Mail/linus Cc: Ingo Molnar , lkml , systemtap , DLE Subject: Re: [PATCH -tip 2/3] Add coredump tracepoint In-Reply-To: Masami Hiramatsu's message of Friday, 13 November 2009 17:52:34 -0500 <20091113225233.15079.41600.stgit@harusame> References: <20091113225226.15079.90813.stgit@harusame> <20091113225233.15079.41600.stgit@harusame> X-Antipastobozoticataclysm: Bariumenemanilow Message-Id: <20091113233912.192A3100E@magilla.sf.frob.com> Date: Fri, 13 Nov 2009 15:39:12 -0800 (PST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2558 Lines: 82 I can't really see what this has to do with "sched" to warrant that name. But, whatever. Note that you put the tracepoint where it won't get called in the various cases where no dump is really being made because of RLIMIT_CORE or file failures. I suspect you would like to get those reported. (Perhaps especially so, since there won't be any file around to notice later.) Also, it seems nice to give the tracepoint the chance to look at the actual open file in case a fancy one wants to do that. e.g. diff --git a/fs/exec.c b/fs/exec.c index ba112bd..0000000 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1822,9 +1822,7 @@ void do_coredump(long signr, int exit_co ispipe = format_corename(corename, signr); unlock_kernel(); - if ((!ispipe) && (core_limit < binfmt->min_coredump)) - goto fail_unlock; - + file = NULL; if (ispipe) { if (core_limit == 0) { /* @@ -1845,7 +1843,7 @@ void do_coredump(long signr, int exit_co "Process %d(%s) has RLIMIT_CORE set to 0\n", task_tgid_vnr(current), current->comm); printk(KERN_WARNING "Aborting core\n"); - goto fail_unlock; + goto nopipe; } dump_count = atomic_inc_return(&core_dump_count); @@ -1853,14 +1851,14 @@ void do_coredump(long signr, int exit_co printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n", task_tgid_vnr(current), current->comm); printk(KERN_WARNING "Skipping core dump\n"); - goto fail_dropcount; + goto nopipe; } helper_argv = argv_split(GFP_KERNEL, corename+1, &helper_argc); if (!helper_argv) { printk(KERN_WARNING "%s failed to allocate memory\n", __func__); - goto fail_dropcount; + goto nopipe; } core_limit = RLIM_INFINITY; @@ -1870,13 +1868,19 @@ void do_coredump(long signr, int exit_co &file)) { printk(KERN_INFO "Core dump to %s pipe failed\n", corename); - goto fail_dropcount; + goto nopipe; } - } else + } else if (core_limit >= binfmt->min_coredump) { file = filp_open(corename, O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag, 0600); - if (IS_ERR(file)) + } + +nopipe: + trace_process_coredump((int) signr, core_limit, mm_flags, + corename, file); + + if (!file || IS_ERR(file)) goto fail_dropcount; inode = file->f_path.dentry->d_inode; if (inode->i_nlink > 1) -- 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/