btrfs: add trace for qgroup accounting
authorMark Fasheh <mfasheh@suse.de>
Thu, 17 Jul 2014 19:39:00 +0000 (12:39 -0700)
committerChris Mason <clm@fb.com>
Wed, 17 Sep 2014 20:37:50 +0000 (13:37 -0700)
We want this to debug qgroup changes on live systems.

Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/qgroup.c
fs/btrfs/super.c
include/trace/events/btrfs.h

index 2ce4ce7..1e4c6e9 100644 (file)
@@ -1335,6 +1335,8 @@ int btrfs_qgroup_record_ref(struct btrfs_trans_handle *trans,
        INIT_LIST_HEAD(&oper->elem.list);
        oper->elem.seq = 0;
 
+       trace_btrfs_qgroup_record_ref(oper);
+
        if (type == BTRFS_QGROUP_OPER_SUB_SUBTREE) {
                /*
                 * If any operation for this bytenr/ref_root combo
@@ -2077,6 +2079,8 @@ static int btrfs_qgroup_account(struct btrfs_trans_handle *trans,
 
        ASSERT(is_fstree(oper->ref_root));
 
+       trace_btrfs_qgroup_account(oper);
+
        switch (oper->type) {
        case BTRFS_QGROUP_OPER_ADD_EXCL:
        case BTRFS_QGROUP_OPER_SUB_EXCL:
index d66fbd5..3f1f4e2 100644 (file)
@@ -60,6 +60,7 @@
 #include "backref.h"
 #include "tests/btrfs-tests.h"
 
+#include "qgroup.h"
 #define CREATE_TRACE_POINTS
 #include <trace/events/btrfs.h>
 
index 4ee4e30..b8774b3 100644 (file)
@@ -23,6 +23,7 @@ struct map_lookup;
 struct extent_buffer;
 struct btrfs_work;
 struct __btrfs_workqueue;
+struct btrfs_qgroup_operation;
 
 #define show_ref_type(type)                                            \
        __print_symbolic(type,                                          \
@@ -1119,6 +1120,61 @@ DEFINE_EVENT(btrfs__workqueue_done, btrfs_workqueue_destroy,
        TP_ARGS(wq)
 );
 
+#define show_oper_type(type)                                           \
+       __print_symbolic(type,                                          \
+               { BTRFS_QGROUP_OPER_ADD_EXCL,   "OPER_ADD_EXCL" },      \
+               { BTRFS_QGROUP_OPER_ADD_SHARED, "OPER_ADD_SHARED" },    \
+               { BTRFS_QGROUP_OPER_SUB_EXCL,   "OPER_SUB_EXCL" },      \
+               { BTRFS_QGROUP_OPER_SUB_SHARED, "OPER_SUB_SHARED" })
+
+DECLARE_EVENT_CLASS(btrfs_qgroup_oper,
+
+       TP_PROTO(struct btrfs_qgroup_operation *oper),
+
+       TP_ARGS(oper),
+
+       TP_STRUCT__entry(
+               __field(        u64,  ref_root          )
+               __field(        u64,  bytenr            )
+               __field(        u64,  num_bytes         )
+               __field(        u64,  seq               )
+               __field(        int,  type              )
+               __field(        u64,  elem_seq          )
+       ),
+
+       TP_fast_assign(
+               __entry->ref_root       = oper->ref_root;
+               __entry->bytenr         = oper->bytenr,
+               __entry->num_bytes      = oper->num_bytes;
+               __entry->seq            = oper->seq;
+               __entry->type           = oper->type;
+               __entry->elem_seq       = oper->elem.seq;
+       ),
+
+       TP_printk("ref_root = %llu, bytenr = %llu, num_bytes = %llu, "
+                 "seq = %llu, elem.seq = %llu, type = %s",
+                 (unsigned long long)__entry->ref_root,
+                 (unsigned long long)__entry->bytenr,
+                 (unsigned long long)__entry->num_bytes,
+                 (unsigned long long)__entry->seq,
+                 (unsigned long long)__entry->elem_seq,
+                 show_oper_type(__entry->type))
+);
+
+DEFINE_EVENT(btrfs_qgroup_oper, btrfs_qgroup_account,
+
+       TP_PROTO(struct btrfs_qgroup_operation *oper),
+
+       TP_ARGS(oper)
+);
+
+DEFINE_EVENT(btrfs_qgroup_oper, btrfs_qgroup_record_ref,
+
+       TP_PROTO(struct btrfs_qgroup_operation *oper),
+
+       TP_ARGS(oper)
+);
+
 #endif /* _TRACE_BTRFS_H */
 
 /* This part must be outside protection */