On Tue, Jun 02, 2015 at 02:41:48PM -0400, Brian Foster wrote: > The sparse inode chunk feature introduces a new inobt record format that > converts ir_freecount from 4 bytes to 1 byte. ir_freecount references > throughout repair currently assume the 'full' format and endian-convert > from the 32-bit value. > > Update the xfs_repair inobt scan and tree rebuild codepaths to use the > correct record format for ir_freecount when sparse inodes is enabled. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> > --- > repair/phase5.c | 6 +++++- > repair/scan.c | 37 +++++++++++++++++++++++++------------ > 2 files changed, 30 insertions(+), 13 deletions(-) > > diff --git a/repair/phase5.c b/repair/phase5.c > index d01e72b..04bf049 100644 > --- a/repair/phase5.c > +++ b/repair/phase5.c > @@ -1240,7 +1240,11 @@ build_ino_tree(xfs_mount_t *mp, xfs_agnumber_t agno, > inocnt += is_inode_free(ino_rec, k); > } > > - bt_rec[j].ir_u.f.ir_freecount = cpu_to_be32(inocnt); > + if (xfs_sb_version_hassparseinodes(&mp->m_sb)) > + bt_rec[j].ir_u.sp.ir_freecount = inocnt; > + else > + bt_rec[j].ir_u.f.ir_freecount = > + cpu_to_be32(inocnt); > freecount += inocnt; > count += XFS_INODES_PER_CHUNK; Can you make this a "inorec_set_freecount(mp, rec, count)" helper? > diff --git a/repair/scan.c b/repair/scan.c > index e64d0e5..f42459c 100644 > --- a/repair/scan.c > +++ b/repair/scan.c > @@ -751,11 +751,16 @@ scan_single_ino_chunk( > int off; > int state; > ino_tree_node_t *ino_rec, *first_rec, *last_rec; > + int freecount; > > ino = be32_to_cpu(rp->ir_startino); > off = XFS_AGINO_TO_OFFSET(mp, ino); > agbno = XFS_AGINO_TO_AGBNO(mp, ino); > lino = XFS_AGINO_TO_INO(mp, agno, ino); > + if (xfs_sb_version_hassparseinodes(&mp->m_sb)) > + freecount = rp->ir_u.sp.ir_freecount; > + else > + freecount = be32_to_cpu(rp->ir_u.f.ir_freecount); And this a "freecount = inorec_get_freecount(mp, rec)" helper? The code is otherwise fine, so I'll apply this patch as is to keep working through the series. Can you send the helper update as a delta patch that applies at the end of the entire series? Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs