X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt-probes.c;h=81dcbd715df08300b6bcfd9973418f853544e8d0;hb=f7bdf4db0b992946342dc845c7369e9cdca46559;hp=e1ed2a3108d591a795f371affecbc1c7421294cb;hpb=271b66812595fb4be4ce1cb2b8277d97b13d795e;p=lttng-modules.git diff --git a/ltt-probes.c b/ltt-probes.c index e1ed2a31..81dcbd71 100644 --- a/ltt-probes.c +++ b/ltt-probes.c @@ -4,6 +4,8 @@ * Copyright 2010 (c) - Mathieu Desnoyers * * Holds LTTng probes registry. + * + * Dual LGPL v2.1/GPL v2 license. */ #include @@ -24,8 +26,8 @@ const struct lttng_event_desc *find_event(const char *name) list_for_each_entry(probe_desc, &probe_list, head) { for (i = 0; i < probe_desc->nr_events; i++) { - if (!strcmp(probe_desc->event_desc[i].name, name)) - return &probe_desc->event_desc[i]; + if (!strcmp(probe_desc->event_desc[i]->name, name)) + return probe_desc->event_desc[i]; } } return NULL; @@ -42,7 +44,7 @@ int ltt_probe_register(struct lttng_probe_desc *desc) * overhead becomes an issue. */ for (i = 0; i < desc->nr_events; i++) { - if (find_event(desc->event_desc[i].name)) { + if (find_event(desc->event_desc[i]->name)) { ret = -EEXIST; goto end; } @@ -90,10 +92,11 @@ void *tp_list_start(struct seq_file *m, loff_t *pos) struct lttng_probe_desc *probe_desc; int iter = 0, i; + mutex_lock(&probe_mutex); list_for_each_entry(probe_desc, &probe_list, head) { for (i = 0; i < probe_desc->nr_events; i++) { if (iter++ >= *pos) - return (void *) &probe_desc->event_desc[i]; + return (void *) probe_desc->event_desc[i]; } } /* End of list */ @@ -110,7 +113,7 @@ void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos) list_for_each_entry(probe_desc, &probe_list, head) { for (i = 0; i < probe_desc->nr_events; i++) { if (iter++ >= *ppos) - return (void *) &probe_desc->event_desc[i]; + return (void *) probe_desc->event_desc[i]; } } /* End of list */ @@ -120,6 +123,7 @@ void *tp_list_next(struct seq_file *m, void *p, loff_t *ppos) static void tp_list_stop(struct seq_file *m, void *p) { + mutex_unlock(&probe_mutex); } static @@ -127,6 +131,11 @@ int tp_list_show(struct seq_file *m, void *p) { const struct lttng_event_desc *probe_desc = p; + /* + * Don't export lttng internal events (metadata). + */ + if (!strncmp(probe_desc->name, "lttng_", sizeof("lttng_") - 1)) + return 0; seq_printf(m, "event { name = %s; };\n", probe_desc->name); return 0; @@ -147,8 +156,9 @@ int lttng_tracepoint_list_open(struct inode *inode, struct file *file) } const struct file_operations lttng_tracepoint_list_fops = { + .owner = THIS_MODULE, .open = lttng_tracepoint_list_open, .read = seq_read, .llseek = seq_lseek, - .release = seq_release_private, + .release = seq_release, };