On Tue, Aug 17, 2021 at 04:42:17PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > XFS_DADDR_TO_FSB converts a raw disk address (in units of 512b blocks) > to a raw disk address (in units of fs blocks). Unfortunately, the > xchk_block_error_class tracepoints incorrectly uses this to decode > xfs_daddr_t into segmented AG number and AG block addresses. Use the > correct translation code. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > fs/xfs/scrub/trace.h | 16 ++++------------ > 1 file changed, 4 insertions(+), 12 deletions(-) > > > diff --git a/fs/xfs/scrub/trace.h b/fs/xfs/scrub/trace.h > index e46f5cef90da..29f1d0ac7ec5 100644 > --- a/fs/xfs/scrub/trace.h > +++ b/fs/xfs/scrub/trace.h > @@ -193,29 +193,21 @@ DECLARE_EVENT_CLASS(xchk_block_error_class, > __field(dev_t, dev) > __field(unsigned int, type) > __field(xfs_agnumber_t, agno) > - __field(xfs_agblock_t, bno) > + __field(xfs_agblock_t, agbno) > __field(void *, ret_ip) > ), > TP_fast_assign( > - xfs_fsblock_t fsbno; > - xfs_agnumber_t agno; > - xfs_agblock_t bno; > - > - fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr); > - agno = XFS_FSB_TO_AGNO(sc->mp, fsbno); > - bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno); > - > __entry->dev = sc->mp->m_super->s_dev; > __entry->type = sc->sm->sm_type; > - __entry->agno = agno; > - __entry->bno = bno; > + __entry->agno = xfs_daddr_to_agno(sc->mp, daddr); > + __entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr); > __entry->ret_ip = ret_ip; > ), > TP_printk("dev %d:%d type %s agno %u agbno %u ret_ip %pS", > MAJOR(__entry->dev), MINOR(__entry->dev), > __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), > __entry->agno, > - __entry->bno, > + __entry->agbno, > __entry->ret_ip) > ) > > -- Carlos