mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 07:38:10 +00:00
xfs: add a tracepoint to report incorrect extent refcounts
Add a new tracepoint so that I can see exactly what and where we failed the refcount check. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
ecc73f8a58
commit
9014890304
2 changed files with 39 additions and 1 deletions
|
@ -13,6 +13,7 @@
|
|||
#include "scrub/scrub.h"
|
||||
#include "scrub/common.h"
|
||||
#include "scrub/btree.h"
|
||||
#include "scrub/trace.h"
|
||||
#include "xfs_trans_resv.h"
|
||||
#include "xfs_mount.h"
|
||||
#include "xfs_ag.h"
|
||||
|
@ -300,8 +301,10 @@ xchk_refcountbt_xref_rmap(
|
|||
goto out_free;
|
||||
|
||||
xchk_refcountbt_process_rmap_fragments(&refchk);
|
||||
if (irec->rc_refcount != refchk.seen)
|
||||
if (irec->rc_refcount != refchk.seen) {
|
||||
trace_xchk_refcount_incorrect(sc->sa.pag, irec, refchk.seen);
|
||||
xchk_btree_xref_set_corrupt(sc, sc->sa.rmap_cur, 0);
|
||||
}
|
||||
|
||||
out_free:
|
||||
list_for_each_entry_safe(frag, n, &refchk.fragments, list) {
|
||||
|
|
|
@ -30,6 +30,9 @@ TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
|
|||
TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
|
||||
TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
|
||||
|
||||
TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
|
||||
TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
|
||||
|
||||
TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);
|
||||
TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);
|
||||
TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);
|
||||
|
@ -657,6 +660,38 @@ TRACE_EVENT(xchk_fscounters_within_range,
|
|||
__entry->old_value)
|
||||
)
|
||||
|
||||
TRACE_EVENT(xchk_refcount_incorrect,
|
||||
TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec,
|
||||
xfs_nlink_t seen),
|
||||
TP_ARGS(pag, irec, seen),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(xfs_agnumber_t, agno)
|
||||
__field(enum xfs_refc_domain, domain)
|
||||
__field(xfs_agblock_t, startblock)
|
||||
__field(xfs_extlen_t, blockcount)
|
||||
__field(xfs_nlink_t, refcount)
|
||||
__field(xfs_nlink_t, seen)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = pag->pag_mount->m_super->s_dev;
|
||||
__entry->agno = pag->pag_agno;
|
||||
__entry->domain = irec->rc_domain;
|
||||
__entry->startblock = irec->rc_startblock;
|
||||
__entry->blockcount = irec->rc_blockcount;
|
||||
__entry->refcount = irec->rc_refcount;
|
||||
__entry->seen = seen;
|
||||
),
|
||||
TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->agno,
|
||||
__print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
|
||||
__entry->startblock,
|
||||
__entry->blockcount,
|
||||
__entry->refcount,
|
||||
__entry->seen)
|
||||
)
|
||||
|
||||
/* repair tracepoints */
|
||||
#if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
|
||||
|
||||
|
|
Loading…
Reference in a new issue