]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
UBUNTU: SAUCE: (no-up) trace: add trace events for open(), exec() and uselib() (for...
authorScott James Remnant <scott@ubuntu.com>
Tue, 27 Oct 2009 10:05:32 +0000 (10:05 +0000)
committerTim Gardner <tim.gardner@canonical.com>
Mon, 20 Feb 2017 03:57:58 +0000 (20:57 -0700)
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.

[apw@canonical.com: updated for v3.7 and later.]
[apw@canonical.com: updated for v3.19 and later.]
BugLink: http://bugs.launchpad.net/bugs/1085766
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>
Conflicts:

fs/open.c

Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
fs/exec.c
fs/open.c
include/trace/events/fs.h [new file with mode: 0644]

index e579466107335bf4b704863469a4162c8c335adb..90c123bb0eef8f0d5cfc63acf5eb3662d13e00ea 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -58,6 +58,8 @@
 #include <linux/compat.h>
 #include <linux/vmalloc.h>
 
+#include <trace/events/fs.h>
+
 #include <linux/uaccess.h>
 #include <asm/mmu_context.h>
 #include <asm/tlb.h>
@@ -838,6 +840,8 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
        if (name->name[0] != '\0')
                fsnotify_open(file);
 
+       trace_open_exec(name->name);
+
 out:
        return file;
 
index 9921f70bc5ca07dab62d19ff9fded8d4a60ae9f0..4e95042984ce2afc5d7a59a578ef79ede602ca14 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -34,6 +34,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)
 {
@@ -1057,6 +1060,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->name, flags, mode);
                }
        }
        putname(tmp);
diff --git a/include/trace/events/fs.h b/include/trace/events/fs.h
new file mode 100644 (file)
index 0000000..fb634b7
--- /dev/null
@@ -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(const 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(const 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>