[PATCH 2/2] UBUNTU: SAUCE: trace: add trace events for open(), exec() and uselib()
Andy Whitcroft
apw at canonical.com
Thu Oct 29 11:00:05 UTC 2009
On Tue, Oct 27, 2009 at 10:05:32AM +0000, Scott James Remnant wrote:
> 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 at ubuntu.com>
> ---
> fs/exec.c | 8 +++++
> fs/open.c | 4 ++
> include/trace/events/fs.h | 71 +++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 83 insertions(+), 0 deletions(-)
> create mode 100644 include/trace/events/fs.h
>
> diff --git a/fs/exec.c b/fs/exec.c
> index 172ceb6..c936999 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -56,6 +56,8 @@
> #include <linux/fsnotify.h>
> #include <linux/fs_struct.h>
>
> +#include <trace/events/fs.h>
> +
> #include <asm/uaccess.h>
> #include <asm/mmu_context.h>
> #include <asm/tlb.h>
> @@ -130,6 +132,10 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
>
> fsnotify_open(file->f_path.dentry);
>
> + tmp = getname(library);
> + trace_uselib(tmp);
> + putname(library);
> +
So the other two tracepoints look basically sane and cheap when off.
This one does add this getname/putname pair. This appears to allocate
another copy of the filename and copy it from userspace.
getname() may fail to allocate memory and return a failure code, as the
trace point does not appear to check the string is valid would you not
need to check ERR_PTR(tmp) before calling the tracepint.
Can we not just hold the current filename a smidge longer and use that one,
that would be a lot less expensive me thinks if slightly more complex as
a patch. This would make sure we could log it if we did it and avoid
the cost?
-apw
More information about the kernel-team
mailing list