Re: [PATCH v3 16/18] rtla/trace: Fix I/O handling in save_trace_to_file()

From: Tomas Glozar

Date: Wed Mar 04 2026 - 05:31:01 EST


čt 15. 1. 2026 v 18:29 odesílatel Wander Lairson Costa
<wander@xxxxxxxxxx> napsal:
> diff --git a/tools/tracing/rtla/src/trace.c b/tools/tracing/rtla/src/trace.c
> index fed3362527b08..8e93b48d33ef8 100644
> --- a/tools/tracing/rtla/src/trace.c
> +++ b/tools/tracing/rtla/src/trace.c
> @@ -73,6 +73,7 @@ int save_trace_to_file(struct tracefs_instance *inst, const char *filename)
> char buffer[4096];
> int out_fd, in_fd;
> int retval = -1;
> + ssize_t n_read;
>
> if (!inst || !filename)
> return 0;
> @@ -90,15 +91,30 @@ int save_trace_to_file(struct tracefs_instance *inst, const char *filename)
> goto out_close_in;
> }
>
> - do {
> - retval = read(in_fd, buffer, sizeof(buffer));
> - if (retval <= 0)
> + for (;;) {
> + n_read = read(in_fd, buffer, sizeof(buffer));
> + if (n_read < 0) {
> + if (errno == EINTR)
> + continue;
> + err_msg("Error reading trace file: %s\n", strerror(errno));
> goto out_close;
> + }
> + if (n_read == 0)
> + break;
>
> - retval = write(out_fd, buffer, retval);
> - if (retval < 0)
> - goto out_close;
> - } while (retval > 0);
> + ssize_t n_written = 0;

Why break the style of declaring all variables at the beginning of the
function? n_read, added in the same commit, keeps the style.

This also applies to the previous patch.

Tomas