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 */ probe_subsys_event(void * ignore,struct inode * inode,struct file * file)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 probe_subsys_eventb(void * ignore)27static void probe_subsys_eventb(void *ignore) 28 { 29 printk(KERN_INFO "Event B is encountered\n"); 30 } 31 tp_sample_trace_init(void)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 44 module_init(tp_sample_trace_init); 45 tp_sample_trace_exit(void)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 53 module_exit(tp_sample_trace_exit); 54 55 MODULE_LICENSE("GPL"); 56 MODULE_AUTHOR("Mathieu Desnoyers"); 57 MODULE_DESCRIPTION("Tracepoint Probes Samples"); 58