mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jaewon Jung <jaewon8868@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: stable@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-trace-kernel@vger.kernel.org
Subject: [PATCH] tracing: Keep copying markers when one instance is stopped
Date: Sat, 31 Oct 2026 16:35:45 +0900	[thread overview]
Message-ID: <20261031073549.2991066-1-jaewon8868@gmail.com> (raw)

When several instances enable copy_trace_marker, stopping one instance
can prevent the remaining buffers from receiving markers.

Continue copying text and raw markers even if one copy fails, and
return the last error after trying all buffers.

Fixes: 7b382efd5e8a ("tracing: Allow the top level trace_marker to write into another instances")
Cc: stable@vger.kernel.org
Signed-off-by: Jaewon Jung <jaewon8868@gmail.com>
---
The current code stops at the first error without trying the remaining
buffers. This patch tries all buffers even if a write fails, and returns
the last error.

Returning either the first or last error cannot report all failures.
I chose the last error to keep the code simple. Per-buffer error
reporting is outside the scope of this patch.

Please let me know if you prefer a different error return policy.

Tested on x86_64 QEMU:
- Setup: Enable copy_trace_marker in multiple instances and set
  tracing_on=0 in one instance before a live buffer in the copy order.
- Before: No markers in live buffers after the stopped instance;
  write() returns an error.
- After: Markers in all live buffers; write() returns an error.
- Existing text/raw marker and instance selftests: 6 PASS.

 kernel/trace/trace.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index e8c4efa8107b..bddcb35835be 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -6316,6 +6316,7 @@ tracing_mark_write(struct file *filp, const char __user *ubuf,
 {
 	struct trace_array *tr = filp->private_data;
 	ssize_t written = -ENODEV;
+	ssize_t error = 0;
 	unsigned long ip;
 	char *buf;
 
@@ -6346,14 +6347,13 @@ tracing_mark_write(struct file *filp, const char __user *ubuf,
 		guard(rcu)();
 		list_for_each_entry_rcu(tr, &marker_copies, marker_list) {
 			written = write_marker_to_buffer(tr, buf, cnt, ip);
-			if (written < 0)
-				break;
+			error = written < 0 ? written : error;
 		}
 	} else {
 		written = write_marker_to_buffer(tr, buf, cnt, ip);
 	}
 
-	return written;
+	return error ? error : written;
 }
 
 static ssize_t write_raw_marker_to_buffer(struct trace_array *tr,
@@ -6397,6 +6397,7 @@ tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
 {
 	struct trace_array *tr = filp->private_data;
 	ssize_t written = -ENODEV;
+	ssize_t error = 0;
 	char *buf;
 
 	if (unlikely(tracing_disabled))
@@ -6425,14 +6426,13 @@ tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
 		guard(rcu)();
 		list_for_each_entry_rcu(tr, &marker_copies, marker_list) {
 			written = write_raw_marker_to_buffer(tr, buf, cnt);
-			if (written < 0)
-				break;
+			error = written < 0 ? written : error;
 		}
 	} else {
 		written = write_raw_marker_to_buffer(tr, buf, cnt);
 	}
 
-	return written;
+	return error ? error : written;
 }
 
 static int tracing_mark_open(struct inode *inode, struct file *filp)

base-commit: c339f4010dea8b0d754f84ace70cd1b089878ef8
-- 
2.43.0


                 reply	other threads:[~2026-10-31  7:35 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261031073549.2991066-1-jaewon8868@gmail.com \
    --to=jaewon8868@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®