uuid_copy(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid);
        }
 
-       agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, bp);
+       agfl_bno = xfs_buf_to_agfl_bno(bp);
        for (bucket = 0; bucket < xfs_agfl_size(mp); bucket++)
                agfl_bno[bucket] = cpu_to_be32(NULLAGBLOCK);
 }
 
 {
        struct xfs_mount *mp = bp->b_mount;
        struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp);
+       __be32          *agfl_bno = xfs_buf_to_agfl_bno(bp);
        int             i;
 
        /*
                return __this_address;
 
        for (i = 0; i < xfs_agfl_size(mp); i++) {
-               if (be32_to_cpu(agfl->agfl_bno[i]) != NULLAGBLOCK &&
-                   be32_to_cpu(agfl->agfl_bno[i]) >= mp->m_sb.sb_agblocks)
+               if (be32_to_cpu(agfl_bno[i]) != NULLAGBLOCK &&
+                   be32_to_cpu(agfl_bno[i]) >= mp->m_sb.sb_agblocks)
                        return __this_address;
        }
 
        /*
         * Get the block number and update the data structures.
         */
-       agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agflbp);
+       agfl_bno = xfs_buf_to_agfl_bno(agflbp);
        bno = be32_to_cpu(agfl_bno[be32_to_cpu(agf->agf_flfirst)]);
        be32_add_cpu(&agf->agf_flfirst, 1);
        xfs_trans_brelse(tp, agflbp);
 
        ASSERT(be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp));
 
-       agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agflbp);
+       agfl_bno = xfs_buf_to_agfl_bno(agflbp);
        blockp = &agfl_bno[be32_to_cpu(agf->agf_fllast)];
        *blockp = cpu_to_be32(bno);
        startoff = (char *)blockp - (char *)agflbp->b_addr;
        unsigned int            i;
        int                     error;
 
-       agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agflbp);
+       agfl_bno = xfs_buf_to_agfl_bno(agflbp);
        i = be32_to_cpu(agf->agf_flfirst);
 
        /* Nothing to walk in an empty AGFL. */
 
 int xfs_agfl_walk(struct xfs_mount *mp, struct xfs_agf *agf,
                struct xfs_buf *agflbp, xfs_agfl_walk_fn walk_fn, void *priv);
 
+static inline __be32 *
+xfs_buf_to_agfl_bno(
+       struct xfs_buf          *bp)
+{
+       if (xfs_sb_version_hascrc(&bp->b_mount->m_sb))
+               return bp->b_addr + sizeof(struct xfs_agfl);
+       return bp->b_addr;
+}
+
 #endif /* __XFS_ALLOC_H__ */
 
 #define        XFS_AGFL_BLOCK(mp)      XFS_HDR_BLOCK(mp, XFS_AGFL_DADDR(mp))
 #define        XFS_BUF_TO_AGFL(bp)     ((xfs_agfl_t *)((bp)->b_addr))
 
-#define XFS_BUF_TO_AGFL_BNO(mp, bp) \
-       (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \
-               &(XFS_BUF_TO_AGFL(bp)->agfl_bno[0]) : \
-               (__be32 *)(bp)->b_addr)
-
 typedef struct xfs_agfl {
        __be32          agfl_magicnum;
        __be32          agfl_seqno;
        uuid_t          agfl_uuid;
        __be64          agfl_lsn;
        __be32          agfl_crc;
-       __be32          agfl_bno[];     /* actually xfs_agfl_size(mp) */
 } __attribute__((packed)) xfs_agfl_t;
 
 #define XFS_AGFL_CRC_OFF       offsetof(struct xfs_agfl, agfl_crc)
 
         * step.
         */
        fl_off = 0;
-       agfl_bno = XFS_BUF_TO_AGFL_BNO(mp, agfl_bp);
+       agfl_bno = xfs_buf_to_agfl_bno(agfl_bp);
        for_each_xfs_bitmap_extent(br, n, agfl_extents) {
                agbno = XFS_FSB_TO_AGBNO(mp, br->start);