spin_unlock(&ailp->ail_lock);
                error = lip->li_ops->iop_recover(lip, &capture_list);
                spin_lock(&ailp->ail_lock);
-               if (error)
+               if (error) {
+                       trace_xlog_intent_recovery_failed(log->l_mp, error,
+                                       lip->li_ops->iop_recover);
                        break;
+               }
        }
 
        xfs_trans_ail_cursor_done(&cur);
 
 DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list);
 DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list);
 
+TRACE_EVENT(xlog_intent_recovery_failed,
+       TP_PROTO(struct xfs_mount *mp, int error, void *function),
+       TP_ARGS(mp, error, function),
+       TP_STRUCT__entry(
+               __field(dev_t, dev)
+               __field(int, error)
+               __field(void *, function)
+       ),
+       TP_fast_assign(
+               __entry->dev = mp->m_super->s_dev;
+               __entry->error = error;
+               __entry->function = function;
+       ),
+       TP_printk("dev %d:%d error %d function %pS",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __entry->error, __entry->function)
+);
+
 DECLARE_EVENT_CLASS(xfs_perag_class,
        TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount,
                 unsigned long caller_ip),