projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clean-up: harmonize kernctl API error checking
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
kernel.c
diff --git
a/src/bin/lttng-sessiond/kernel.c
b/src/bin/lttng-sessiond/kernel.c
index 2cad0b2ab44b8bdd8ece486521e62f6654677e4d..ae8349c897ded12d90bfc2d018ba1994e1822f63 100644
(file)
--- a/
src/bin/lttng-sessiond/kernel.c
+++ b/
src/bin/lttng-sessiond/kernel.c
@@
-16,7
+16,6
@@
*/
#define _LGPL_SOURCE
*/
#define _LGPL_SOURCE
-#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
@@
-49,17
+48,24
@@
int kernel_add_channel_context(struct ltt_kernel_channel *chan,
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, &ctx->ctx);
if (ret < 0) {
DBG("Adding context to channel %s", chan->channel->name);
ret = kernctl_add_context(chan->fd, &ctx->ctx);
if (ret < 0) {
- if (errno != EEXIST) {
- PERROR("add context ioctl");
- } else {
+ switch (-ret) {
+ case ENOSYS:
+ /* Exists but not available for this kernel */
+ ret = LTTNG_ERR_KERN_CONTEXT_UNAVAILABLE;
+ goto error;
+ case EEXIST:
/* If EEXIST, we just ignore the error */
ret = 0;
/* If EEXIST, we just ignore the error */
ret = 0;
+ goto end;
+ default:
+ PERROR("add context ioctl");
+ ret = LTTNG_ERR_KERN_CONTEXT_FAIL;
+ goto error;
}
}
- goto error;
}
}
+end:
cds_list_add_tail(&ctx->list, &chan->ctx_list);
cds_list_add_tail(&ctx->list, &chan->ctx_list);
-
return 0;
error:
return 0;
error:
@@
-196,7
+202,7
@@
int kernel_create_event(struct lttng_event *ev,
ret = kernctl_create_event(channel->fd, event->event);
if (ret < 0) {
ret = kernctl_create_event(channel->fd, event->event);
if (ret < 0) {
- switch (
errno
) {
+ switch (
-ret
) {
case EEXIST:
break;
case ENOSYS:
case EEXIST:
break;
case ENOSYS:
@@
-208,7
+214,6
@@
int kernel_create_event(struct lttng_event *ev,
default:
PERROR("create event ioctl");
}
default:
PERROR("create event ioctl");
}
- ret = -errno;
goto free_event;
}
goto free_event;
}
@@
-229,7
+234,7
@@
int kernel_create_event(struct lttng_event *ev,
ret = kernctl_enable(event->fd);
if (ret < 0) {
ret = kernctl_enable(event->fd);
if (ret < 0) {
- switch (
errno
) {
+ switch (
-ret
) {
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
@@
-276,7
+281,6
@@
int kernel_disable_channel(struct ltt_kernel_channel *chan)
ret = kernctl_disable(chan->fd);
if (ret < 0) {
PERROR("disable chan ioctl");
ret = kernctl_disable(chan->fd);
if (ret < 0) {
PERROR("disable chan ioctl");
- ret = errno;
goto error;
}
goto error;
}
@@
-299,7
+303,7
@@
int kernel_enable_channel(struct ltt_kernel_channel *chan)
assert(chan);
ret = kernctl_enable(chan->fd);
assert(chan);
ret = kernctl_enable(chan->fd);
- if (ret < 0 &&
errno !=
EEXIST) {
+ if (ret < 0 &&
ret != -
EEXIST) {
PERROR("Enable kernel chan");
goto error;
}
PERROR("Enable kernel chan");
goto error;
}
@@
-324,7
+328,7
@@
int kernel_enable_event(struct ltt_kernel_event *event)
ret = kernctl_enable(event->fd);
if (ret < 0) {
ret = kernctl_enable(event->fd);
if (ret < 0) {
- switch (
errno
) {
+ switch (
-ret
) {
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
@@
-355,7
+359,7
@@
int kernel_disable_event(struct ltt_kernel_event *event)
ret = kernctl_disable(event->fd);
if (ret < 0) {
ret = kernctl_disable(event->fd);
if (ret < 0) {
- switch (
errno
) {
+ switch (
-ret
) {
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
case EEXIST:
ret = LTTNG_ERR_KERN_EVENT_EXIST;
break;
@@
-386,7
+390,7
@@
int kernel_track_pid(struct ltt_kernel_session *session, int pid)
if (!ret) {
return LTTNG_OK;
}
if (!ret) {
return LTTNG_OK;
}
- switch (
errno
) {
+ switch (
-ret
) {
case EINVAL:
return LTTNG_ERR_INVALID;
case ENOMEM:
case EINVAL:
return LTTNG_ERR_INVALID;
case ENOMEM:
@@
-408,7
+412,7
@@
int kernel_untrack_pid(struct ltt_kernel_session *session, int pid)
if (!ret) {
return LTTNG_OK;
}
if (!ret) {
return LTTNG_OK;
}
- switch (
errno
) {
+ switch (
-ret
) {
case EINVAL:
return LTTNG_ERR_INVALID;
case ENOMEM:
case EINVAL:
return LTTNG_ERR_INVALID;
case ENOMEM:
@@
-829,7
+833,7
@@
int kernel_validate_version(int tracer_fd)
ret = kernctl_tracer_version(tracer_fd, &version);
if (ret < 0) {
ret = kernctl_tracer_version(tracer_fd, &version);
if (ret < 0) {
- ERR("Failed
at getting
the lttng-modules version");
+ ERR("Failed
to retrieve
the lttng-modules version");
goto error;
}
goto error;
}
@@
-841,11
+845,11
@@
int kernel_validate_version(int tracer_fd)
}
ret = kernctl_tracer_abi_version(tracer_fd, &abi_version);
if (ret < 0) {
}
ret = kernctl_tracer_abi_version(tracer_fd, &abi_version);
if (ret < 0) {
- ERR("Failed
at getting
lttng-modules ABI version");
+ ERR("Failed
to retrieve
lttng-modules ABI version");
goto error;
}
if (abi_version.major != LTTNG_MODULES_ABI_MAJOR_VERSION) {
goto error;
}
if (abi_version.major != LTTNG_MODULES_ABI_MAJOR_VERSION) {
- ERR("Kernel tracer ABI version (%d.%d)
is not compatible with
expected ABI major version (%d.*)",
+ ERR("Kernel tracer ABI version (%d.%d)
does not match the
expected ABI major version (%d.*)",
abi_version.major, abi_version.minor,
LTTNG_MODULES_ABI_MAJOR_VERSION);
goto error;
abi_version.major, abi_version.minor,
LTTNG_MODULES_ABI_MAJOR_VERSION);
goto error;
@@
-859,6
+863,7
@@
error_version:
ret = -1;
error:
ret = -1;
error:
+ ERR("Kernel tracer version check failed; kernel tracing will not be available");
return ret;
}
return ret;
}
This page took
0.03189 seconds
and
4
git commands to generate.