Merge remote-tracking branch 'edac-amd/for-next'
[linux-2.6/next.git] / samples / tracepoints / tracepoint-probe-sample.c
blob744c0b9652a7815407b95ecbb8ca6553c5e900c0
1 /*
2 * tracepoint-probe-sample.c
4 * sample tracepoint probes.
5 */
7 #include <linux/module.h>
8 #include <linux/file.h>
9 #include <linux/dcache.h>
10 #include "tp-samples-trace.h"
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.
16 static void probe_subsys_event(void *ignore,
17 struct inode *inode, struct file *file)
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);
27 static void probe_subsys_eventb(void *ignore)
29 printk(KERN_INFO "Event B is encountered\n");
32 static int __init tp_sample_trace_init(void)
34 int ret;
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);
41 return 0;
44 module_init(tp_sample_trace_init);
46 static void __exit tp_sample_trace_exit(void)
48 unregister_trace_subsys_eventb(probe_subsys_eventb, NULL);
49 unregister_trace_subsys_event(probe_subsys_event, NULL);
50 tracepoint_synchronize_unregister();
53 module_exit(tp_sample_trace_exit);
55 MODULE_LICENSE("GPL");
56 MODULE_AUTHOR("Mathieu Desnoyers");
57 MODULE_DESCRIPTION("Tracepoint Probes Samples");