struct xfs_buf *dbp,
unsigned int len)
{
- struct xfs_dir2_data_free *bf;
struct xfs_dir2_data_free *dfp;
- int offset;
- if (len == 0)
- return;
+ dfp = sc->ip->d_ops->data_bestfree_p(dbp->b_addr);
- bf = sc->ip->d_ops->data_bestfree_p(dbp->b_addr);
- for (dfp = &bf[0]; dfp < &bf[XFS_DIR2_DATA_FD_COUNT]; dfp++) {
- offset = be16_to_cpu(dfp->offset);
- if (offset == 0)
- break;
- if (len == be16_to_cpu(dfp->length))
- return;
- /* Didn't find the best length in the bestfree data */
- break;
- }
+ if (len != be16_to_cpu(dfp->length))
+ xfs_scrub_fblock_set_corrupt(sc, XFS_DATA_FORK, lblk);
- xfs_scrub_fblock_set_corrupt(sc, XFS_DATA_FORK, lblk);
+ if (len > 0 && be16_to_cpu(dfp->offset) == 0)
+ xfs_scrub_fblock_set_corrupt(sc, XFS_DATA_FORK, lblk);
}
/* Check free space info in a directory leaf1 block. */