xfs: xfs_alloc_get_rec should return EFSCORRUPTED for obvious bnobt corruption

Return -EFSCORRUPTED when the bnobt/cntbt return obviously corrupt
values, rather than letting them bounce around in the internal code.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
Darrick J. Wong 2018-06-03 16:10:14 -07:00
parent b3986010ce
commit a37f7b127e

View File

@ -231,10 +231,14 @@ xfs_alloc_get_rec(
int error; int error;
error = xfs_btree_get_rec(cur, &rec, stat); error = xfs_btree_get_rec(cur, &rec, stat);
if (!error && *stat == 1) { if (error || !(*stat))
*bno = be32_to_cpu(rec->alloc.ar_startblock); return error;
*len = be32_to_cpu(rec->alloc.ar_blockcount); if (rec->alloc.ar_blockcount == 0)
} return -EFSCORRUPTED;
*bno = be32_to_cpu(rec->alloc.ar_startblock);
*len = be32_to_cpu(rec->alloc.ar_blockcount);
return error; return error;
} }