Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754047Ab3GBW2t (ORCPT ); Tue, 2 Jul 2013 18:28:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:63593 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752758Ab3GBW2s (ORCPT ); Tue, 2 Jul 2013 18:28:48 -0400 Date: Wed, 3 Jul 2013 00:23:59 +0200 From: Oleg Nesterov To: Steven Rostedt Cc: Masami Hiramatsu , "zhangwei(Jovi)" , Jiri Olsa , Peter Zijlstra , Arnaldo Carvalho de Melo , Srikar Dronamraju , Frederic Weisbecker , Ingo Molnar , linux-kernel@vger.kernel.org Subject: Re: PATCH? trace_remove_event_call() should fail if call is active Message-ID: <20130702222359.GA27629@redhat.com> References: <20130626185205.GA27894@redhat.com> <51CBEE3E.70103@hitachi.com> <20130627161716.GA17889@redhat.com> <51CCF8BA.4030601@hitachi.com> <20130628180946.GA30838@redhat.com> <51D16E1D.5040904@hitachi.com> <20130702190037.GA6289@redhat.com> <20130702193425.GA8813@redhat.com> <1372799087.22688.58.camel@gandalf.local.home> <20130702213808.GA24757@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20130702213808.GA24757@redhat.com> 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: 1400 Lines: 59 On 07/02, Oleg Nesterov wrote: > > So please ignore modules ;) Or lets discuss the change above. Oleg. --- x/kernel/trace/trace_events.c +++ x/kernel/trace/trace_events.c @@ -1611,14 +1611,40 @@ static void __trace_remove_event_call(st destroy_preds(call); } +static int event_can_remove(struct ftrace_event_call *call) +{ + struct trace_array *tr; + struct ftrace_event_file *file; + +#ifdef CONFIG_PERF_EVENTS + if (call->perf_refcount) + return -EBUSY; +#endif + do_for_each_event_file(tr, file) { + if (file->event_call != call) + continue; + if (file->flags & FTRACE_EVENT_FL_ENABLED) + return -EBUSY; + break; + } while_for_each_event_file(); + + return 0; +} + /* Remove an event_call */ -void trace_remove_event_call(struct ftrace_event_call *call) +int trace_remove_event_call(struct ftrace_event_call *call) { + int err; + mutex_lock(&event_mutex); down_write(&trace_event_sem); - __trace_remove_event_call(call); + err = event_can_remove(call); + if (!err) + __trace_remove_event_call(call); up_write(&trace_event_sem); mutex_unlock(&event_mutex); + + return err; } #define for_each_event(event, start, end) \ -- 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/