From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tejun Heo Subject: [PATCH 2/2] vfs: add fcheck tracepoint Date: Wed, 9 Jan 2013 09:01:37 -0800 Message-ID: <20130109170137.GN3926@htj.dyndns.org> References: <20130109170105.GM3926@htj.dyndns.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, Steven Rostedt , chavey@google.com To: Alexander Viro Return-path: Received: from mail-da0-f49.google.com ([209.85.210.49]:33355 "EHLO mail-da0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932138Ab3AIRBo (ORCPT ); Wed, 9 Jan 2013 12:01:44 -0500 Received: by mail-da0-f49.google.com with SMTP id v40so837365dad.8 for ; Wed, 09 Jan 2013 09:01:43 -0800 (PST) Content-Disposition: inline In-Reply-To: <20130109170105.GM3926@htj.dyndns.org> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: All file accesses from userland go through fcheck to map fd to struct file, making it a very good location for peeking at what files userland is accessing. Add a tracepoint there. This is part of tracepoint additions to improve visiblity into dirtying / writeback operations for io tracer and userland. Signed-off-by: Tejun Heo Cc: Al Viro --- fs/file.c | 3 +++ fs/super.c | 2 ++ include/trace/events/vfs.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) --- a/fs/file.c +++ b/fs/file.c @@ -22,6 +22,7 @@ #include #include #include +#include struct fdtable_defer { spinlock_t lock; @@ -716,6 +717,8 @@ inline struct file *fcheck_files(struct if (fd < fdt->max_fds) file = rcu_dereference_check_fdtable(files, fdt->fd[fd]); + + trace_vfs_fcheck(files, fd, file, _THIS_IP_); return file; } EXPORT_SYMBOL(fcheck_files); --- a/fs/super.c +++ b/fs/super.c @@ -36,6 +36,8 @@ #include #include "internal.h" +#define CREATE_TRACE_POINTS +#include LIST_HEAD(super_blocks); DEFINE_SPINLOCK(sb_lock); --- /dev/null +++ b/include/trace/events/vfs.h @@ -0,0 +1,42 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM vfs + +#if !defined(_TRACE_VFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_VFS_H + +#include +#include + +TRACE_EVENT(vfs_fcheck, + + TP_PROTO(struct files_struct *files, unsigned int fd, + struct file *file, unsigned long ip), + + TP_ARGS(files, fd, file, ip), + + TP_STRUCT__entry( + __field(unsigned int, fd) + __field(umode_t, mode) + __field(dev_t, dev) + __field(ino_t, ino) + __field(unsigned long, ip) + ), + + TP_fast_assign( + __entry->fd = fd; + __entry->mode = file ? file->f_path.dentry->d_inode->i_mode : 0; + __entry->dev = file ? file->f_path.dentry->d_inode->i_sb->s_dev : 0; + __entry->ino = file ? file->f_path.dentry->d_inode->i_ino : 0; + __entry->ip = ip; + ), + + TP_printk("fd %u mode 0x%x dev %d,%d ino %lu caller %pF", + __entry->fd, __entry->mode, + MAJOR(__entry->dev), MINOR(__entry->dev), + (unsigned long)__entry->ino, (void *)__entry->ip) +); + +#endif /* _TRACE_VFS_H */ + +/* This part must be outside protection */ +#include