set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
                        cond_wake_up(&entry->wait);
                        refcount_inc(&entry->refs);
+                       trace_btrfs_ordered_extent_mark_finished(inode, entry);
                        spin_unlock_irqrestore(&tree->lock, flags);
                        btrfs_init_work(&entry->work, finish_func, NULL, NULL);
                        btrfs_queue_work(wq, &entry->work);
        if (finished && cached && entry) {
                *cached = entry;
                refcount_inc(&entry->refs);
+               trace_btrfs_ordered_extent_dec_test_pending(inode, entry);
        }
        spin_unlock_irqrestore(&tree->lock, flags);
        return finished;
        entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
        if (!in_range(file_offset, entry->file_offset, entry->num_bytes))
                entry = NULL;
-       if (entry)
+       if (entry) {
                refcount_inc(&entry->refs);
+               trace_btrfs_ordered_extent_lookup(inode, entry);
+       }
 out:
        spin_unlock_irqrestore(&tree->lock, flags);
        return entry;
                        break;
        }
 out:
-       if (entry)
+       if (entry) {
                refcount_inc(&entry->refs);
+               trace_btrfs_ordered_extent_lookup_range(inode, entry);
+       }
        spin_unlock_irq(&tree->lock);
        return entry;
 }
                ASSERT(list_empty(&ordered->log_list));
                list_add_tail(&ordered->log_list, list);
                refcount_inc(&ordered->refs);
+               trace_btrfs_ordered_extent_lookup_for_logging(inode, ordered);
        }
        spin_unlock_irq(&tree->lock);
 }
 
        entry = rb_entry(node, struct btrfs_ordered_extent, rb_node);
        refcount_inc(&entry->refs);
+       trace_btrfs_ordered_extent_lookup_first(inode, entry);
 out:
        spin_unlock_irq(&tree->lock);
        return entry;
        /* No ordered extent in the range */
        entry = NULL;
 out:
-       if (entry)
+       if (entry) {
                refcount_inc(&entry->refs);
+               trace_btrfs_ordered_extent_lookup_first_range(inode, entry);
+       }
+
        spin_unlock_irq(&tree->lock);
        return entry;
 }
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
        int ret = 0;
 
+       trace_btrfs_ordered_extent_split(BTRFS_I(inode), ordered);
+
        spin_lock_irq(&tree->lock);
        /* Remove from tree once */
        node = &ordered->rb_node;
 
        TP_ARGS(inode, ordered)
 );
 
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_range,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_first_range,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_for_logging,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_first,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_split,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_dec_test_pending,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
+DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_mark_finished,
+
+            TP_PROTO(const struct btrfs_inode *inode,
+                     const struct btrfs_ordered_extent *ordered),
+
+            TP_ARGS(inode, ordered)
+);
+
 DECLARE_EVENT_CLASS(btrfs__writepage,
 
        TP_PROTO(const struct page *page, const struct inode *inode,