[lttng-dev] [RFC PATCH lttng-tools stable-2.11/master] Fix: reintroduce lazy kernel modules load, fix empty syscall list
Jérémie Galarneau
jeremie.galarneau at efficios.com
Thu Sep 5 17:02:54 EDT 2019
Merged in master and stable-2.11.
Thanks!
Jérémie
On Thu, May 23, 2019 at 03:11:50PM -0400, Mathieu Desnoyers wrote:
> Up and including to lttng 2.10, if the lttng-modules are not available
> when the session daemon starts, an attempt is made to load them each
> time a command try to interact with the kernel domain.
>
> 2.11-rc introduces a change in behavior which removes this lazy
> initialization. This is an issue for distribution packaging (e.g.
> Ubuntu) where there is no strong dependency between lttng-tools and
> lttng-modules (because either is optional). So we can be unlucky and
> find ourselves in a situation where the modules are not available when
> the session daemon is launched at installation, but only afterwards.
>
> Re-introduce the lazy kernel module load behavior, since this is
> expected by users.
>
> Also, fix an issue with empty syscall list in those lazy initialization
> scenario by moving invocation of syscall_init_table() from main() to
> init_kernel_tracer().
>
> While we are there, cleanup the following in session daemon:
>
> - move kernel_tracer_fd from globals.c to kernel.c. It becomes a static
> variable,
> - move module_proc_lttng from main.c to kernel.c,
> - move init_kernel_tracer() from main.c to kernel.c,
> - introduce kernel.c:cleanup_kernel_tracer(), invoke it from program
> cleanup,
> - introduce kernel_tracer_is_initialized() to check the state of
> kernel tracer initialization,
> - adapt kernel.c functions to use the static kernel_tracer_fd rather
> than expect it as parameter,
> - update syscall_init_table, invoked from kernel.c, to pass the
> kernel_tracer_fd as parameter.
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> ---
> src/bin/lttng-sessiond/client.c | 11 +-
> src/bin/lttng-sessiond/cmd.c | 24 ++--
> src/bin/lttng-sessiond/globals.c | 1 -
> src/bin/lttng-sessiond/kernel.c | 136 +++++++++++++++++++--
> src/bin/lttng-sessiond/kernel.h | 14 ++-
> src/bin/lttng-sessiond/lttng-sessiond.h | 1 -
> src/bin/lttng-sessiond/lttng-syscall.c | 4 +-
> src/bin/lttng-sessiond/lttng-syscall.h | 2 +-
> src/bin/lttng-sessiond/main.c | 98 +--------------
> .../lttng-sessiond/notification-thread-events.c | 3 +-
> 10 files changed, 160 insertions(+), 134 deletions(-)
>
> diff --git a/src/bin/lttng-sessiond/client.c b/src/bin/lttng-sessiond/client.c
> index 4565a18c..dda778d8 100644
> --- a/src/bin/lttng-sessiond/client.c
> +++ b/src/bin/lttng-sessiond/client.c
> @@ -478,7 +478,7 @@ static int create_kernel_session(struct ltt_session *session)
>
> DBG("Creating kernel session");
>
> - ret = kernel_create_session(session, kernel_tracer_fd);
> + ret = kernel_create_session(session);
> if (ret < 0) {
> ret = LTTNG_ERR_KERN_SESS_FAIL;
> goto error_create;
> @@ -877,6 +877,15 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock,
> goto error;
> }
>
> + /* Kernel tracer check */
> + if (!kernel_tracer_is_initialized()) {
> + /* Basically, load kernel tracer modules */
> + ret = init_kernel_tracer();
> + if (ret != 0) {
> + goto error;
> + }
> + }
> +
> /* Consumer is in an ERROR state. Report back to client */
> if (uatomic_read(&kernel_consumerd_state) == CONSUMER_ERROR) {
> ret = LTTNG_ERR_NO_KERNCONSUMERD;
> diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
> index 01efcaf0..39985f79 100644
> --- a/src/bin/lttng-sessiond/cmd.c
> +++ b/src/bin/lttng-sessiond/cmd.c
> @@ -1210,7 +1210,7 @@ error:
> /*
> * Start a kernel session by opening all necessary streams.
> */
> -static int start_kernel_session(struct ltt_kernel_session *ksess, int wpipe)
> +static int start_kernel_session(struct ltt_kernel_session *ksess)
> {
> int ret;
> struct ltt_kernel_channel *kchan;
> @@ -1262,7 +1262,7 @@ static int start_kernel_session(struct ltt_kernel_session *ksess, int wpipe)
> }
>
> /* Quiescent wait after starting trace */
> - kernel_wait_quiescent(wpipe);
> + kernel_wait_quiescent();
>
> ksess->active = 1;
>
> @@ -1294,7 +1294,7 @@ int cmd_disable_channel(struct ltt_session *session,
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -1352,7 +1352,7 @@ int cmd_track_pid(struct ltt_session *session, enum lttng_domain_type domain,
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -1403,7 +1403,7 @@ int cmd_untrack_pid(struct ltt_session *session, enum lttng_domain_type domain,
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -1483,7 +1483,7 @@ int cmd_enable_channel(struct ltt_session *session,
> switch (domain->type) {
> case LTTNG_DOMAIN_KERNEL:
> {
> - if (kernel_supports_ring_buffer_snapshot_sample_positions(kernel_tracer_fd) != 1) {
> + if (kernel_supports_ring_buffer_snapshot_sample_positions() != 1) {
> /* Sampling position of buffer is not supported */
> WARN("Kernel tracer does not support buffer monitoring. "
> "Setting the monitor interval timer to 0 "
> @@ -1534,7 +1534,7 @@ int cmd_enable_channel(struct ltt_session *session,
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -1669,7 +1669,7 @@ int cmd_disable_event(struct ltt_session *session,
> goto error_unlock;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -2119,7 +2119,7 @@ static int _cmd_enable_event(struct ltt_session *session,
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
> break;
> }
> case LTTNG_DOMAIN_UST:
> @@ -2387,7 +2387,7 @@ ssize_t cmd_list_tracepoints(enum lttng_domain_type domain,
>
> switch (domain) {
> case LTTNG_DOMAIN_KERNEL:
> - nb_events = kernel_list_events(kernel_tracer_fd, events);
> + nb_events = kernel_list_events(events);
> if (nb_events < 0) {
> ret = LTTNG_ERR_KERN_LIST_FAIL;
> goto error;
> @@ -2671,7 +2671,7 @@ int cmd_start_trace(struct ltt_session *session)
> /* Kernel tracing */
> if (ksession != NULL) {
> DBG("Start kernel tracing session %s", session->name);
> - ret = start_kernel_session(ksession, kernel_tracer_fd);
> + ret = start_kernel_session(ksession);
> if (ret != LTTNG_OK) {
> goto error;
> }
> @@ -2746,7 +2746,7 @@ int cmd_stop_trace(struct ltt_session *session)
> goto error;
> }
>
> - kernel_wait_quiescent(kernel_tracer_fd);
> + kernel_wait_quiescent();
>
> /* Flush metadata after stopping (if exists) */
> if (ksession->metadata_stream_fd >= 0) {
> diff --git a/src/bin/lttng-sessiond/globals.c b/src/bin/lttng-sessiond/globals.c
> index efe80baa..c829d1fd 100644
> --- a/src/bin/lttng-sessiond/globals.c
> +++ b/src/bin/lttng-sessiond/globals.c
> @@ -30,7 +30,6 @@ struct notification_thread_handle *notification_thread_handle;
>
> struct lttng_ht *agent_apps_ht_by_sock = NULL;
>
> -int kernel_tracer_fd = -1;
> struct lttng_kernel_tracer_version kernel_tracer_version;
> struct lttng_kernel_tracer_abi_version kernel_tracer_abi_version;
>
> diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c
> index b4fc995c..975655de 100644
> --- a/src/bin/lttng-sessiond/kernel.c
> +++ b/src/bin/lttng-sessiond/kernel.c
> @@ -22,18 +22,22 @@
> #include <string.h>
> #include <unistd.h>
> #include <inttypes.h>
> +#include <sys/types.h>
>
> #include <common/common.h>
> #include <common/kernel-ctl/kernel-ctl.h>
> #include <common/kernel-ctl/kernel-ioctl.h>
> #include <common/sessiond-comm/sessiond-comm.h>
>
> +#include "lttng-sessiond.h"
> +#include "lttng-syscall.h"
> #include "consumer.h"
> #include "kernel.h"
> #include "kernel-consumer.h"
> #include "kern-modules.h"
> #include "utils.h"
> #include "rotate.h"
> +#include "modprobe.h"
>
> /*
> * Key used to reference a channel between the sessiond and the consumer. This
> @@ -41,6 +45,10 @@
> */
> static uint64_t next_kernel_channel_key;
>
> +static const char *module_proc_lttng = "/proc/lttng";
> +
> +static int kernel_tracer_fd = -1;
> +
> #include <lttng/userspace-probe.h>
> #include <lttng/userspace-probe-internal.h>
> /*
> @@ -91,7 +99,7 @@ error:
> * Create a new kernel session, register it to the kernel tracer and add it to
> * the session daemon session.
> */
> -int kernel_create_session(struct ltt_session *session, int tracer_fd)
> +int kernel_create_session(struct ltt_session *session)
> {
> int ret;
> struct ltt_kernel_session *lks;
> @@ -106,7 +114,7 @@ int kernel_create_session(struct ltt_session *session, int tracer_fd)
> }
>
> /* Kernel tracer session creation */
> - ret = kernctl_create_session(tracer_fd);
> + ret = kernctl_create_session(kernel_tracer_fd);
> if (ret < 0) {
> PERROR("ioctl kernel create session");
> goto error;
> @@ -834,9 +842,10 @@ error:
> /*
> * Make a kernel wait to make sure in-flight probe have completed.
> */
> -void kernel_wait_quiescent(int fd)
> +void kernel_wait_quiescent(void)
> {
> int ret;
> + int fd = kernel_tracer_fd;
>
> DBG("Kernel quiescent wait on %d", fd);
>
> @@ -995,7 +1004,7 @@ error:
> /*
> * Get the event list from the kernel tracer and return the number of elements.
> */
> -ssize_t kernel_list_events(int tracer_fd, struct lttng_event **events)
> +ssize_t kernel_list_events(struct lttng_event **events)
> {
> int fd, ret;
> char *event;
> @@ -1005,7 +1014,7 @@ ssize_t kernel_list_events(int tracer_fd, struct lttng_event **events)
>
> assert(events);
>
> - fd = kernctl_tracepoint_list(tracer_fd);
> + fd = kernctl_tracepoint_list(kernel_tracer_fd);
> if (fd < 0) {
> PERROR("kernel tracepoint list");
> goto error;
> @@ -1079,13 +1088,12 @@ error:
> /*
> * Get kernel version and validate it.
> */
> -int kernel_validate_version(int tracer_fd,
> - struct lttng_kernel_tracer_version *version,
> +int kernel_validate_version(struct lttng_kernel_tracer_version *version,
> struct lttng_kernel_tracer_abi_version *abi_version)
> {
> int ret;
>
> - ret = kernctl_tracer_version(tracer_fd, version);
> + ret = kernctl_tracer_version(kernel_tracer_fd, version);
> if (ret < 0) {
> ERR("Failed to retrieve the lttng-modules version");
> goto error;
> @@ -1097,7 +1105,7 @@ int kernel_validate_version(int tracer_fd,
> version->major, VERSION_MAJOR);
> goto error_version;
> }
> - ret = kernctl_tracer_abi_version(tracer_fd, abi_version);
> + ret = kernctl_tracer_abi_version(kernel_tracer_fd, abi_version);
> if (ret < 0) {
> ERR("Failed to retrieve lttng-modules ABI version");
> goto error;
> @@ -1372,12 +1380,12 @@ int kernel_syscall_mask(int chan_fd, char **syscall_mask, uint32_t *nr_bits)
> * Return 1 on success, 0 when feature is not supported, negative value in case
> * of errors.
> */
> -int kernel_supports_ring_buffer_snapshot_sample_positions(int tracer_fd)
> +int kernel_supports_ring_buffer_snapshot_sample_positions(void)
> {
> int ret = 0; // Not supported by default
> struct lttng_kernel_tracer_abi_version abi;
>
> - ret = kernctl_tracer_abi_version(tracer_fd, &abi);
> + ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi);
> if (ret < 0) {
> ERR("Failed to retrieve lttng-modules ABI version");
> goto error;
> @@ -1459,3 +1467,109 @@ error:
> rcu_read_unlock();
> return status;
> }
> +
> +/*
> + * Setup necessary data for kernel tracer action.
> + */
> +LTTNG_HIDDEN
> +int init_kernel_tracer(void)
> +{
> + int ret;
> + bool is_root = !getuid();
> +
> + /* Modprobe lttng kernel modules */
> + ret = modprobe_lttng_control();
> + if (ret < 0) {
> + goto error;
> + }
> +
> + /* Open debugfs lttng */
> + kernel_tracer_fd = open(module_proc_lttng, O_RDWR);
> + if (kernel_tracer_fd < 0) {
> + DBG("Failed to open %s", module_proc_lttng);
> + goto error_open;
> + }
> +
> + /* Validate kernel version */
> + ret = kernel_validate_version(&kernel_tracer_version,
> + &kernel_tracer_abi_version);
> + if (ret < 0) {
> + goto error_version;
> + }
> +
> + ret = modprobe_lttng_data();
> + if (ret < 0) {
> + goto error_modules;
> + }
> +
> + ret = kernel_supports_ring_buffer_snapshot_sample_positions();
> + if (ret < 0) {
> + goto error_modules;
> + }
> +
> + if (ret < 1) {
> + WARN("Kernel tracer does not support buffer monitoring. "
> + "The monitoring timer of channels in the kernel domain "
> + "will be set to 0 (disabled).");
> + }
> +
> + DBG("Kernel tracer fd %d", kernel_tracer_fd);
> +
> + ret = syscall_init_table(kernel_tracer_fd);
> + if (ret < 0) {
> + ERR("Unable to populate syscall table. Syscall tracing won't "
> + "work for this session daemon.");
> + }
> + return 0;
> +
> +error_version:
> + modprobe_remove_lttng_control();
> + ret = close(kernel_tracer_fd);
> + if (ret) {
> + PERROR("close");
> + }
> + kernel_tracer_fd = -1;
> + return LTTNG_ERR_KERN_VERSION;
> +
> +error_modules:
> + ret = close(kernel_tracer_fd);
> + if (ret) {
> + PERROR("close");
> + }
> +
> +error_open:
> + modprobe_remove_lttng_control();
> +
> +error:
> + WARN("No kernel tracer available");
> + kernel_tracer_fd = -1;
> + if (!is_root) {
> + return LTTNG_ERR_NEED_ROOT_SESSIOND;
> + } else {
> + return LTTNG_ERR_KERN_NA;
> + }
> +}
> +
> +LTTNG_HIDDEN
> +void cleanup_kernel_tracer(void)
> +{
> + int ret;
> +
> + DBG2("Closing kernel fd");
> + if (kernel_tracer_fd >= 0) {
> + ret = close(kernel_tracer_fd);
> + if (ret) {
> + PERROR("close");
> + }
> + kernel_tracer_fd = -1;
> + }
> + DBG("Unloading kernel modules");
> + modprobe_remove_lttng_all();
> + free(syscall_table);
> +}
> +
> +LTTNG_HIDDEN
> +bool kernel_tracer_is_initialized(void)
> +{
> + return kernel_tracer_fd >= 0;
> +}
> diff --git a/src/bin/lttng-sessiond/kernel.h b/src/bin/lttng-sessiond/kernel.h
> index 9b0c15cd..462f16b4 100644
> --- a/src/bin/lttng-sessiond/kernel.h
> +++ b/src/bin/lttng-sessiond/kernel.h
> @@ -34,7 +34,7 @@
>
> int kernel_add_channel_context(struct ltt_kernel_channel *chan,
> struct ltt_kernel_context *ctx);
> -int kernel_create_session(struct ltt_session *session, int tracer_fd);
> +int kernel_create_session(struct ltt_session *session);
> int kernel_create_channel(struct ltt_kernel_session *session,
> struct lttng_channel *chan);
> int kernel_create_event(struct lttng_event *ev, struct ltt_kernel_channel *channel,
> @@ -52,10 +52,9 @@ int kernel_flush_buffer(struct ltt_kernel_channel *channel);
> int kernel_metadata_flush_buffer(int fd);
> int kernel_start_session(struct ltt_kernel_session *session);
> int kernel_stop_session(struct ltt_kernel_session *session);
> -ssize_t kernel_list_events(int tracer_fd, struct lttng_event **event_list);
> -void kernel_wait_quiescent(int fd);
> -int kernel_validate_version(int tracer_fd,
> - struct lttng_kernel_tracer_version *kernel_tracer_version,
> +ssize_t kernel_list_events(struct lttng_event **event_list);
> +void kernel_wait_quiescent(void);
> +int kernel_validate_version(struct lttng_kernel_tracer_version *kernel_tracer_version,
> struct lttng_kernel_tracer_abi_version *kernel_tracer_abi_version);
> void kernel_destroy_session(struct ltt_kernel_session *ksess);
> void kernel_destroy_channel(struct ltt_kernel_channel *kchan);
> @@ -68,6 +67,9 @@ enum lttng_error_code kernel_rotate_session(struct ltt_session *session);
> int init_kernel_workarounds(void);
> ssize_t kernel_list_tracker_pids(struct ltt_kernel_session *session,
> int **_pids);
> -int kernel_supports_ring_buffer_snapshot_sample_positions(int tracer_fd);
> +int kernel_supports_ring_buffer_snapshot_sample_positions(void);
> +int init_kernel_tracer(void);
> +void cleanup_kernel_tracer(void);
> +bool kernel_tracer_is_initialized(void);
>
> #endif /* _LTT_KERNEL_CTL_H */
> diff --git a/src/bin/lttng-sessiond/lttng-sessiond.h b/src/bin/lttng-sessiond/lttng-sessiond.h
> index d321fced..2647c0e9 100644
> --- a/src/bin/lttng-sessiond/lttng-sessiond.h
> +++ b/src/bin/lttng-sessiond/lttng-sessiond.h
> @@ -71,7 +71,6 @@ extern const char default_home_dir[],
> default_global_apps_pipe[];
>
> /* Set in main.c at boot time of the daemon */
> -extern int kernel_tracer_fd;
> extern struct lttng_kernel_tracer_version kernel_tracer_version;
> extern struct lttng_kernel_tracer_abi_version kernel_tracer_abi_version;
>
> diff --git a/src/bin/lttng-sessiond/lttng-syscall.c b/src/bin/lttng-sessiond/lttng-syscall.c
> index 9a45a8af..50b1133d 100644
> --- a/src/bin/lttng-sessiond/lttng-syscall.c
> +++ b/src/bin/lttng-sessiond/lttng-syscall.c
> @@ -39,7 +39,7 @@ static size_t syscall_table_nb_entry;
> * Return 0 on success and the syscall table is allocated. On error, a negative
> * value is returned.
> */
> -int syscall_init_table(void)
> +int syscall_init_table(int tracer_fd)
> {
> int ret, fd, err;
> size_t nbmem;
> @@ -52,7 +52,7 @@ int syscall_init_table(void)
>
> DBG3("Syscall init system call table");
>
> - fd = kernctl_syscall_list(kernel_tracer_fd);
> + fd = kernctl_syscall_list(tracer_fd);
> if (fd < 0) {
> ret = fd;
> PERROR("kernelctl syscall list");
> diff --git a/src/bin/lttng-sessiond/lttng-syscall.h b/src/bin/lttng-sessiond/lttng-syscall.h
> index a2708619..50da7cc7 100644
> --- a/src/bin/lttng-sessiond/lttng-syscall.h
> +++ b/src/bin/lttng-sessiond/lttng-syscall.h
> @@ -51,7 +51,7 @@ struct syscall {
> extern struct syscall *syscall_table;
>
> /* Use to list kernel system calls. */
> -int syscall_init_table(void);
> +int syscall_init_table(int tracer_fd);
> ssize_t syscall_table_list(struct lttng_event **events);
>
> #endif /* LTTNG_SYSCALL_H */
> diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
> index 57324820..ad9bb0cb 100644
> --- a/src/bin/lttng-sessiond/main.c
> +++ b/src/bin/lttng-sessiond/main.c
> @@ -61,7 +61,6 @@
> #include "event.h"
> #include "kernel.h"
> #include "kernel-consumer.h"
> -#include "modprobe.h"
> #include "shm.h"
> #include "ust-ctl.h"
> #include "ust-consumer.h"
> @@ -75,7 +74,6 @@
> #include "notification-thread.h"
> #include "notification-thread-commands.h"
> #include "rotation-thread.h"
> -#include "lttng-syscall.h"
> #include "agent.h"
> #include "ht-cleanup.h"
> #include "sessiond-config.h"
> @@ -155,8 +153,6 @@ static int apps_cmd_notify_pipe[2] = { -1, -1 };
> */
> static struct ust_cmd_queue ust_cmd_queue;
>
> -static const char *module_proc_lttng = "/proc/lttng";
> -
> /*
> * Section name to look for in the daemon configuration file.
> */
> @@ -339,16 +335,7 @@ static void sessiond_cleanup(void)
> buffer_reg_destroy_registries();
>
> if (is_root && !config.no_kernel) {
> - DBG2("Closing kernel fd");
> - if (kernel_tracer_fd >= 0) {
> - ret = close(kernel_tracer_fd);
> - if (ret) {
> - PERROR("close");
> - }
> - }
> - DBG("Unloading kernel modules");
> - modprobe_remove_lttng_all();
> - free(syscall_table);
> + cleanup_kernel_tracer();
> }
>
> close_consumer_sockets();
> @@ -372,81 +359,6 @@ static void sessiond_cleanup_options(void)
> run_as_destroy_worker();
> }
>
> -/*
> - * Setup necessary data for kernel tracer action.
> - */
> -static int init_kernel_tracer(void)
> -{
> - int ret;
> -
> - /* Modprobe lttng kernel modules */
> - ret = modprobe_lttng_control();
> - if (ret < 0) {
> - goto error;
> - }
> -
> - /* Open debugfs lttng */
> - kernel_tracer_fd = open(module_proc_lttng, O_RDWR);
> - if (kernel_tracer_fd < 0) {
> - DBG("Failed to open %s", module_proc_lttng);
> - goto error_open;
> - }
> -
> - /* Validate kernel version */
> - ret = kernel_validate_version(kernel_tracer_fd, &kernel_tracer_version,
> - &kernel_tracer_abi_version);
> - if (ret < 0) {
> - goto error_version;
> - }
> -
> - ret = modprobe_lttng_data();
> - if (ret < 0) {
> - goto error_modules;
> - }
> -
> - ret = kernel_supports_ring_buffer_snapshot_sample_positions(
> - kernel_tracer_fd);
> - if (ret < 0) {
> - goto error_modules;
> - }
> -
> - if (ret < 1) {
> - WARN("Kernel tracer does not support buffer monitoring. "
> - "The monitoring timer of channels in the kernel domain "
> - "will be set to 0 (disabled).");
> - }
> -
> - DBG("Kernel tracer fd %d", kernel_tracer_fd);
> - return 0;
> -
> -error_version:
> - modprobe_remove_lttng_control();
> - ret = close(kernel_tracer_fd);
> - if (ret) {
> - PERROR("close");
> - }
> - kernel_tracer_fd = -1;
> - return LTTNG_ERR_KERN_VERSION;
> -
> -error_modules:
> - ret = close(kernel_tracer_fd);
> - if (ret) {
> - PERROR("close");
> - }
> -
> -error_open:
> - modprobe_remove_lttng_control();
> -
> -error:
> - WARN("No kernel tracer available");
> - kernel_tracer_fd = -1;
> - if (!is_root) {
> - return LTTNG_ERR_NEED_ROOT_SESSIOND;
> - } else {
> - return LTTNG_ERR_KERN_NA;
> - }
> -}
> -
> static int string_match(const char *str1, const char *str2)
> {
> return (str1 && str2) && !strcmp(str1, str2);
> @@ -1633,14 +1545,6 @@ int main(int argc, char **argv)
> /* Setup kernel tracer */
> if (!config.no_kernel) {
> init_kernel_tracer();
> - if (kernel_tracer_fd >= 0) {
> - ret = syscall_init_table();
> - if (ret < 0) {
> - ERR("Unable to populate syscall table. "
> - "Syscall tracing won't work "
> - "for this session daemon.");
> - }
> - }
> }
>
> /* Set ulimit for open files */
> diff --git a/src/bin/lttng-sessiond/notification-thread-events.c b/src/bin/lttng-sessiond/notification-thread-events.c
> index 052689a0..bdbac0c4 100644
> --- a/src/bin/lttng-sessiond/notification-thread-events.c
> +++ b/src/bin/lttng-sessiond/notification-thread-events.c
> @@ -1860,8 +1860,7 @@ int condition_is_supported(struct lttng_condition *condition)
> * buffers. Therefore, we reject triggers that require that
> * mechanism to be available to be evaluated.
> */
> - ret = kernel_supports_ring_buffer_snapshot_sample_positions(
> - kernel_tracer_fd);
> + ret = kernel_supports_ring_buffer_snapshot_sample_positions();
> break;
> }
> default:
> --
> 2.11.0
>
More information about the lttng-dev
mailing list