lkml.org 
[lkml]   [2008]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 33/37] LTTng instrumentation fs
    Core filesystem events markers.

    Markers added :

    fs_buffer_wait_end
    fs_buffer_wait_start
    fs_close
    fs_exec
    fs_ioctl
    fs_llseek
    fs_lseek
    fs_open
    fs_pollfd
    fs_pread64
    fs_pwrite64
    fs_read
    fs_readv
    fs_select
    fs_write
    fs_writev

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    CC: Alexander Viro <viro@zeniv.linux.org.uk>
    ---
    fs/buffer.c | 3 +++
    fs/compat.c | 2 ++
    fs/exec.c | 2 ++
    fs/ioctl.c | 3 +++
    fs/open.c | 3 +++
    fs/read_write.c | 23 +++++++++++++++++++++--
    fs/select.c | 5 +++++
    7 files changed, 39 insertions(+), 2 deletions(-)

    Index: linux-2.6-sched-devel/fs/buffer.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/buffer.c 2008-04-22 20:04:10.000000000 -0400
    +++ linux-2.6-sched-devel/fs/buffer.c 2008-04-22 20:23:31.000000000 -0400
    @@ -41,6 +41,7 @@
    #include <linux/bitops.h>
    #include <linux/mpage.h>
    #include <linux/bit_spinlock.h>
    +#include <linux/marker.h>

    static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);

    @@ -89,7 +90,9 @@ void unlock_buffer(struct buffer_head *b
    */
    void __wait_on_buffer(struct buffer_head * bh)
    {
    + trace_mark(fs_buffer_wait_start, "bh %p", bh);
    wait_on_bit(&bh->b_state, BH_Lock, sync_buffer, TASK_UNINTERRUPTIBLE);
    + trace_mark(fs_buffer_wait_end, "bh %p", bh);
    }

    static void
    Index: linux-2.6-sched-devel/fs/compat.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/compat.c 2008-03-27 14:02:05.000000000 -0400
    +++ linux-2.6-sched-devel/fs/compat.c 2008-04-22 20:23:31.000000000 -0400
    @@ -50,6 +50,7 @@
    #include <linux/poll.h>
    #include <linux/mm.h>
    #include <linux/eventpoll.h>
    +#include <linux/marker.h>

    #include <asm/uaccess.h>
    #include <asm/mmu_context.h>
    @@ -1401,6 +1402,7 @@ int compat_do_execve(char * filename,

    retval = search_binary_handler(bprm, regs);
    if (retval >= 0) {
    + trace_mark(fs_exec, "filename %s", filename);
    /* execve success */
    security_bprm_free(bprm);
    acct_update_integrals(current);
    Index: linux-2.6-sched-devel/fs/ioctl.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/ioctl.c 2008-03-27 14:02:05.000000000 -0400
    +++ linux-2.6-sched-devel/fs/ioctl.c 2008-04-22 20:23:31.000000000 -0400
    @@ -13,6 +13,7 @@
    #include <linux/security.h>
    #include <linux/module.h>
    #include <linux/uaccess.h>
    +#include <linux/marker.h>

    #include <asm/ioctls.h>

    @@ -201,6 +202,8 @@ asmlinkage long sys_ioctl(unsigned int f
    if (!filp)
    goto out;

    + trace_mark(fs_ioctl, "fd %u cmd %u arg %lu", fd, cmd, arg);
    +
    error = security_file_ioctl(filp, cmd, arg);
    if (error)
    goto out_fput;
    Index: linux-2.6-sched-devel/fs/open.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/open.c 2008-04-22 20:04:11.000000000 -0400
    +++ linux-2.6-sched-devel/fs/open.c 2008-04-22 20:23:31.000000000 -0400
    @@ -27,6 +27,7 @@
    #include <linux/rcupdate.h>
    #include <linux/audit.h>
    #include <linux/falloc.h>
    +#include <linux/marker.h>

    int vfs_statfs(struct dentry *dentry, struct kstatfs *buf)
    {
    @@ -1089,6 +1090,7 @@ long do_sys_open(int dfd, const char __u
    fsnotify_open(f->f_path.dentry);
    fd_install(fd, f);
    }
    + trace_mark(fs_open, "fd %d filename %s", fd, tmp);
    }
    putname(tmp);
    }
    @@ -1178,6 +1180,7 @@ asmlinkage long sys_close(unsigned int f
    filp = fdt->fd[fd];
    if (!filp)
    goto out_unlock;
    + trace_mark(fs_close, "fd %u", fd);
    rcu_assign_pointer(fdt->fd[fd], NULL);
    FD_CLR(fd, fdt->close_on_exec);
    __put_unused_fd(files, fd);
    Index: linux-2.6-sched-devel/fs/read_write.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/read_write.c 2008-03-27 14:02:06.000000000 -0400
    +++ linux-2.6-sched-devel/fs/read_write.c 2008-04-22 20:23:31.000000000 -0400
    @@ -16,6 +16,7 @@
    #include <linux/syscalls.h>
    #include <linux/pagemap.h>
    #include <linux/splice.h>
    +#include <linux/marker.h>
    #include "read_write.h"

    #include <asm/uaccess.h>
    @@ -146,6 +147,9 @@ asmlinkage off_t sys_lseek(unsigned int
    if (res != (loff_t)retval)
    retval = -EOVERFLOW; /* LFS: should only happen on 32 bit platforms */
    }
    +
    + trace_mark(fs_lseek, "fd %u offset %ld origin %u", fd, offset, origin);
    +
    fput_light(file, fput_needed);
    bad:
    return retval;
    @@ -173,6 +177,10 @@ asmlinkage long sys_llseek(unsigned int
    offset = vfs_llseek(file, ((loff_t) offset_high << 32) | offset_low,
    origin);

    + trace_mark(fs_llseek, "fd %u offset %llu origin %u", fd,
    + (unsigned long long)offset,
    + origin);
    +
    retval = (int)offset;
    if (offset >= 0) {
    retval = -EFAULT;
    @@ -359,6 +367,7 @@ asmlinkage ssize_t sys_read(unsigned int
    file = fget_light(fd, &fput_needed);
    if (file) {
    loff_t pos = file_pos_read(file);
    + trace_mark(fs_read, "fd %u count %zu", fd, count);
    ret = vfs_read(file, buf, count, &pos);
    file_pos_write(file, pos);
    fput_light(file, fput_needed);
    @@ -376,6 +385,7 @@ asmlinkage ssize_t sys_write(unsigned in
    file = fget_light(fd, &fput_needed);
    if (file) {
    loff_t pos = file_pos_read(file);
    + trace_mark(fs_write, "fd %u count %zu", fd, count);
    ret = vfs_write(file, buf, count, &pos);
    file_pos_write(file, pos);
    fput_light(file, fput_needed);
    @@ -397,8 +407,12 @@ asmlinkage ssize_t sys_pread64(unsigned
    file = fget_light(fd, &fput_needed);
    if (file) {
    ret = -ESPIPE;
    - if (file->f_mode & FMODE_PREAD)
    + if (file->f_mode & FMODE_PREAD) {
    + trace_mark(fs_pread64, "fd %u count %zu pos %llu",
    + fd, count, (unsigned long long)pos);
    ret = vfs_read(file, buf, count, &pos);
    + }
    +
    fput_light(file, fput_needed);
    }

    @@ -418,8 +432,11 @@ asmlinkage ssize_t sys_pwrite64(unsigned
    file = fget_light(fd, &fput_needed);
    if (file) {
    ret = -ESPIPE;
    - if (file->f_mode & FMODE_PWRITE)
    + if (file->f_mode & FMODE_PWRITE) {
    + trace_mark(fs_pwrite64, "fd %u count %zu pos %llu",
    + fd, count, (unsigned long long)pos);
    ret = vfs_write(file, buf, count, &pos);
    + }
    fput_light(file, fput_needed);
    }

    @@ -663,6 +680,7 @@ sys_readv(unsigned long fd, const struct
    file = fget_light(fd, &fput_needed);
    if (file) {
    loff_t pos = file_pos_read(file);
    + trace_mark(fs_readv, "fd %lu vlen %lu", fd, vlen);
    ret = vfs_readv(file, vec, vlen, &pos);
    file_pos_write(file, pos);
    fput_light(file, fput_needed);
    @@ -684,6 +702,7 @@ sys_writev(unsigned long fd, const struc
    file = fget_light(fd, &fput_needed);
    if (file) {
    loff_t pos = file_pos_read(file);
    + trace_mark(fs_writev, "fd %lu vlen %lu", fd, vlen);
    ret = vfs_writev(file, vec, vlen, &pos);
    file_pos_write(file, pos);
    fput_light(file, fput_needed);
    Index: linux-2.6-sched-devel/fs/select.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/select.c 2008-04-22 20:04:11.000000000 -0400
    +++ linux-2.6-sched-devel/fs/select.c 2008-04-22 20:23:31.000000000 -0400
    @@ -23,6 +23,7 @@
    #include <linux/file.h>
    #include <linux/fs.h>
    #include <linux/rcupdate.h>
    +#include <linux/marker.h>

    #include <asm/uaccess.h>

    @@ -231,6 +232,9 @@ int do_select(int n, fd_set_bits *fds, s
    file = fget_light(i, &fput_needed);
    if (file) {
    f_op = file->f_op;
    + trace_mark(fs_select,
    + "fd %d timeout #8d%lld",
    + i, (long long)*timeout);
    mask = DEFAULT_POLLMASK;
    if (f_op && f_op->poll)
    mask = (*f_op->poll)(file, retval ? NULL : wait);
    @@ -559,6 +563,7 @@ static inline unsigned int do_pollfd(str
    file = fget_light(fd, &fput_needed);
    mask = POLLNVAL;
    if (file != NULL) {
    + trace_mark(fs_pollfd, "fd %d", fd);
    mask = DEFAULT_POLLMASK;
    if (file->f_op && file->f_op->poll)
    mask = file->f_op->poll(file, pwait);
    Index: linux-2.6-sched-devel/fs/exec.c
    ===================================================================
    --- linux-2.6-sched-devel.orig/fs/exec.c 2008-03-27 14:02:05.000000000 -0400
    +++ linux-2.6-sched-devel/fs/exec.c 2008-04-22 20:23:31.000000000 -0400
    @@ -51,6 +51,7 @@
    #include <linux/tsacct_kern.h>
    #include <linux/cn_proc.h>
    #include <linux/audit.h>
    +#include <linux/marker.h>

    #include <asm/uaccess.h>
    #include <asm/mmu_context.h>
    @@ -1338,6 +1339,7 @@ int do_execve(char * filename,

    retval = search_binary_handler(bprm,regs);
    if (retval >= 0) {
    + trace_mark(fs_exec, "filename %s", filename);
    /* execve success */
    free_arg_pages(bprm);
    security_bprm_free(bprm);
    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


    \
     
     \ /
      Last update: 2008-04-24 17:23    [W:3.424 / U:0.548 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site