From nobody Fri Dec 19 18:54:58 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45438303CA0 for ; Thu, 6 Nov 2025 21:03:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; cv=none; b=E+7t74wRsAOGQE3UPoa3peI03BRPFCZA8DJ5p883yw+bY/SBJ53IxM4NUx/DvyhsHJbqaMx2W1RrSPRfj+CcjOt2B2hq5bhPTp8BqSjHtys1ThmDIqOwl0wmuhJWRiV6Gnk+GA+IQGuvZEFPmuV872rLH7RIoqMVphxs4Co5KII= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=tJVTfvIahPAX1PxDS/vCqXJD0uo0I5JkC53Sw22Tl1Q=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=EGLUCwmfn9m9Cmqd/07Z5H9tS8MizOqsKY7NUaMysHf093TFn1DbefNZE2P4yZXVJX8pE0Vw5dFWlcOucugzfYUj73mLbiV/MFUBxAJCwLZX3Co+dl7mxkYjdUyEyRFlOdKtOd9MLZHa7Zxcx87adToT15+DIde4Y3sQWJ7JcEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bHZMFbAD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bHZMFbAD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2049BC116C6; Thu, 6 Nov 2025 21:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463038; bh=tJVTfvIahPAX1PxDS/vCqXJD0uo0I5JkC53Sw22Tl1Q=; h=Date:From:To:Cc:Subject:References:From; b=bHZMFbADskIWZrWLOWxe+rUPX2YIoi/AfJF55ev9WpZRnZHJ59mDWieIhw2K5CGpI NwnJKMddLqURIQ75lIKZIyK54hukWk+2z2VRY+VFn0xFY3msBYQpNnrtdsvfnnLehN Tv5nRYzyawXBmVNJHwtGpz7aAfL1C3hqs0hPu6hCNYwBrLhVHk6ml94UcEyASAp+Po iHH1iQjV5AVEvlYkgzzeYQZT8KHJqGVkjrRTAHU+kTMd8mk7Ro7by1cYlHosyftUdw vaFnPUVyIZWlORTkm2ttq38IsbbuaCfGegkqk/qh4qcEAFF0iUxLI2MTJqCAOoP77x 4vUxM5yEEmA9w== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008DK-3OAE; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.662018725@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:36 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 5/7] tracing: Have add_tracer_options() error pass up to callers References: <20251106210331.537317097@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt The function add_tracer_options() can fail, but currently it is ignored. Pass the status of add_tracer_options() up to adding a new tracer as well as when an instance is created. Have the instance creation fail if the add_tracer_options() fail. Only print a warning for the top level instance, like it does with other failures. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://patch.msgid.link/20251105161935.375299297@kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 55 +++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index afeaa9a164e9..ed929d331e1d 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2302,7 +2302,7 @@ static inline int do_run_tracer_selftest(struct trace= r *type) } #endif /* CONFIG_FTRACE_STARTUP_TEST */ =20 -static void add_tracer_options(struct trace_array *tr, struct tracer *t); +static int add_tracer_options(struct trace_array *tr, struct tracer *t); =20 static void __init apply_trace_boot_options(void); =20 @@ -2353,9 +2353,14 @@ int __init register_tracer(struct tracer *type) if (ret < 0) goto out; =20 + ret =3D add_tracer_options(&global_trace, type); + if (ret < 0) { + pr_warn("Failed to create tracer options for %s\n", type->name); + goto out; + } + type->next =3D trace_types; trace_types =3D type; - add_tracer_options(&global_trace, type); =20 out: mutex_unlock(&trace_types_lock); @@ -6221,7 +6226,7 @@ int tracing_update_buffers(struct trace_array *tr) =20 struct trace_option_dentry; =20 -static void +static int create_trace_option_files(struct trace_array *tr, struct tracer *tracer); =20 /* @@ -6243,17 +6248,17 @@ static void tracing_set_nop(struct trace_array *tr) =20 static bool tracer_options_updated; =20 -static void add_tracer_options(struct trace_array *tr, struct tracer *t) +static int add_tracer_options(struct trace_array *tr, struct tracer *t) { /* Only enable if the directory has been created already. */ if (!tr->dir && !(tr->flags & TRACE_ARRAY_FL_GLOBAL)) - return; + return 0; =20 /* Only create trace option files after update_tracer_options finish */ if (!tracer_options_updated) - return; + return 0; =20 - create_trace_option_files(tr, t); + return create_trace_option_files(tr, t); } =20 int tracing_set_tracer(struct trace_array *tr, const char *buf) @@ -9585,7 +9590,7 @@ create_trace_option_file(struct trace_array *tr, =20 } =20 -static void +static int create_trace_option_files(struct trace_array *tr, struct tracer *tracer) { struct trace_option_dentry *topts; @@ -9596,24 +9601,24 @@ create_trace_option_files(struct trace_array *tr, s= truct tracer *tracer) int i; =20 if (!tracer) - return; + return 0; =20 flags =3D tracer->flags; =20 if (!flags || !flags->opts) - return; + return 0; =20 /* * If this is an instance, only create flags for tracers * the instance may have. */ if (!trace_ok_for_array(tracer, tr)) - return; + return 0; =20 for (i =3D 0; i < tr->nr_topts; i++) { /* Make sure there's no duplicate flags. */ if (WARN_ON_ONCE(tr->topts[i].tracer->flags =3D=3D tracer->flags)) - return; + return -EINVAL; } =20 opts =3D flags->opts; @@ -9623,13 +9628,13 @@ create_trace_option_files(struct trace_array *tr, s= truct tracer *tracer) =20 topts =3D kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL); if (!topts) - return; + return 0; =20 tr_topts =3D krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), GFP_KERNEL); if (!tr_topts) { kfree(topts); - return; + return -ENOMEM; } =20 tr->topts =3D tr_topts; @@ -9644,6 +9649,7 @@ create_trace_option_files(struct trace_array *tr, str= uct tracer *tracer) "Failed to create trace option: %s", opts[cnt].name); } + return 0; } =20 static struct dentry * @@ -10094,15 +10100,18 @@ static void init_trace_flags_index(struct trace_a= rray *tr) tr->trace_flags_index[i] =3D i; } =20 -static void __update_tracer_options(struct trace_array *tr) +static int __update_tracer_options(struct trace_array *tr) { struct tracer *t; + int ret =3D 0; + + for (t =3D trace_types; t && !ret; t =3D t->next) + ret =3D add_tracer_options(tr, t); =20 - for (t =3D trace_types; t; t =3D t->next) - add_tracer_options(tr, t); + return ret; } =20 -static void update_tracer_options(struct trace_array *tr) +static __init void update_tracer_options(struct trace_array *tr) { guard(mutex)(&trace_types_lock); tracer_options_updated =3D true; @@ -10151,9 +10160,13 @@ static int trace_array_create_dir(struct trace_arr= ay *tr) } =20 init_tracer_tracefs(tr, tr->dir); - __update_tracer_options(tr); - - return ret; + ret =3D __update_tracer_options(tr); + if (ret) { + event_trace_del_tracer(tr); + tracefs_remove(tr->dir); + return ret; + } + return 0; } =20 static struct trace_array * --=20 2.51.0