diff options
author | Scott James Remnant <scott@ubuntu.com> | 2009-10-27 10:05:32 +0000 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2012-06-20 14:33:36 -0600 |
commit | 4625bffccf8042dcd6e120519417e845a35b302c (patch) | |
tree | 49cbcc600116601b67dac7e54fc8393e865e59b2 | |
parent | e215dc095c477235d60c236b674ba67affb559b4 (diff) |
UBUNTU: SAUCE: (no-up) trace: add trace events for open(), exec() and uselib()
BugLink: http://bugs.launchpad.net/bugs/462111
This patch uses TRACE_EVENT to add tracepoints for the open(),
exec() and uselib() syscalls so that ureadahead can cheaply trace
the boot sequence to determine what to read to speed up the next.
It's not upstream because it will need to be rebased onto the syscall
trace events whenever that gets merged, and is a stop-gap.
Signed-off-by: Scott James Remnant <scott@ubuntu.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Andy Whitcroft <andy.whitcroft@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
-rw-r--r-- | fs/exec.c | 4 | ||||
-rw-r--r-- | fs/open.c | 4 | ||||
-rw-r--r-- | include/trace/events/fs.h | 53 |
3 files changed, 61 insertions, 0 deletions
diff --git a/fs/exec.c b/fs/exec.c index b1fd2025e59..364f659b728 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -56,6 +56,8 @@ #include <linux/oom.h> #include <linux/compat.h> +#include <trace/events/fs.h> + #include <asm/uaccess.h> #include <asm/mmu_context.h> #include <asm/tlb.h> @@ -785,6 +787,8 @@ struct file *open_exec(const char *name) fsnotify_open(file); + trace_open_exec(name); + err = deny_write_access(file); if (err) goto exit; diff --git a/fs/open.c b/fs/open.c index 5720854156d..18387ac166e 100644 --- a/fs/open.c +++ b/fs/open.c @@ -33,6 +33,9 @@ #include "internal.h" +#define CREATE_TRACE_POINTS +#include <trace/events/fs.h> + int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, struct file *filp) { @@ -987,6 +990,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) } else { fsnotify_open(f); fd_install(fd, f); + trace_do_sys_open(tmp, flags, mode); } } putname(tmp); diff --git a/include/trace/events/fs.h b/include/trace/events/fs.h new file mode 100644 index 00000000000..2cbb8fed1ae --- /dev/null +++ b/include/trace/events/fs.h @@ -0,0 +1,53 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fs + +#if !defined(_TRACE_FS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_FS_H + +#include <linux/fs.h> +#include <linux/tracepoint.h> + +TRACE_EVENT(do_sys_open, + + TP_PROTO(char *filename, int flags, int mode), + + TP_ARGS(filename, flags, mode), + + TP_STRUCT__entry( + __string( filename, filename ) + __field( int, flags ) + __field( int, mode ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + __entry->flags = flags; + __entry->mode = mode; + ), + + TP_printk("\"%s\" %x %o", + __get_str(filename), __entry->flags, __entry->mode) +); + +TRACE_EVENT(open_exec, + + TP_PROTO(char *filename), + + TP_ARGS(filename), + + TP_STRUCT__entry( + __string( filename, filename ) + ), + + TP_fast_assign( + __assign_str(filename, filename); + ), + + TP_printk("\"%s\"", + __get_str(filename)) +); + +#endif /* _TRACE_FS_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> |