forked from Minki/linux
785c4bcc0d
This commit adds fixed tracepoints to the ext3 code. It is based on ext4 tracepoints, however due to the differences of both file systems, there are some tracepoints missing (those for delaloc and for multi-block allocator) and there are some ext3 specific as well (for reservation windows). Here is a list: ext3_free_inode ext3_request_inode ext3_allocate_inode ext3_evict_inode ext3_drop_inode ext3_mark_inode_dirty ext3_write_begin ext3_ordered_write_end ext3_writeback_write_end ext3_journalled_write_end ext3_ordered_writepage ext3_writeback_writepage ext3_journalled_writepage ext3_readpage ext3_releasepage ext3_invalidatepage ext3_discard_blocks ext3_request_blocks ext3_allocate_blocks ext3_free_blocks ext3_sync_file_enter ext3_sync_file_exit ext3_sync_fs ext3_rsv_window_add ext3_discard_reservation ext3_alloc_new_reservation ext3_reserved ext3_forget ext3_read_block_bitmap ext3_direct_IO_enter ext3_direct_IO_exit ext3_unlink_enter ext3_unlink_exit ext3_truncate_enter ext3_truncate_exit ext3_get_blocks_enter ext3_get_blocks_exit ext3_load_inode Signed-off-by: Lukas Czerner <lczerner@redhat.com> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Jan Kara <jack@suse.cz>
865 lines
19 KiB
C
865 lines
19 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM ext3
|
|
|
|
#if !defined(_TRACE_EXT3_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_EXT3_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
TRACE_EVENT(ext3_free_inode,
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( umode_t, mode )
|
|
__field( uid_t, uid )
|
|
__field( gid_t, gid )
|
|
__field( blkcnt_t, blocks )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->mode = inode->i_mode;
|
|
__entry->uid = inode->i_uid;
|
|
__entry->gid = inode->i_gid;
|
|
__entry->blocks = inode->i_blocks;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->mode, __entry->uid, __entry->gid,
|
|
(unsigned long) __entry->blocks)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_request_inode,
|
|
TP_PROTO(struct inode *dir, int mode),
|
|
|
|
TP_ARGS(dir, mode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, dir )
|
|
__field( umode_t, mode )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = dir->i_sb->s_dev;
|
|
__entry->dir = dir->i_ino;
|
|
__entry->mode = mode;
|
|
),
|
|
|
|
TP_printk("dev %d,%d dir %lu mode 0%o",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->dir, __entry->mode)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_allocate_inode,
|
|
TP_PROTO(struct inode *inode, struct inode *dir, int mode),
|
|
|
|
TP_ARGS(inode, dir, mode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( ino_t, dir )
|
|
__field( umode_t, mode )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dir = dir->i_ino;
|
|
__entry->mode = mode;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu dir %lu mode 0%o",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long) __entry->dir, __entry->mode)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_evict_inode,
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( int, nlink )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->nlink = inode->i_nlink;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu nlink %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino, __entry->nlink)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_drop_inode,
|
|
TP_PROTO(struct inode *inode, int drop),
|
|
|
|
TP_ARGS(inode, drop),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( int, drop )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->drop = drop;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu drop %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino, __entry->drop)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_mark_inode_dirty,
|
|
TP_PROTO(struct inode *inode, unsigned long IP),
|
|
|
|
TP_ARGS(inode, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field(unsigned long, ip )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->ip = IP;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu caller %pF",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino, (void *)__entry->ip)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_write_begin,
|
|
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
|
unsigned int flags),
|
|
|
|
TP_ARGS(inode, pos, len, flags),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( loff_t, pos )
|
|
__field( unsigned int, len )
|
|
__field( unsigned int, flags )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->pos = pos;
|
|
__entry->len = len;
|
|
__entry->flags = flags;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu pos %llu len %u flags %u",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long long) __entry->pos, __entry->len,
|
|
__entry->flags)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(ext3__write_end,
|
|
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
|
unsigned int copied),
|
|
|
|
TP_ARGS(inode, pos, len, copied),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( loff_t, pos )
|
|
__field( unsigned int, len )
|
|
__field( unsigned int, copied )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->pos = pos;
|
|
__entry->len = len;
|
|
__entry->copied = copied;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu pos %llu len %u copied %u",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long long) __entry->pos, __entry->len,
|
|
__entry->copied)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__write_end, ext3_ordered_write_end,
|
|
|
|
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
|
unsigned int copied),
|
|
|
|
TP_ARGS(inode, pos, len, copied)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__write_end, ext3_writeback_write_end,
|
|
|
|
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
|
unsigned int copied),
|
|
|
|
TP_ARGS(inode, pos, len, copied)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__write_end, ext3_journalled_write_end,
|
|
|
|
TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
|
|
unsigned int copied),
|
|
|
|
TP_ARGS(inode, pos, len, copied)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(ext3__page_op,
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( pgoff_t, index )
|
|
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->index = page->index;
|
|
__entry->ino = page->mapping->host->i_ino;
|
|
__entry->dev = page->mapping->host->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu page_index %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino, __entry->index)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__page_op, ext3_ordered_writepage,
|
|
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__page_op, ext3_writeback_writepage,
|
|
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__page_op, ext3_journalled_writepage,
|
|
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__page_op, ext3_readpage,
|
|
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__page_op, ext3_releasepage,
|
|
|
|
TP_PROTO(struct page *page),
|
|
|
|
TP_ARGS(page)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_invalidatepage,
|
|
TP_PROTO(struct page *page, unsigned long offset),
|
|
|
|
TP_ARGS(page, offset),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( pgoff_t, index )
|
|
__field( unsigned long, offset )
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->index = page->index;
|
|
__entry->offset = offset;
|
|
__entry->ino = page->mapping->host->i_ino;
|
|
__entry->dev = page->mapping->host->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu page_index %lu offset %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->index, __entry->offset)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_discard_blocks,
|
|
TP_PROTO(struct super_block *sb, unsigned long blk,
|
|
unsigned long count),
|
|
|
|
TP_ARGS(sb, blk, count),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( unsigned long, blk )
|
|
__field( unsigned long, count )
|
|
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
__entry->blk = blk;
|
|
__entry->count = count;
|
|
),
|
|
|
|
TP_printk("dev %d,%d blk %lu count %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->blk, __entry->count)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_request_blocks,
|
|
TP_PROTO(struct inode *inode, unsigned long goal,
|
|
unsigned long count),
|
|
|
|
TP_ARGS(inode, goal, count),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( unsigned long, count )
|
|
__field( unsigned long, goal )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->count = count;
|
|
__entry->goal = goal;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu count %lu goal %lu ",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->count, __entry->goal)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_allocate_blocks,
|
|
TP_PROTO(struct inode *inode, unsigned long goal,
|
|
unsigned long count, unsigned long block),
|
|
|
|
TP_ARGS(inode, goal, count, block),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( unsigned long, block )
|
|
__field( unsigned long, count )
|
|
__field( unsigned long, goal )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->block = block;
|
|
__entry->count = count;
|
|
__entry->goal = goal;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu count %lu block %lu goal %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->count, __entry->block,
|
|
__entry->goal)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_free_blocks,
|
|
TP_PROTO(struct inode *inode, unsigned long block,
|
|
unsigned long count),
|
|
|
|
TP_ARGS(inode, block, count),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( umode_t, mode )
|
|
__field( unsigned long, block )
|
|
__field( unsigned long, count )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->mode = inode->i_mode;
|
|
__entry->block = block;
|
|
__entry->count = count;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu mode 0%o block %lu count %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->mode, __entry->block, __entry->count)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_sync_file_enter,
|
|
TP_PROTO(struct file *file, int datasync),
|
|
|
|
TP_ARGS(file, datasync),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( ino_t, parent )
|
|
__field( int, datasync )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
struct dentry *dentry = file->f_path.dentry;
|
|
|
|
__entry->dev = dentry->d_inode->i_sb->s_dev;
|
|
__entry->ino = dentry->d_inode->i_ino;
|
|
__entry->datasync = datasync;
|
|
__entry->parent = dentry->d_parent->d_inode->i_ino;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu parent %ld datasync %d ",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long) __entry->parent, __entry->datasync)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_sync_file_exit,
|
|
TP_PROTO(struct inode *inode, int ret),
|
|
|
|
TP_ARGS(inode, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( int, ret )
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ret = ret;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu ret %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_sync_fs,
|
|
TP_PROTO(struct super_block *sb, int wait),
|
|
|
|
TP_ARGS(sb, wait),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( int, wait )
|
|
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
__entry->wait = wait;
|
|
),
|
|
|
|
TP_printk("dev %d,%d wait %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->wait)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_rsv_window_add,
|
|
TP_PROTO(struct super_block *sb,
|
|
struct ext3_reserve_window_node *rsv_node),
|
|
|
|
TP_ARGS(sb, rsv_node),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned long, start )
|
|
__field( unsigned long, end )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
__entry->start = rsv_node->rsv_window._rsv_start;
|
|
__entry->end = rsv_node->rsv_window._rsv_end;
|
|
),
|
|
|
|
TP_printk("dev %d,%d start %lu end %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->start, __entry->end)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_discard_reservation,
|
|
TP_PROTO(struct inode *inode,
|
|
struct ext3_reserve_window_node *rsv_node),
|
|
|
|
TP_ARGS(inode, rsv_node),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned long, start )
|
|
__field( unsigned long, end )
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->start = rsv_node->rsv_window._rsv_start;
|
|
__entry->end = rsv_node->rsv_window._rsv_end;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu start %lu end %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long)__entry->ino, __entry->start,
|
|
__entry->end)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_alloc_new_reservation,
|
|
TP_PROTO(struct super_block *sb, unsigned long goal),
|
|
|
|
TP_ARGS(sb, goal),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( unsigned long, goal )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
__entry->goal = goal;
|
|
),
|
|
|
|
TP_printk("dev %d,%d goal %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->goal)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_reserved,
|
|
TP_PROTO(struct super_block *sb, unsigned long block,
|
|
struct ext3_reserve_window_node *rsv_node),
|
|
|
|
TP_ARGS(sb, block, rsv_node),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( unsigned long, block )
|
|
__field( unsigned long, start )
|
|
__field( unsigned long, end )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->block = block;
|
|
__entry->start = rsv_node->rsv_window._rsv_start;
|
|
__entry->end = rsv_node->rsv_window._rsv_end;
|
|
__entry->dev = sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d block %lu, start %lu end %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->block, __entry->start, __entry->end)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_forget,
|
|
TP_PROTO(struct inode *inode, int is_metadata, unsigned long block),
|
|
|
|
TP_ARGS(inode, is_metadata, block),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( ino_t, ino )
|
|
__field( umode_t, mode )
|
|
__field( int, is_metadata )
|
|
__field( unsigned long, block )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
__entry->mode = inode->i_mode;
|
|
__entry->is_metadata = is_metadata;
|
|
__entry->block = block;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->mode, __entry->is_metadata, __entry->block)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_read_block_bitmap,
|
|
TP_PROTO(struct super_block *sb, unsigned int group),
|
|
|
|
TP_ARGS(sb, group),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( dev_t, dev )
|
|
__field( __u32, group )
|
|
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
__entry->group = group;
|
|
),
|
|
|
|
TP_printk("dev %d,%d group %u",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
__entry->group)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_direct_IO_enter,
|
|
TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw),
|
|
|
|
TP_ARGS(inode, offset, len, rw),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( loff_t, pos )
|
|
__field( unsigned long, len )
|
|
__field( int, rw )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->pos = offset;
|
|
__entry->len = len;
|
|
__entry->rw = rw;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu pos %llu len %lu rw %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long long) __entry->pos, __entry->len,
|
|
__entry->rw)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_direct_IO_exit,
|
|
TP_PROTO(struct inode *inode, loff_t offset, unsigned long len,
|
|
int rw, int ret),
|
|
|
|
TP_ARGS(inode, offset, len, rw, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( loff_t, pos )
|
|
__field( unsigned long, len )
|
|
__field( int, rw )
|
|
__field( int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->pos = offset;
|
|
__entry->len = len;
|
|
__entry->rw = rw;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu pos %llu len %lu rw %d ret %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long long) __entry->pos, __entry->len,
|
|
__entry->rw, __entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_unlink_enter,
|
|
TP_PROTO(struct inode *parent, struct dentry *dentry),
|
|
|
|
TP_ARGS(parent, dentry),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, parent )
|
|
__field( ino_t, ino )
|
|
__field( loff_t, size )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->parent = parent->i_ino;
|
|
__entry->ino = dentry->d_inode->i_ino;
|
|
__entry->size = dentry->d_inode->i_size;
|
|
__entry->dev = dentry->d_inode->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu size %lld parent %ld",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
(unsigned long long)__entry->size,
|
|
(unsigned long) __entry->parent)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_unlink_exit,
|
|
TP_PROTO(struct dentry *dentry, int ret),
|
|
|
|
TP_ARGS(dentry, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = dentry->d_inode->i_ino;
|
|
__entry->dev = dentry->d_inode->i_sb->s_dev;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu ret %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->ret)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(ext3__truncate,
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( blkcnt_t, blocks )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->blocks = inode->i_blocks;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu blocks %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino, (unsigned long) __entry->blocks)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__truncate, ext3_truncate_enter,
|
|
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode)
|
|
);
|
|
|
|
DEFINE_EVENT(ext3__truncate, ext3_truncate_exit,
|
|
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_get_blocks_enter,
|
|
TP_PROTO(struct inode *inode, unsigned long lblk,
|
|
unsigned long len, int create),
|
|
|
|
TP_ARGS(inode, lblk, len, create),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( unsigned long, lblk )
|
|
__field( unsigned long, len )
|
|
__field( int, create )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->lblk = lblk;
|
|
__entry->len = len;
|
|
__entry->create = create;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu lblk %lu len %lu create %u",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->lblk, __entry->len, __entry->create)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_get_blocks_exit,
|
|
TP_PROTO(struct inode *inode, unsigned long lblk,
|
|
unsigned long pblk, unsigned long len, int ret),
|
|
|
|
TP_ARGS(inode, lblk, pblk, len, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
__field( unsigned long, lblk )
|
|
__field( unsigned long, pblk )
|
|
__field( unsigned long, len )
|
|
__field( int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->lblk = lblk;
|
|
__entry->pblk = pblk;
|
|
__entry->len = len;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu lblk %lu pblk %lu len %lu ret %d",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino,
|
|
__entry->lblk, __entry->pblk,
|
|
__entry->len, __entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(ext3_load_inode,
|
|
TP_PROTO(struct inode *inode),
|
|
|
|
TP_ARGS(inode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( ino_t, ino )
|
|
__field( dev_t, dev )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->ino = inode->i_ino;
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
),
|
|
|
|
TP_printk("dev %d,%d ino %lu",
|
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
|
(unsigned long) __entry->ino)
|
|
);
|
|
|
|
#endif /* _TRACE_EXT3_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|