This is adding a tracepoint 'btrfs_handle_em_exist' to help debug the
subtle bugs around merge_extent_mapping.

Signed-off-by: Liu Bo <bo.li....@oracle.com>
---
 fs/btrfs/extent_map.c        |  3 +++
 include/trace/events/btrfs.h | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index b5d0add..a5a1d17 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -552,6 +552,9 @@ int btrfs_add_extent_mapping(struct extent_map_tree 
*em_tree,
                ret = 0;
 
                existing = search_extent_mapping(em_tree, start, len);
+
+               trace_btrfs_handle_em_exist(existing, em, start, len);
+
                /*
                 * existing will always be non-NULL, since there must be
                 * extent causing the -EEXIST.
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index 4342a32..b7ffcf7 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -249,6 +249,41 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
                  __entry->refs, __entry->compress_type)
 );
 
+TRACE_EVENT(btrfs_handle_em_exist,
+
+       TP_PROTO(const struct extent_map *existing, const struct extent_map 
*map, u64 start, u64 len),
+
+       TP_ARGS(existing, map, start, len),
+
+       TP_STRUCT__entry(
+               __field(        u64,  e_start           )
+               __field(        u64,  e_len             )
+               __field(        u64,  map_start         )
+               __field(        u64,  map_len           )
+               __field(        u64,  start             )
+               __field(        u64,  len               )
+       ),
+
+       TP_fast_assign(
+               __entry->e_start        = existing->start;
+               __entry->e_len          = existing->len;
+               __entry->map_start      = map->start;
+               __entry->map_len        = map->len;
+               __entry->start          = start;
+               __entry->len            = len;
+       ),
+
+       TP_printk("start=%llu len=%llu "
+                 "existing(start=%llu len=%llu) "
+                 "em(start=%llu len=%llu)",
+                 (unsigned long long)__entry->start,
+                 (unsigned long long)__entry->len,
+                 (unsigned long long)__entry->e_start,
+                 (unsigned long long)__entry->e_len,
+                 (unsigned long long)__entry->map_start,
+                 (unsigned long long)__entry->map_len)
+);
+
 /* file extent item */
 DECLARE_EVENT_CLASS(btrfs__file_extent_item_regular,
 
-- 
2.9.4

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to