X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fevent.c;h=5a6825e6ef8a7412ec679bbb9f0c67cb95b12e7b;hp=388e688e64e9a831ddd18664df572adca85ca150;hb=6bd8707a9f610a6214a90047781e52fdbb13fb48;hpb=d14d33bf091e72b23b1f90ea18a0a01bed098b76 diff --git a/src/bin/lttng-sessiond/event.c b/src/bin/lttng-sessiond/event.c index 388e688e6..5a6825e6e 100644 --- a/src/bin/lttng-sessiond/event.c +++ b/src/bin/lttng-sessiond/event.c @@ -134,10 +134,16 @@ int event_kernel_enable_tracepoint(struct ltt_kernel_session *ksession, if (kevent == NULL) { ret = kernel_create_event(event, kchan); if (ret < 0) { - if (ret == -EEXIST) { + switch (-ret) { + case EEXIST: ret = LTTCOMM_KERN_EVENT_EXIST; - } else { + break; + case ENOSYS: + ret = LTTCOMM_KERN_EVENT_ENOSYS; + break; + default: ret = LTTCOMM_KERN_ENABLE_FAIL; + break; } goto end; } @@ -147,7 +153,12 @@ int event_kernel_enable_tracepoint(struct ltt_kernel_session *ksession, ret = LTTCOMM_KERN_ENABLE_FAIL; goto end; } + } else { + /* At this point, the event is considered enabled */ + ret = LTTCOMM_KERN_EVENT_EXIST; + goto end; } + ret = LTTCOMM_OK; end: return ret; @@ -234,15 +245,26 @@ end: int event_kernel_enable_all(struct ltt_kernel_session *ksession, struct ltt_kernel_channel *kchan, int kernel_tracer_fd) { - int ret; + int tp_ret; - ret = event_kernel_enable_all_tracepoints(ksession, kchan, kernel_tracer_fd); - if (ret != LTTCOMM_OK) { + tp_ret = event_kernel_enable_all_tracepoints(ksession, kchan, kernel_tracer_fd); + if (tp_ret != LTTCOMM_OK) { goto end; } - ret = event_kernel_enable_all_syscalls(ksession, kchan, kernel_tracer_fd); + + /* + * Reaching this code path means that all tracepoints were enabled without + * errors so we ignore the error value of syscalls. + * + * At the moment, failing to enable syscalls on "lttng enable-event -a -k" + * is not considered an error that need to be returned to the client since + * tracepoints did not fail. Future work will allow us to send back + * multiple errors to the client in one API call. + */ + (void) event_kernel_enable_all_syscalls(ksession, kchan, kernel_tracer_fd); + end: - return ret; + return tp_ret; } /*