From patchwork Sat Sep 9 03:16:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 137838 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ab0a:0:b0:3f2:4152:657d with SMTP id m10csp1214791vqo; Sat, 9 Sep 2023 09:33:44 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFrhUAlrf3KsGzLwGIDKmeBNNTAPAShGO4GvRgOxlfWS1O5nmr74UZPbztnpXMwzAUUkVwg X-Received: by 2002:a05:6a20:12c9:b0:137:2f8c:fab0 with SMTP id v9-20020a056a2012c900b001372f8cfab0mr5938358pzg.49.1694277224340; Sat, 09 Sep 2023 09:33:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694277224; cv=none; d=google.com; s=arc-20160816; b=dhNs2avmM5RsoMB7CsrMTOZlV8eMjgv5boB8V4/h+kXDZVDc2LYttvmRizR9/mnG3h O1vJSw+w+pL8Ht4kHQWKyPdABGbOB9q4Vr424F5Sb7C6MunXZWgReQAyp6bI72sep3DG KRtGiiGPQnNgKsvO2dRWkfhvHh9hshIF91uo+Om/QYngafZa7Ox3lGK2z9GpGBDf1IdU 6P+19RKAC21DLMhS3DZbxm9pBXNd4VG0qdGYQT/FzHzC5Bf+f4Ox9iBRRggOAhVOicgj RFlceaWCxERD8RSWlvWxzvajCJLF05ULFR0xgJ31/YMkrsQ1hN3FsyzEHRiuIH1KOVya 411Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=uqXOTcmAMYPRiUpMNqmJ/VGTLecgAtqFs94RxBm245A=; fh=o5w5+FYJGnTo/Taa7kMlb/6znx3C9/xVe55J7MHbTmE=; b=QikL8QpKAu8caq64UHUEkQjhGfHEmZatUmD5hud4X9v5cer/CJqmrDWLwD8hW9PSv6 nd3qXBmaj70LMpsJNzKyWyvfkqMDSsTfp/hgaWnGRHl7xnqBw+hM24DYxBF6+sQ3Fs9X xrTxKTfs7Iq7ey3VN6Ot64Fe3uWNwLJTEBH3lyKsuBhwr//O3gTLM47Jgp9polAUJh66 3X6iFANfM/vgwMuW65vhFr/XIA2z4USzikXlOGmvyAZUHO10HG7iZCl3zQbK5yOcMiQ6 Rv39PaNP7l0FLxEP9mVyRGk6SntRFgYifPvG7Lihlx1YhvsogPtmJJlvHkDf9XMtRXbg 7rwg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ij7-20020a170902ab4700b001b8ae9058d3si3476007plb.516.2023.09.09.09.33.42; Sat, 09 Sep 2023 09:33:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236072AbjIIDXo (ORCPT + 11 others); Fri, 8 Sep 2023 23:23:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232609AbjIIDXg (ORCPT ); Fri, 8 Sep 2023 23:23:36 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB4B81FEB; Fri, 8 Sep 2023 20:23:30 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6FB39C433CC; Sat, 9 Sep 2023 03:23:30 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.96) (envelope-from ) id 1qeoZZ-000Yev-00; Fri, 08 Sep 2023 23:23:49 -0400 Message-ID: <20230909032348.812623350@goodmis.org> User-Agent: quilt/0.66 Date: Fri, 08 Sep 2023 23:16:19 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Andrew Morton , stable@vger.kernel.org, Linux Kernel Functional Testing , Naresh Kamboju , Zheng Yejian Subject: [for-linus][PATCH 04/15] tracing: Increase trace array ref count on enable and filter files References: <20230909031615.047488015@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776578434528818895 X-GMAIL-MSGID: 1776578434528818895 From: "Steven Rostedt (Google)" When the trace event enable and filter files are opened, increment the trace array ref counter, otherwise they can be accessed when the trace array is being deleted. The ref counter keeps the trace array from being deleted while those files are opened. Link: https://lkml.kernel.org/r/20230907024803.456187066@goodmis.org Link: https://lore.kernel.org/all/1cb3aee2-19af-c472-e265-05176fe9bd84@huawei.com/ Cc: stable@vger.kernel.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Andrew Morton Fixes: 8530dec63e7b4 ("tracing: Add tracing_check_open_get_tr()") Tested-by: Linux Kernel Functional Testing Tested-by: Naresh Kamboju Reported-by: Zheng Yejian Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 27 +++++++++++++++++++++++++++ kernel/trace/trace.h | 2 ++ kernel/trace/trace_events.c | 6 ++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 35783a7baf15..0827037ee3b8 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -4973,6 +4973,33 @@ int tracing_open_generic_tr(struct inode *inode, struct file *filp) return 0; } +/* + * The private pointer of the inode is the trace_event_file. + * Update the tr ref count associated to it. + */ +int tracing_open_file_tr(struct inode *inode, struct file *filp) +{ + struct trace_event_file *file = inode->i_private; + int ret; + + ret = tracing_check_open_get_tr(file->tr); + if (ret) + return ret; + + filp->private_data = inode->i_private; + + return 0; +} + +int tracing_release_file_tr(struct inode *inode, struct file *filp) +{ + struct trace_event_file *file = inode->i_private; + + trace_array_put(file->tr); + + return 0; +} + static int tracing_mark_open(struct inode *inode, struct file *filp) { stream_open(inode, filp); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 5669dd1f90d9..77debe53f07c 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -610,6 +610,8 @@ void tracing_reset_all_online_cpus(void); void tracing_reset_all_online_cpus_unlocked(void); int tracing_open_generic(struct inode *inode, struct file *filp); int tracing_open_generic_tr(struct inode *inode, struct file *filp); +int tracing_open_file_tr(struct inode *inode, struct file *filp); +int tracing_release_file_tr(struct inode *inode, struct file *filp); bool tracing_is_disabled(void); bool tracer_tracing_is_on(struct trace_array *tr); void tracer_tracing_on(struct trace_array *tr); diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index ed367d713be0..2af92177b765 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -2103,9 +2103,10 @@ static const struct file_operations ftrace_set_event_notrace_pid_fops = { }; static const struct file_operations ftrace_enable_fops = { - .open = tracing_open_generic, + .open = tracing_open_file_tr, .read = event_enable_read, .write = event_enable_write, + .release = tracing_release_file_tr, .llseek = default_llseek, }; @@ -2122,9 +2123,10 @@ static const struct file_operations ftrace_event_id_fops = { }; static const struct file_operations ftrace_event_filter_fops = { - .open = tracing_open_generic, + .open = tracing_open_file_tr, .read = event_filter_read, .write = event_filter_write, + .release = tracing_release_file_tr, .llseek = default_llseek, };