ext4: add some tracepoints in extent status tree
authorZheng Liu <wenqing.lz@taobao.com>
Fri, 9 Nov 2012 02:57:33 +0000 (21:57 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 9 Nov 2012 02:57:33 +0000 (21:57 -0500)
This patch adds some tracepoints in extent status tree.

Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/extents_status.c
include/trace/events/ext4.h

index 02c09be3d773abac16661cb70ebb08b8c6322192..564d981a2fcc1860ef2687f2bb6d4cf1b746cd21 100644 (file)
@@ -14,6 +14,8 @@
 #include "extents_status.h"
 #include "ext4_extents.h"
 
+#include <trace/events/ext4.h>
+
 /*
  * According to previous discussion in Ext4 Developer Workshop, we
  * will introduce a new structure called io tree to track all extent
@@ -224,6 +226,8 @@ ext4_lblk_t ext4_es_find_extent(struct inode *inode, struct extent_status *es)
        struct rb_node *node;
        ext4_lblk_t ret = EXT_MAX_BLOCKS;
 
+       trace_ext4_es_find_extent_enter(inode, es->start);
+
        read_lock(&EXT4_I(inode)->i_es_lock);
        tree = &EXT4_I(inode)->i_es_tree;
 
@@ -253,6 +257,8 @@ out:
        }
 
        read_unlock(&EXT4_I(inode)->i_es_lock);
+
+       trace_ext4_es_find_extent_exit(inode, es, ret);
        return ret;
 }
 
@@ -393,6 +399,7 @@ int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t offset,
        struct ext4_es_tree *tree;
        int err = 0;
 
+       trace_ext4_es_insert_extent(inode, offset, len);
        es_debug("add [%u/%u) to extent status tree of inode %lu\n",
                 offset, len, inode->i_ino);
 
@@ -422,6 +429,7 @@ int ext4_es_remove_extent(struct inode *inode, ext4_lblk_t offset,
        ext4_lblk_t len1, len2, end;
        int err = 0;
 
+       trace_ext4_es_remove_extent(inode, offset, len);
        es_debug("remove [%u/%u) from extent status tree of inode %lu\n",
                 offset, len, inode->i_ino);
 
index d2a125a6db8b0e7e347dbf119cb9185306e9129b..f6372b01136657cd5a0b9213090733c87347250e 100644 (file)
@@ -15,6 +15,7 @@ struct ext4_inode_info;
 struct mpage_da_data;
 struct ext4_map_blocks;
 struct ext4_extent;
+struct extent_status;
 
 #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
 
@@ -2054,6 +2055,106 @@ TRACE_EVENT(ext4_ext_remove_space_done,
                  (unsigned short) __entry->eh_entries)
 );
 
+TRACE_EVENT(ext4_es_insert_extent,
+       TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t len),
+
+       TP_ARGS(inode, start, len),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(        ino_t,  ino                     )
+               __field(        loff_t, start                   )
+               __field(        loff_t, len                     )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = inode->i_sb->s_dev;
+               __entry->ino    = inode->i_ino;
+               __entry->start  = start;
+               __entry->len    = len;
+       ),
+
+       TP_printk("dev %d,%d ino %lu es [%lld/%lld)",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino,
+                 __entry->start, __entry->len)
+);
+
+TRACE_EVENT(ext4_es_remove_extent,
+       TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t len),
+
+       TP_ARGS(inode, start, len),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(        ino_t,  ino                     )
+               __field(        loff_t, start                   )
+               __field(        loff_t, len                     )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = inode->i_sb->s_dev;
+               __entry->ino    = inode->i_ino;
+               __entry->start  = start;
+               __entry->len    = len;
+       ),
+
+       TP_printk("dev %d,%d ino %lu es [%lld/%lld)",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino,
+                 __entry->start, __entry->len)
+);
+
+TRACE_EVENT(ext4_es_find_extent_enter,
+       TP_PROTO(struct inode *inode, ext4_lblk_t start),
+
+       TP_ARGS(inode, start),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,          dev             )
+               __field(        ino_t,          ino             )
+               __field(        ext4_lblk_t,    start           )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = inode->i_sb->s_dev;
+               __entry->ino    = inode->i_ino;
+               __entry->start  = start;
+       ),
+
+       TP_printk("dev %d,%d ino %lu start %u",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino, __entry->start)
+);
+
+TRACE_EVENT(ext4_es_find_extent_exit,
+       TP_PROTO(struct inode *inode, struct extent_status *es,
+                ext4_lblk_t ret),
+
+       TP_ARGS(inode, es, ret),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,          dev             )
+               __field(        ino_t,          ino             )
+               __field(        ext4_lblk_t,    start           )
+               __field(        ext4_lblk_t,    len             )
+               __field(        ext4_lblk_t,    ret             )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = inode->i_sb->s_dev;
+               __entry->ino    = inode->i_ino;
+               __entry->start  = es->start;
+               __entry->len    = es->len;
+               __entry->ret    = ret;
+       ),
+
+       TP_printk("dev %d,%d ino %lu es [%u/%u) ret %u",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino,
+                 __entry->start, __entry->len, __entry->ret)
+);
+
 #endif /* _TRACE_EXT4_H */
 
 /* This part must be outside protection */