X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fkernel-ctl.c;h=e486fa10ada0002e8e2f7437ce677a0f24475ba6;hp=d088115f78380cddc15e1f038b1980ffa16ed4b1;hb=5f822d0a2688bb0b085b579dfc37a1958fff072e;hpb=62499ad6813a67ea23ef39bcfbbf21c40136442a diff --git a/ltt-sessiond/kernel-ctl.c b/ltt-sessiond/kernel-ctl.c index d088115f7..e486fa10a 100644 --- a/ltt-sessiond/kernel-ctl.c +++ b/ltt-sessiond/kernel-ctl.c @@ -102,7 +102,7 @@ int kernel_create_session(struct ltt_session *session, int tracer_fd) struct ltt_kernel_session *lks; /* Allocate data structure */ - lks = trace_kernel_create_session(); + lks = trace_kernel_create_session(session->path); if (lks == NULL) { ret = -1; goto error; @@ -194,10 +194,19 @@ int kernel_create_event(struct lttng_event *ev, ret = kernctl_create_event(channel->fd, event->event); if (ret < 0) { - perror("create event ioctl"); + PERROR("create event ioctl"); 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); @@ -211,6 +220,7 @@ int kernel_create_event(struct lttng_event *ev, DBG("Event %s created (fd: %d)", ev->name, event->fd); +end: return 0; free_event: @@ -250,9 +260,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; } @@ -273,11 +282,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; } @@ -298,8 +304,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; }