linux/samples/tracepoints/tracepoint-probe-sample.c
<<
>>
Prefs
   1/*
   2 * tracepoint-probe-sample.c
   3 *
   4 * sample tracepoint probes.
   5 */
   6
   7#include <linux/module.h>
   8#include <linux/file.h>
   9#include <linux/dcache.h>
  10#include "tp-samples-trace.h"
  11
  12/*
  13 * Here the caller only guarantees locking for struct file and struct inode.
  14 * Locking must therefore be done in the probe to use the dentry.
  15 */
  16static void probe_subsys_event(void *ignore,
  17                               struct inode *inode, struct file *file)
  18{
  19        path_get(&file->f_path);
  20        dget(file->f_path.dentry);
  21        printk(KERN_INFO "Event is encountered with filename %s\n",
  22                file->f_path.dentry->d_name.name);
  23        dput(file->f_path.dentry);
  24        path_put(&file->f_path);
  25}
  26
  27static void probe_subsys_eventb(void *ignore)
  28{
  29        printk(KERN_INFO "Event B is encountered\n");
  30}
  31
  32static int __init tp_sample_trace_init(void)
  33{
  34        int ret;
  35
  36        ret = register_trace_subsys_event(probe_subsys_event, NULL);
  37        WARN_ON(ret);
  38        ret = register_trace_subsys_eventb(probe_subsys_eventb, NULL);
  39        WARN_ON(ret);
  40
  41        return 0;
  42}
  43
  44module_init(tp_sample_trace_init);
  45
  46static void __exit tp_sample_trace_exit(void)
  47{
  48        unregister_trace_subsys_eventb(probe_subsys_eventb, NULL);
  49        unregister_trace_subsys_event(probe_subsys_event, NULL);
  50        tracepoint_synchronize_unregister();
  51}
  52
  53module_exit(tp_sample_trace_exit);
  54
  55MODULE_LICENSE("GPL");
  56MODULE_AUTHOR("Mathieu Desnoyers");
  57MODULE_DESCRIPTION("Tracepoint Probes Samples");
  58