On Thu, Oct 05, 2017 at 11:59:43AM +1100, Dave Chinner wrote: > On Tue, Oct 03, 2017 at 01:42:05PM -0700, Darrick J. Wong wrote: > > + > > +/* > > + * Set us up to scrub free space btrees. > > + * Push everything out of the log so that the busy extent list is empty. > > + */ > > +int > > +xfs_scrub_setup_ag_allocbt( > > + struct xfs_scrub_context *sc, > > + struct xfs_inode *ip) > > +{ > > + return xfs_scrub_setup_ag_btree(sc, ip, sc->try_harder); > > These setup calls are getting deeply nested and intertwined. And > I really don't know why we pass sc->try_harder as a separate > parameter when we are already passing sc, especically as > xfs_scrub_setup_ag_btree() doesn't use it at all... > > > +/* Scrub a bnobt/cntbt record. */ > > +STATIC int > > +xfs_scrub_allocbt_helper( > > + struct xfs_scrub_btree *bs, > > + union xfs_btree_rec *rec) > > +{ > > + struct xfs_mount *mp = bs->cur->bc_mp; > > + struct xfs_agf *agf; > > + unsigned long long rec_end; > > + xfs_agblock_t bno; > > + xfs_extlen_t len; > > + int error = 0; > > + > > + bno = be32_to_cpu(rec->alloc.ar_startblock); > > + len = be32_to_cpu(rec->alloc.ar_blockcount); > > + agf = XFS_BUF_TO_AGF(bs->sc->sa.agf_bp); > > + rec_end = (unsigned long long)bno + len; > > + > > + if (bno >= mp->m_sb.sb_agblocks || > > Needs to take into account short last AG, so.... > > > + bno >= be32_to_cpu(agf->agf_length) || > > + len == 0 || > > + rec_end > mp->m_sb.sb_agblocks || > > + rec_end > be32_to_cpu(agf->agf_length)) > > + xfs_scrub_btree_set_corrupt(bs->sc, bs->cur, 0); > > ... it should probably just validate the agbno is good. i.e. > > if (!xfs_agbno_verify(bno) || !len || > !xfs_agbno_verify(rec_end)) { Will do. > ..... > > > > +xfs_scrub_allocbt( > > + struct xfs_scrub_context *sc, > > + xfs_btnum_t which) > > +{ > > + struct xfs_owner_info oinfo; > > + struct xfs_btree_cur *cur; > > + > > + xfs_rmap_ag_owner(&oinfo, XFS_RMAP_OWN_AG); > > + cur = which == XFS_BTNUM_BNO ? sc->sa.bno_cur : sc->sa.cnt_cur; > > + return xfs_scrub_btree(sc, cur, xfs_scrub_allocbt_helper, > > + &oinfo, NULL); > > +} > > I'm assuming the owner info is for later functionality to cross > check btree blocks against the rmap btree? Yes. --D > > Cheers, > > Dave. > -- > Dave Chinner > david@xxxxxxxxxxxxx > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html