xfs: trace log intent item recovery failures
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 30 Nov 2020 00:33:39 +0000 (16:33 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 9 Dec 2020 17:49:38 +0000 (09:49 -0800)
Add a trace point so that we can capture when a recovered log intent
item fails to recover.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_trace.h

index 87886b7f77dad0aeb51b7cdea4638c05319b612b..1152c4b3ba968f26368cc3b57dd992af79deb9ba 100644 (file)
@@ -2559,8 +2559,11 @@ xlog_recover_process_intents(
                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);
index 86951652d3ed66601f0d44c4ae14a9e11dc9dc90..5a263ae3d4f00890d6c67ed240d954afb9c36461 100644 (file)
@@ -103,6 +103,24 @@ DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound);
 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),