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(struct inode *inode, struct file *file) 17{ 18 path_get(&file->f_path); 19 dget(file->f_path.dentry); 20 printk(KERN_INFO "Event is encountered with filename %s\n", 21 file->f_path.dentry->d_name.name); 22 dput(file->f_path.dentry); 23 path_put(&file->f_path); 24} 25 26static void probe_subsys_eventb(void) 27{ 28 printk(KERN_INFO "Event B is encountered\n"); 29} 30 31static int __init tp_sample_trace_init(void) 32{ 33 int ret; 34 35 ret = register_trace_subsys_event(probe_subsys_event); 36 WARN_ON(ret); 37 ret = register_trace_subsys_eventb(probe_subsys_eventb); 38 WARN_ON(ret); 39 40 return 0; 41} 42 43module_init(tp_sample_trace_init); 44 45static void __exit tp_sample_trace_exit(void) 46{ 47 unregister_trace_subsys_eventb(probe_subsys_eventb); 48 unregister_trace_subsys_event(probe_subsys_event); 49 tracepoint_synchronize_unregister(); 50} 51 52module_exit(tp_sample_trace_exit); 53 54MODULE_LICENSE("GPL"); 55MODULE_AUTHOR("Mathieu Desnoyers"); 56MODULE_DESCRIPTION("Tracepoint Probes Samples"); 57