From: "Steven Rostedt (VMware)" <rostedt@xxxxxxxxxxx> Be consistent with the errno values on error for tracefs_tracer_set(). If a bad enum is passed in, then EINVAL should be set, not ENODEV. But if the tracer does not exist, then ENODEV should be set (even though the write will return EINVAL). Also fix the setting of errno to negative values. That's done in the kernel, not user space. Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> --- src/tracefs-tools.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/tracefs-tools.c b/src/tracefs-tools.c index fb243d8..6d5ddae 100644 --- a/src/tracefs-tools.c +++ b/src/tracefs-tools.c @@ -979,12 +979,12 @@ int tracefs_tracer_set(struct tracefs_instance *instance, fd = open(tracer_path, O_WRONLY); if (fd < 0) { - errno = -ENOENT; + errno = ENOENT; goto out; } if (tracer < 0 || tracer > ARRAY_SIZE(tracers)) { - errno = -ENODEV; + errno = EINVAL; goto out; } @@ -1005,10 +1005,16 @@ int tracefs_tracer_set(struct tracefs_instance *instance, } } if (!t) { - errno = -EINVAL; + errno = EINVAL; goto out; } ret = write_tracer(fd, t); + /* + * If the tracer does not exist, EINVAL is returned, + * but let the user know this as ENODEV. + */ + if (ret < 0 && errno == EINVAL) + errno = ENODEV; out: tracefs_put_tracing_file(tracer_path); close(fd); -- 2.30.2