Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1822431ybt; Thu, 2 Jul 2020 15:02:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzSr28NOO1Za52yWy8y7o8mwvmOF/uAcG7E/uyWx4q+//Qbkkz4muZSMpCnopcGUinzh+n1 X-Received: by 2002:a17:906:c04d:: with SMTP id bm13mr21062962ejb.321.1593727358090; Thu, 02 Jul 2020 15:02:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593727358; cv=none; d=google.com; s=arc-20160816; b=Ex7/ItwAqW7kSwNtnlNGlQpxgxGZjVKlT+1y5YrSikspRX6tvV/TYQ96Js9dCs1HLy wIWEYd6hLjsx8N8QggGFnFsegWjCFpjXrrK0L6v4jvahBKh+Qc+lRD7e//7tLVxDd5wE W4dzyKTL4/jvLz7NnCFqLR1jkIP7YzY5hQ5I+COEyQRZTEVrHQ046n1BpXnZHdYFAZ/a CQpKobfOKt0BJpIENi6tMNOUwYuu48+6LIEN9rBEPHQckFI/KMsqPR/SO8/50VqzCNyz +869j9RxdR1G0IxU8QMZjsC9ZzSVPzE7tJXoBJs7EMJyMWVbJBzpgq4TO+1Kh7YYKLTK X9Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:subject:cc:to :from:date:user-agent:message-id; bh=Fx1svUqQP8udOAFmWc1/hF9Rflei+UAxjZopeC73zHY=; b=gtLI0WkZQKpIpusCGv4qQz6O8lMCNMtg4gGn1Yl4yChYi9np0mPcrIWJzpHVwi+vzH +kAv33nAbCE6h4+HGcqRLX57VKkC/pOmCZrHW8F1t8gmdHHzuv4nxkWyblb/iOLaXjmy qdyvoHzmIk9ybPVg0aRKcojypm/XBoQwWHj2VOLqH6Xipnza9ebax8FGR1M6Gtt7C5qi d0c+bezkNcib6PVIVL8NPz2YjxybrxNWNc5WxxQ3ZGw0eyxHQlo/bIDERsmtcJsiZM5s fDtSezHh9WklZB9uVO/7JEdPWrpm10at95xpbaCZB/8ERS4+fsUJU1QzjFU8OPWJr7ol my3w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n7si6651977edv.74.2020.07.02.15.02.15; Thu, 02 Jul 2020 15:02:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726693AbgGBV7R (ORCPT + 99 others); Thu, 2 Jul 2020 17:59:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:52912 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726196AbgGBV6e (ORCPT ); Thu, 2 Jul 2020 17:58:34 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D243521973; Thu, 2 Jul 2020 21:58:33 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.93) (envelope-from ) id 1jr7E0-004BhV-TS; Thu, 02 Jul 2020 17:58:32 -0400 Message-ID: <20200702215832.784471709@goodmis.org> User-Agent: quilt/0.66 Date: Thu, 02 Jul 2020 17:58:21 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Ingo Molnar , Andrew Morton Subject: [for-next][PATCH 09/18] tracing: Move pipe reference to trace array instead of current_tracer References: <20200702215812.428188663@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Steven Rostedt (VMware)" If a process has the trace_pipe open on a trace_array, the current tracer for that trace array should not be changed. This was original enforced by a global lock, but when instances were introduced, it was moved to the current_trace. But this structure is shared by all instances, and a trace_pipe is for a single instance. There's no reason that a process that has trace_pipe open on one instance should prevent another instance from changing its current tracer. Move the reference counter to the trace_array instead. This is marked as "Fixes" but is more of a clean up than a true fix. Backport if you want, but its not critical. Fixes: cf6ab6d9143b1 ("tracing: Add ref count to tracer for when they are being read by pipe") Signed-off-by: Steven Rostedt (VMware) --- kernel/trace/trace.c | 12 ++++++------ kernel/trace/trace.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 8241d1448d70..64c5b8146cca 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5891,7 +5891,7 @@ int tracing_set_tracer(struct trace_array *tr, const char *buf) } /* If trace pipe files are being read, we can't change the tracer */ - if (tr->current_trace->ref) { + if (tr->trace_ref) { ret = -EBUSY; goto out; } @@ -6107,7 +6107,7 @@ static int tracing_open_pipe(struct inode *inode, struct file *filp) nonseekable_open(inode, filp); - tr->current_trace->ref++; + tr->trace_ref++; out: mutex_unlock(&trace_types_lock); return ret; @@ -6126,7 +6126,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file) mutex_lock(&trace_types_lock); - tr->current_trace->ref--; + tr->trace_ref--; if (iter->trace->pipe_close) iter->trace->pipe_close(iter); @@ -7428,7 +7428,7 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp) filp->private_data = info; - tr->current_trace->ref++; + tr->trace_ref++; mutex_unlock(&trace_types_lock); @@ -7529,7 +7529,7 @@ static int tracing_buffers_release(struct inode *inode, struct file *file) mutex_lock(&trace_types_lock); - iter->tr->current_trace->ref--; + iter->tr->trace_ref--; __trace_array_put(iter->tr); @@ -8737,7 +8737,7 @@ static int __remove_instance(struct trace_array *tr) int i; /* Reference counter for a newly created trace array = 1. */ - if (tr->ref > 1 || (tr->current_trace && tr->current_trace->ref)) + if (tr->ref > 1 || (tr->current_trace && tr->trace_ref)) return -EBUSY; list_del(&tr->list); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 13db4000af3f..f21607f87189 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -356,6 +356,7 @@ struct trace_array { struct trace_event_file *trace_marker_file; cpumask_var_t tracing_cpumask; /* only trace on set CPUs */ int ref; + int trace_ref; #ifdef CONFIG_FUNCTION_TRACER struct ftrace_ops *ops; struct trace_pid_list __rcu *function_pids; @@ -547,7 +548,6 @@ struct tracer { struct tracer *next; struct tracer_flags *flags; int enabled; - int ref; bool print_max; bool allow_instances; #ifdef CONFIG_TRACER_MAX_TRACE -- 2.26.2