diff options
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.33.2/linux-2.6.33-vfs-tracepoints.patch')
-rw-r--r-- | meta-moblin/packages/linux/linux-moblin-2.6.33.2/linux-2.6.33-vfs-tracepoints.patch | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.33.2/linux-2.6.33-vfs-tracepoints.patch b/meta-moblin/packages/linux/linux-moblin-2.6.33.2/linux-2.6.33-vfs-tracepoints.patch new file mode 100644 index 0000000..7bf425a --- /dev/null +++ b/meta-moblin/packages/linux/linux-moblin-2.6.33.2/linux-2.6.33-vfs-tracepoints.patch @@ -0,0 +1,120 @@ +From f56c995174cf42d84fdad06beebacd56e700b05d Mon Sep 17 00:00:00 2001 +From: Arjan van de Ven <arjan@linux.intel.com> +Date: Sun, 25 Oct 2009 15:37:04 -0700 +Subject: [PATCH] vfs: Add a trace point in the mark_inode_dirty function + +PowerTOP would like to be able to show who is keeping the disk +busy by dirtying data. The most logical spot for this is in the vfs +in the mark_inode_dirty() function, doing this on the block level +is not possible because by the time the IO hits the block layer the +guilty party can no longer be found ("kjournald" and "pdflush" are not +useful answers to "who caused this file to be dirty). + +The trace point follows the same logic/style as the block_dump code +and pretty much dumps the same data, just not to dmesg (and thus to +/var/log/messages) but via the trace events streams. + +Signed-of-by: Arjan van de Ven <arjan@linux.intel.com> +--- + fs/fs-writeback.c | 4 +++ + fs/inode.c | 4 +++ + include/trace/events/vfs.h | 53 ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 61 insertions(+), 0 deletions(-) + create mode 100644 include/trace/events/vfs.h + +diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c +index 9d5360c..af31caf 100644 +--- a/fs/fs-writeback.c ++++ b/fs/fs-writeback.c +@@ -25,6 +25,7 @@ + #include <linux/blkdev.h> + #include <linux/backing-dev.h> + #include <linux/buffer_head.h> ++#include <trace/events/vfs.h> + #include "internal.h" + + #define inode_to_bdi(inode) ((inode)->i_mapping->backing_dev_info) +@@ -1061,6 +1062,9 @@ void __mark_inode_dirty(struct inode *inode, int flags) + sb->s_op->dirty_inode(inode); + } + ++ if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)) ++ trace_dirty_inode(inode, current); ++ + /* + * make sure that changes are seen by all cpus before we test i_state + * -- mikulas +diff --git a/fs/inode.c b/fs/inode.c +index 4d8e3be..a61e8ba 100644 +--- a/fs/inode.c ++++ b/fs/inode.c +@@ -1624,3 +1624,7 @@ void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev) + inode->i_ino); + } + EXPORT_SYMBOL(init_special_inode); ++ ++#define CREATE_TRACE_POINTS ++#include <trace/events/vfs.h> ++ +diff --git a/include/trace/events/vfs.h b/include/trace/events/vfs.h +new file mode 100644 +index 0000000..21cf9fb +--- /dev/null ++++ b/include/trace/events/vfs.h +@@ -0,0 +1,53 @@ ++#undef TRACE_SYSTEM ++#define TRACE_SYSTEM vfs ++ ++#if !defined(_TRACE_VFS_H) || defined(TRACE_HEADER_MULTI_READ) ++#define _TRACE_VFS_H ++ ++/* ++ * Tracepoint for dirtying an inode: ++ */ ++TRACE_EVENT(dirty_inode, ++ ++ TP_PROTO(struct inode *inode, struct task_struct *task), ++ ++ TP_ARGS(inode, task), ++ ++ TP_STRUCT__entry( ++ __array( char, comm, TASK_COMM_LEN ) ++ __field( pid_t, pid ) ++ __array( char, dev, 16 ) ++ __array( char, file, 32 ) ++ ), ++ ++ TP_fast_assign( ++ if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { ++ struct dentry *dentry; ++ const char *name = "?"; ++ ++ dentry = d_find_alias(inode); ++ if (dentry) { ++ spin_lock(&dentry->d_lock); ++ name = (const char *) dentry->d_name.name; ++ } ++ ++ memcpy(__entry->comm, task->comm, TASK_COMM_LEN); ++ __entry->pid = task->pid; ++ strlcpy(__entry->file, name, 32); ++ strlcpy(__entry->dev, inode->i_sb->s_id, 16); ++ ++ if (dentry) { ++ spin_unlock(&dentry->d_lock); ++ dput(dentry); ++ } ++ } ++ ), ++ ++ TP_printk("task=%i (%s) file=%s dev=%s", ++ __entry->pid, __entry->comm, __entry->file, __entry->dev) ++); ++ ++#endif /* _TRACE_VFS_H */ ++ ++/* This part must be outside protection */ ++#include <trace/define_trace.h> +-- +1.6.0.6 + |