blob: 49509533d3faab32355d7a3de8ec0fd00c7595d9 [file] [log] [blame]
Mohan Srinivasan25cc70f2016-12-14 16:39:51 -08001#undef TRACE_SYSTEM
2#define TRACE_SYSTEM android_fs
3
4#if !defined(_TRACE_ANDROID_FS_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_ANDROID_FS_H
6
7#include <linux/tracepoint.h>
8#include <trace/events/android_fs_template.h>
9
10DEFINE_EVENT(android_fs_data_start_template, android_fs_dataread_start,
11 TP_PROTO(struct inode *inode, loff_t offset, int bytes,
Mohan Srinivasan009e6082017-02-10 14:26:23 -080012 pid_t pid, char *pathname, char *command),
13 TP_ARGS(inode, offset, bytes, pid, pathname, command));
Mohan Srinivasan25cc70f2016-12-14 16:39:51 -080014
15DEFINE_EVENT(android_fs_data_end_template, android_fs_dataread_end,
16 TP_PROTO(struct inode *inode, loff_t offset, int bytes),
17 TP_ARGS(inode, offset, bytes));
18
19DEFINE_EVENT(android_fs_data_start_template, android_fs_datawrite_start,
20 TP_PROTO(struct inode *inode, loff_t offset, int bytes,
Mohan Srinivasan009e6082017-02-10 14:26:23 -080021 pid_t pid, char *pathname, char *command),
22 TP_ARGS(inode, offset, bytes, pid, pathname, command));
Mohan Srinivasan25cc70f2016-12-14 16:39:51 -080023
24DEFINE_EVENT(android_fs_data_end_template, android_fs_datawrite_end,
25 TP_PROTO(struct inode *inode, loff_t offset, int bytes),
Mohan Srinivasan009e6082017-02-10 14:26:23 -080026 TP_ARGS(inode, offset, bytes));
Mohan Srinivasan25cc70f2016-12-14 16:39:51 -080027
28#endif /* _TRACE_ANDROID_FS_H */
29
30/* This part must be outside protection */
31#include <trace/define_trace.h>
Mohan Srinivasan009e6082017-02-10 14:26:23 -080032
33#ifndef ANDROID_FSTRACE_GET_PATHNAME
34#define ANDROID_FSTRACE_GET_PATHNAME
35
36/* Sizes an on-stack array, so careful if sizing this up ! */
37#define MAX_TRACE_PATHBUF_LEN 256
38
39static inline char *
40android_fstrace_get_pathname(char *buf, int buflen, struct inode *inode)
41{
42 char *path;
43 struct dentry *d;
44
45 /*
46 * d_obtain_alias() will either iput() if it locates an existing
47 * dentry or transfer the reference to the new dentry created.
48 * So get an extra reference here.
49 */
50 ihold(inode);
51 d = d_obtain_alias(inode);
52 if (likely(!IS_ERR(d))) {
53 path = dentry_path_raw(d, buf, buflen);
54 if (unlikely(IS_ERR(path))) {
55 strcpy(buf, "ERROR");
56 path = buf;
57 }
58 dput(d);
59 } else {
60 strcpy(buf, "ERROR");
61 path = buf;
62 }
63 return path;
64}
65#endif