btrfs: Add ftrace for btrfs_workqueue
[cascardo/linux.git] / include / trace / events / btrfs.h
index 4832d75..c346919 100644 (file)
@@ -21,6 +21,7 @@ struct btrfs_block_group_cache;
 struct btrfs_free_cluster;
 struct map_lookup;
 struct extent_buffer;
+struct btrfs_work;
 
 #define show_ref_type(type)                                            \
        __print_symbolic(type,                                          \
@@ -208,17 +209,18 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
                  __entry->refs, __entry->compress_type)
 );
 
-#define show_ordered_flags(flags)                                      \
-       __print_symbolic(flags,                                         \
-               { BTRFS_ORDERED_IO_DONE,        "IO_DONE"       },      \
-               { BTRFS_ORDERED_COMPLETE,       "COMPLETE"      },      \
-               { BTRFS_ORDERED_NOCOW,          "NOCOW"         },      \
-               { BTRFS_ORDERED_COMPRESSED,     "COMPRESSED"    },      \
-               { BTRFS_ORDERED_PREALLOC,       "PREALLOC"      },      \
-               { BTRFS_ORDERED_DIRECT,         "DIRECT"        },      \
-               { BTRFS_ORDERED_IOERR,          "IOERR"         },      \
-               { BTRFS_ORDERED_UPDATED_ISIZE,  "UPDATED_ISIZE" },      \
-               { BTRFS_ORDERED_LOGGED_CSUM,    "LOGGED_CSUM"   })
+#define show_ordered_flags(flags)                                         \
+       __print_flags(flags, "|",                                          \
+               { (1 << BTRFS_ORDERED_IO_DONE),         "IO_DONE"       }, \
+               { (1 << BTRFS_ORDERED_COMPLETE),        "COMPLETE"      }, \
+               { (1 << BTRFS_ORDERED_NOCOW),           "NOCOW"         }, \
+               { (1 << BTRFS_ORDERED_COMPRESSED),      "COMPRESSED"    }, \
+               { (1 << BTRFS_ORDERED_PREALLOC),        "PREALLOC"      }, \
+               { (1 << BTRFS_ORDERED_DIRECT),          "DIRECT"        }, \
+               { (1 << BTRFS_ORDERED_IOERR),           "IOERR"         }, \
+               { (1 << BTRFS_ORDERED_UPDATED_ISIZE),   "UPDATED_ISIZE" }, \
+               { (1 << BTRFS_ORDERED_LOGGED_CSUM),     "LOGGED_CSUM"   }, \
+               { (1 << BTRFS_ORDERED_TRUNCATED),       "TRUNCATED"     })
 
 
 DECLARE_EVENT_CLASS(btrfs__ordered_extent,
@@ -981,6 +983,87 @@ TRACE_EVENT(free_extent_state,
                  (void *)__entry->ip)
 );
 
+DECLARE_EVENT_CLASS(btrfs__work,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work),
+
+       TP_STRUCT__entry(
+               __field(        void *, work                    )
+               __field(        void *, wq                      )
+               __field(        void *, func                    )
+               __field(        void *, ordered_func            )
+               __field(        void *, ordered_free            )
+       ),
+
+       TP_fast_assign(
+               __entry->work           = work;
+               __entry->wq             = work->wq;
+               __entry->func           = work->func;
+               __entry->ordered_func   = work->ordered_func;
+               __entry->ordered_free   = work->ordered_free;
+       ),
+
+       TP_printk("work=%p, wq=%p, func=%p, ordered_func=%p, ordered_free=%p",
+                 __entry->work, __entry->wq, __entry->func,
+                 __entry->ordered_func, __entry->ordered_free)
+);
+
+/* For situiations that the work is freed */
+DECLARE_EVENT_CLASS(btrfs__work__done,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work),
+
+       TP_STRUCT__entry(
+               __field(        void *, work                    )
+       ),
+
+       TP_fast_assign(
+               __entry->work           = work;
+       ),
+
+       TP_printk("work->%p", __entry->work)
+);
+
+DEFINE_EVENT(btrfs__work, btrfs_work_queued,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work)
+);
+
+DEFINE_EVENT(btrfs__work, btrfs_work_sched,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work)
+);
+
+DEFINE_EVENT(btrfs__work, btrfs_normal_work_done,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work)
+);
+
+DEFINE_EVENT(btrfs__work__done, btrfs_all_work_done,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work)
+);
+
+DEFINE_EVENT(btrfs__work, btrfs_ordered_sched,
+
+       TP_PROTO(struct btrfs_work *work),
+
+       TP_ARGS(work)
+);
+
+
 #endif /* _TRACE_BTRFS_H */
 
 /* This part must be outside protection */