]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tracing: Propagate errors from remote event bulk updates
authorJackie Liu <liuyun01@kylinos.cn>
Wed, 15 Jul 2026 07:44:55 +0000 (15:44 +0800)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 23 Jul 2026 16:30:07 +0000 (12:30 -0400)
remote_events_dir_enable_write() ignores the return value from
trace_remote_enable_event(). If a remote rejects an event state change,
the write therefore reports success even though the affected event remains
in its previous state.

Keep trying all events, but retain and return the first error. This matches
__ftrace_set_clr_event_nolock(), which permits partial updates while
notifying userspace when an operation fails.

Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260715074455.3897-1-liu.yun@linux.dev
Fixes: 775cb093bc50 ("tracing: Add events/ root files to trace remotes")
Assisted-by: Codex:gpt-5.6-sol
Signed-off-by: Jackie Liu <liuyun01@kylinos.cn>
Reviewed-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace_remote.c

index ef42d9c38b37486e7094c9e52cd35a91e3de7750..e6724f947170d9ffb75c189b9ce1a8cd696e0a52 100644 (file)
@@ -1149,10 +1149,21 @@ static ssize_t remote_events_dir_enable_write(struct file *filp, const char __us
 
        for (i = 0; i < remote->nr_events; i++) {
                struct remote_event *evt = &remote->events[i];
+               int eret;
 
-               trace_remote_enable_event(remote, evt, enable);
+               eret = trace_remote_enable_event(remote, evt, enable);
+               /*
+                * Save the first error and return that. Some events
+                * may still have been enabled, but let the user
+                * know that something went wrong.
+                */
+               if (!ret && eret)
+                       ret = eret;
        }
 
+       if (ret)
+               return ret;
+
        return count;
 }