aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/linux-2.6
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2010-04-13 01:06:46 -0400
committerAlex Elder <aelder@sgi.com>2010-05-19 10:58:10 -0400
commit9abbc539bf7f299819ad0a235064a1b643ab6407 (patch)
tree0c15d4f4933bce3a1a1db19509f4993ce2e46286 /fs/xfs/linux-2.6
parente6b1f27370fc67ac9868b2dbe2c22bc26952900e (diff)
xfs: add log item recovery tracing
Currently there is no tracing in log recovery, so it is difficult to determine what is going on when something goes wrong. Add tracing for log item recovery to provide visibility into the log recovery process. The tracing added shows regions being extracted from the log transactions and added to the transaction hash forming recovery items, followed by the reordering, cancelling and finally recovery of the items. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/linux-2.6')
-rw-r--r--fs/xfs/linux-2.6/xfs_trace.c3
-rw-r--r--fs/xfs/linux-2.6/xfs_trace.h138
2 files changed, 141 insertions, 0 deletions
diff --git a/fs/xfs/linux-2.6/xfs_trace.c b/fs/xfs/linux-2.6/xfs_trace.c
index 5a107601e969..2a460581308f 100644
--- a/fs/xfs/linux-2.6/xfs_trace.c
+++ b/fs/xfs/linux-2.6/xfs_trace.c
@@ -50,6 +50,9 @@
50#include "xfs_aops.h" 50#include "xfs_aops.h"
51#include "quota/xfs_dquot_item.h" 51#include "quota/xfs_dquot_item.h"
52#include "quota/xfs_dquot.h" 52#include "quota/xfs_dquot.h"
53#include "xfs_log_recover.h"
54#include "xfs_buf_item.h"
55#include "xfs_inode_item.h"
53 56
54/* 57/*
55 * We include this last to have the helpers above available for the trace 58 * We include this last to have the helpers above available for the trace
diff --git a/fs/xfs/linux-2.6/xfs_trace.h b/fs/xfs/linux-2.6/xfs_trace.h
index 65371859c753..33f7d2b7afeb 100644
--- a/fs/xfs/linux-2.6/xfs_trace.h
+++ b/fs/xfs/linux-2.6/xfs_trace.h
@@ -32,6 +32,10 @@ struct xfs_da_node_entry;
32struct xfs_dquot; 32struct xfs_dquot;
33struct xlog_ticket; 33struct xlog_ticket;
34struct log; 34struct log;
35struct xlog_recover;
36struct xlog_recover_item;
37struct xfs_buf_log_format;
38struct xfs_inode_log_format;
35 39
36DECLARE_EVENT_CLASS(xfs_attr_list_class, 40DECLARE_EVENT_CLASS(xfs_attr_list_class,
37 TP_PROTO(struct xfs_attr_list_context *ctx), 41 TP_PROTO(struct xfs_attr_list_context *ctx),
@@ -1502,6 +1506,140 @@ DEFINE_EVENT(xfs_swap_extent_class, name, \
1502DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before); 1506DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before);
1503DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after); 1507DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after);
1504 1508
1509DECLARE_EVENT_CLASS(xfs_log_recover_item_class,
1510 TP_PROTO(struct log *log, struct xlog_recover *trans,
1511 struct xlog_recover_item *item, int pass),
1512 TP_ARGS(log, trans, item, pass),
1513 TP_STRUCT__entry(
1514 __field(dev_t, dev)
1515 __field(unsigned long, item)
1516 __field(xlog_tid_t, tid)
1517 __field(int, type)
1518 __field(int, pass)
1519 __field(int, count)
1520 __field(int, total)
1521 ),
1522 TP_fast_assign(
1523 __entry->dev = log->l_mp->m_super->s_dev;
1524 __entry->item = (unsigned long)item;
1525 __entry->tid = trans->r_log_tid;
1526 __entry->type = ITEM_TYPE(item);
1527 __entry->pass = pass;
1528 __entry->count = item->ri_cnt;
1529 __entry->total = item->ri_total;
1530 ),
1531 TP_printk("dev %d:%d trans 0x%x, pass %d, item 0x%p, item type %s "
1532 "item region count/total %d/%d",
1533 MAJOR(__entry->dev), MINOR(__entry->dev),
1534 __entry->tid,
1535 __entry->pass,
1536 (void *)__entry->item,
1537 __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
1538 __entry->count,
1539 __entry->total)
1540)
1541
1542#define DEFINE_LOG_RECOVER_ITEM(name) \
1543DEFINE_EVENT(xfs_log_recover_item_class, name, \
1544 TP_PROTO(struct log *log, struct xlog_recover *trans, \
1545 struct xlog_recover_item *item, int pass), \
1546 TP_ARGS(log, trans, item, pass))
1547
1548DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add);
1549DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont);
1550DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head);
1551DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail);
1552DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover);
1553
1554DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class,
1555 TP_PROTO(struct log *log, struct xfs_buf_log_format *buf_f),
1556 TP_ARGS(log, buf_f),
1557 TP_STRUCT__entry(
1558 __field(dev_t, dev)
1559 __field(__int64_t, blkno)
1560 __field(unsigned short, len)
1561 __field(unsigned short, flags)
1562 __field(unsigned short, size)
1563 __field(unsigned int, map_size)
1564 ),
1565 TP_fast_assign(
1566 __entry->dev = log->l_mp->m_super->s_dev;
1567 __entry->blkno = buf_f->blf_blkno;
1568 __entry->len = buf_f->blf_len;
1569 __entry->flags = buf_f->blf_flags;
1570 __entry->size = buf_f->blf_size;
1571 __entry->map_size = buf_f->blf_map_size;
1572 ),
1573 TP_printk("dev %d:%d blkno 0x%llx, len %u, flags 0x%x, size %d, "
1574 "map_size %d",
1575 MAJOR(__entry->dev), MINOR(__entry->dev),
1576 __entry->blkno,
1577 __entry->len,
1578 __entry->flags,
1579 __entry->size,
1580 __entry->map_size)
1581)
1582
1583#define DEFINE_LOG_RECOVER_BUF_ITEM(name) \
1584DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \
1585 TP_PROTO(struct log *log, struct xfs_buf_log_format *buf_f), \
1586 TP_ARGS(log, buf_f))
1587
1588DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel);
1589DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel);
1590DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add);
1591DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc);
1592DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover);
1593DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf);
1594DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf);
1595DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf);
1596
1597DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class,
1598 TP_PROTO(struct log *log, struct xfs_inode_log_format *in_f),
1599 TP_ARGS(log, in_f),
1600 TP_STRUCT__entry(
1601 __field(dev_t, dev)
1602 __field(xfs_ino_t, ino)
1603 __field(unsigned short, size)
1604 __field(int, fields)
1605 __field(unsigned short, asize)
1606 __field(unsigned short, dsize)
1607 __field(__int64_t, blkno)
1608 __field(int, len)
1609 __field(int, boffset)
1610 ),
1611 TP_fast_assign(
1612 __entry->dev = log->l_mp->m_super->s_dev;
1613 __entry->ino = in_f->ilf_ino;
1614 __entry->size = in_f->ilf_size;
1615 __entry->fields = in_f->ilf_fields;
1616 __entry->asize = in_f->ilf_asize;
1617 __entry->dsize = in_f->ilf_dsize;
1618 __entry->blkno = in_f->ilf_blkno;
1619 __entry->len = in_f->ilf_len;
1620 __entry->boffset = in_f->ilf_boffset;
1621 ),
1622 TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "
1623 "dsize %d, blkno 0x%llx, len %d, boffset %d",
1624 MAJOR(__entry->dev), MINOR(__entry->dev),
1625 __entry->ino,
1626 __entry->size,
1627 __entry->fields,
1628 __entry->asize,
1629 __entry->dsize,
1630 __entry->blkno,
1631 __entry->len,
1632 __entry->boffset)
1633)
1634#define DEFINE_LOG_RECOVER_INO_ITEM(name) \
1635DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \
1636 TP_PROTO(struct log *log, struct xfs_inode_log_format *in_f), \
1637 TP_ARGS(log, in_f))
1638
1639DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover);
1640DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel);
1641DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip);
1642
1505#endif /* _TRACE_XFS_H */ 1643#endif /* _TRACE_XFS_H */
1506 1644
1507#undef TRACE_INCLUDE_PATH 1645#undef TRACE_INCLUDE_PATH