This patch doesn't apply cleanly to the current Ubuntu Maverick linux kernel as it appears we're already carrying a version of this patch:
commit ce3cdc8812cc8a6f5645a9c372c7d6227676a7e5 Author: Arjan van de Ven <ar...@linux.intel.com> Date: Sun Oct 25 15:37:04 2009 -0700 UBUNTU: SAUCE: vfs: Add a trace point in the mark_inode_dirty function There's only a 1 line discrepancy (see below) between what we currently have in the Maverick Ubuntu kernel and the patch inlined below. Care to re-send an updated patch to only add the additional one line change? Care to also include your SOB on the patch? Thanks, Leann On Thu, 2010-09-09 at 19:20 +0800, yong.s...@linaro.org wrote: > From: Arjan van de Ven <ar...@linux.intel.com> > > 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 <ar...@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 d5be169..6a2af1d 100644 > --- a/fs/fs-writeback.c > +++ b/fs/fs-writeback.c > @@ -26,6 +26,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) > @@ -900,6 +901,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)) Looks like the above line is the only additional change from what we already have. > + 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 722860b..a06184f 100644 > --- a/fs/inode.c > +++ b/fs/inode.c > @@ -1626,3 +1626,7 @@ void inode_init_owner(struct inode *inode, const struct > inode *dir, > inode->i_mode = mode; > } > EXPORT_SYMBOL(inode_init_owner); > + > +#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.3.3 > > _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev