X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Fkernel-ctl.c;h=9c270edb3325674be28ed3886c646b8267ba0022;hb=d87bfb32097dd9dddb5de2b05dd87b53e3d3ad73;hp=5c452ca924988e77694e0fc26ba3a242a8381886;hpb=050349bbb362ea993533591532643022efeab864;p=lttng-tools.git diff --git a/ltt-sessiond/kernel-ctl.c b/ltt-sessiond/kernel-ctl.c index 5c452ca92..9c270edb3 100644 --- a/ltt-sessiond/kernel-ctl.c +++ b/ltt-sessiond/kernel-ctl.c @@ -24,8 +24,9 @@ #include #include -#include "lttngerr.h" -#include "kernelctl.h" +#include +#include + #include "kernel-ctl.h" /* @@ -101,7 +102,7 @@ int kernel_create_session(struct ltt_session *session, int tracer_fd) struct ltt_kernel_session *lks; /* Allocate data structure */ - lks = trace_create_kernel_session(); + lks = trace_kernel_create_session(session->path); if (lks == NULL) { ret = -1; goto error; @@ -143,7 +144,7 @@ int kernel_create_channel(struct ltt_kernel_session *session, struct ltt_kernel_channel *lkc; /* Allocate kernel channel */ - lkc = trace_create_kernel_channel(chan, path); + lkc = trace_kernel_create_channel(chan, path); if (lkc == NULL) { goto error; } @@ -186,17 +187,30 @@ int kernel_create_event(struct lttng_event *ev, int ret; struct ltt_kernel_event *event; - event = trace_create_kernel_event(ev); + event = trace_kernel_create_event(ev); if (event == NULL) { + ret = -1; goto error; } ret = kernctl_create_event(channel->fd, event->event); if (ret < 0) { - perror("create event ioctl"); + if (errno != EEXIST) { + PERROR("create event ioctl"); + } + ret = -errno; goto free_event; } + /* + * LTTNG_KERNEL_SYSCALL event creation will return 0 on success. However + * this FD must not be added to the event list. + */ + if (ret == 0 && event->event->instrumentation == LTTNG_KERNEL_SYSCALL) { + DBG2("Kernel event syscall creation success"); + goto end; + } + event->fd = ret; /* Prevent fd duplication after execlp() */ ret = fcntl(event->fd, F_SETFD, FD_CLOEXEC); @@ -210,12 +224,13 @@ int kernel_create_event(struct lttng_event *ev, DBG("Event %s created (fd: %d)", ev->name, event->fd); +end: return 0; free_event: free(event); error: - return -1; + return ret; } /* @@ -249,9 +264,8 @@ int kernel_enable_channel(struct ltt_kernel_channel *chan) int ret; ret = kernctl_enable(chan->fd); - if (ret < 0) { - perror("enable chan ioctl"); - ret = errno; + if (ret < 0 && errno != EEXIST) { + perror("Enable kernel chan"); goto error; } @@ -272,11 +286,8 @@ int kernel_enable_event(struct ltt_kernel_event *event) int ret; ret = kernctl_enable(event->fd); - if (ret < 0) { - perror("enable event ioctl"); - if (errno == EEXIST) { - ret = -EEXIST; - } + if (ret < 0 && errno != EEXIST) { + perror("enable kernel event"); goto error; } @@ -297,8 +308,8 @@ int kernel_disable_event(struct ltt_kernel_event *event) int ret; ret = kernctl_disable(event->fd); - if (ret < 0) { - perror("disable event ioctl"); + if (ret < 0 && errno != EEXIST) { + perror("disable kernel event"); goto error; } @@ -321,7 +332,7 @@ int kernel_open_metadata(struct ltt_kernel_session *session, char *path) struct ltt_kernel_metadata *lkm; /* Allocate kernel metadata */ - lkm = trace_create_kernel_metadata(path); + lkm = trace_kernel_create_metadata(path); if (lkm == NULL) { goto error; } @@ -473,7 +484,7 @@ int kernel_open_channel_stream(struct ltt_kernel_channel *channel) struct ltt_kernel_stream *lks; while ((ret = kernctl_create_stream(channel->fd)) > 0) { - lks = trace_create_kernel_stream(); + lks = trace_kernel_create_stream(); if (lks == NULL) { close(ret); goto error;