int xfs_agi_good_version(unsigned v) { return XFS_AGI_GOOD_VERSION(v); }
static int verify_set_agi(xfs_mount_t *mp, xfs_agi_t *agi, xfs_agnumber_t agno) { xfs_drfsbno_t agblocks; int retval = 0; /* check common fields */ if (be32_to_cpu(agi->agi_magicnum) != XFS_AGI_MAGIC) { retval = XR_AG_AGI; do_warn(_("bad magic # 0x%x for agi %d\n"), be32_to_cpu(agi->agi_magicnum), agno); if (!no_modify) agi->agi_magicnum = cpu_to_be32(XFS_AGI_MAGIC); } if (!XFS_AGI_GOOD_VERSION(be32_to_cpu(agi->agi_versionnum))) { retval = XR_AG_AGI; do_warn(_("bad version # %d for agi %d\n"), be32_to_cpu(agi->agi_versionnum), agno); if (!no_modify) agi->agi_versionnum = cpu_to_be32(XFS_AGI_VERSION); } if (be32_to_cpu(agi->agi_seqno) != agno) { retval = XR_AG_AGI; do_warn(_("bad sequence # %d for agi %d\n"), be32_to_cpu(agi->agi_seqno), agno); if (!no_modify) agi->agi_seqno = cpu_to_be32(agno); } if (be32_to_cpu(agi->agi_length) != mp->m_sb.sb_agblocks) { if (agno != mp->m_sb.sb_agcount - 1) { retval = XR_AG_AGI; do_warn(_("bad length # %d for agi %d, should be %d\n"), be32_to_cpu(agi->agi_length), agno, mp->m_sb.sb_agblocks); if (!no_modify) agi->agi_length = cpu_to_be32(mp->m_sb.sb_agblocks); } else { agblocks = mp->m_sb.sb_dblocks - (xfs_drfsbno_t) mp->m_sb.sb_agblocks * agno; if (be32_to_cpu(agi->agi_length) != agblocks) { retval = XR_AG_AGI; do_warn( _("bad length # %d for agi %d, should be %" PRIu64 "\n"), be32_to_cpu(agi->agi_length), agno, agblocks); if (!no_modify) agi->agi_length = cpu_to_be32(agblocks); } } } /* don't check inode btree -- will be checked by caller */ return(retval); }