assert(ev);
assert(channel);
+ /* We pass ownership of filter_expression and filter */
event = trace_kernel_create_event(ev, filter_expression,
filter);
if (event == NULL) {
int kernel_track_pid(struct ltt_kernel_session *session, int pid)
{
+ int ret;
+
DBG("Kernel track PID %d for session id %" PRIu64 ".",
pid, session->id);
- return kernctl_track_pid(session->fd, pid);
+ ret = kernctl_track_pid(session->fd, pid);
+ if (!ret) {
+ return LTTNG_OK;
+ }
+ switch (errno) {
+ case EINVAL:
+ return LTTNG_ERR_INVALID;
+ case ENOMEM:
+ return LTTNG_ERR_NOMEM;
+ case EEXIST:
+ return LTTNG_ERR_PID_TRACKED;
+ default:
+ return LTTNG_ERR_UNK;
+ }
}
int kernel_untrack_pid(struct ltt_kernel_session *session, int pid)
{
+ int ret;
+
DBG("Kernel untrack PID %d for session id %" PRIu64 ".",
pid, session->id);
- return kernctl_untrack_pid(session->fd, pid);
+ ret = kernctl_untrack_pid(session->fd, pid);
+ if (!ret) {
+ return LTTNG_OK;
+ }
+ switch (errno) {
+ case EINVAL:
+ return LTTNG_ERR_INVALID;
+ case ENOMEM:
+ return LTTNG_ERR_NOMEM;
+ case ENOENT:
+ return LTTNG_ERR_PID_NOT_TRACKED;
+ default:
+ return LTTNG_ERR_UNK;
+ }
}
ssize_t kernel_list_tracker_pids(struct ltt_kernel_session *session,
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;
}
}
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) {
- 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;
ret = -1;
error:
+ ERR("Kernel tracer version check failed; kernel tracing will not be available");
return ret;
}