xfs: kill the XFS_WANT_CORRUPT_* macros
The XFS_WANT_CORRUPT_* macros conceal subtle side effects such as the creation of local variables and redirections of the code flow. This is pretty ugly, so replace them with explicit XFS_IS_CORRUPT tests that remove both of those ugly points. The change was performed with the following coccinelle script: @@ expression mp, test; identifier label; @@ - XFS_WANT_CORRUPTED_GOTO(mp, test, label); + if (XFS_IS_CORRUPT(mp, !test)) { error = -EFSCORRUPTED; goto label; } @@ expression mp, test; @@ - XFS_WANT_CORRUPTED_RETURN(mp, test); + if (XFS_IS_CORRUPT(mp, !test)) return -EFSCORRUPTED; @@ expression mp, lval, rval; @@ - XFS_IS_CORRUPT(mp, !(lval == rval)) + XFS_IS_CORRUPT(mp, lval != rval) @@ expression mp, e1, e2; @@ - XFS_IS_CORRUPT(mp, !(e1 && e2)) + XFS_IS_CORRUPT(mp, !e1 || !e2) @@ expression e1, e2; @@ - !(e1 == e2) + e1 != e2 @@ expression e1, e2, e3, e4, e5, e6; @@ - !(e1 == e2 && e3 == e4) || e5 != e6 + e1 != e2 || e3 != e4 || e5 != e6 @@ expression e1, e2, e3, e4, e5, e6; @@ - !(e1 == e2 || (e3 <= e4 && e5 <= e6)) + e1 != e2 && (e3 > e4 || e5 > e6) @@ expression mp, e1, e2; @@ - XFS_IS_CORRUPT(mp, !(e1 <= e2)) + XFS_IS_CORRUPT(mp, e1 > e2) @@ expression mp, e1, e2; @@ - XFS_IS_CORRUPT(mp, !(e1 < e2)) + XFS_IS_CORRUPT(mp, e1 >= e2) @@ expression mp, e1; @@ - XFS_IS_CORRUPT(mp, !!e1) + XFS_IS_CORRUPT(mp, e1) @@ expression mp, e1, e2; @@ - XFS_IS_CORRUPT(mp, !(e1 || e2)) + XFS_IS_CORRUPT(mp, !e1 && !e2) @@ expression mp, e1, e2, e3, e4; @@ - XFS_IS_CORRUPT(mp, !(e1 == e2) && !(e3 == e4)) + XFS_IS_CORRUPT(mp, e1 != e2 && e3 != e4) @@ expression mp, e1, e2, e3, e4; @@ - XFS_IS_CORRUPT(mp, !(e1 <= e2) || !(e3 >= e4)) + XFS_IS_CORRUPT(mp, e1 > e2 || e3 < e4) @@ expression mp, e1, e2, e3, e4; @@ - XFS_IS_CORRUPT(mp, !(e1 == e2) && !(e3 <= e4)) + XFS_IS_CORRUPT(mp, e1 != e2 && e3 > e4) Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
@@ -451,13 +451,17 @@ xfs_alloc_fixup_trees(
|
||||
#ifdef DEBUG
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, &nfbno1, &nflen1, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp,
|
||||
i == 1 && nfbno1 == fbno && nflen1 == flen);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
i != 1 ||
|
||||
nfbno1 != fbno ||
|
||||
nflen1 != flen))
|
||||
return -EFSCORRUPTED;
|
||||
#endif
|
||||
} else {
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, fbno, flen, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
/*
|
||||
* Look up the record in the by-block tree if necessary.
|
||||
@@ -466,13 +470,17 @@ xfs_alloc_fixup_trees(
|
||||
#ifdef DEBUG
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, &nfbno1, &nflen1, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp,
|
||||
i == 1 && nfbno1 == fbno && nflen1 == flen);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
i != 1 ||
|
||||
nfbno1 != fbno ||
|
||||
nflen1 != flen))
|
||||
return -EFSCORRUPTED;
|
||||
#endif
|
||||
} else {
|
||||
if ((error = xfs_alloc_lookup_eq(bno_cur, fbno, flen, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -483,8 +491,10 @@ xfs_alloc_fixup_trees(
|
||||
bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_bufs[0]);
|
||||
cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]);
|
||||
|
||||
XFS_WANT_CORRUPTED_RETURN(mp,
|
||||
bnoblock->bb_numrecs == cntblock->bb_numrecs);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
bnoblock->bb_numrecs !=
|
||||
cntblock->bb_numrecs))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -514,25 +524,30 @@ xfs_alloc_fixup_trees(
|
||||
*/
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
/*
|
||||
* Add new by-size btree entry(s).
|
||||
*/
|
||||
if (nfbno1 != NULLAGBLOCK) {
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 0))
|
||||
return -EFSCORRUPTED;
|
||||
if ((error = xfs_btree_insert(cnt_cur, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
if (nfbno2 != NULLAGBLOCK) {
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 0))
|
||||
return -EFSCORRUPTED;
|
||||
if ((error = xfs_btree_insert(cnt_cur, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
/*
|
||||
* Fix up the by-block btree entry(s).
|
||||
@@ -543,7 +558,8 @@ xfs_alloc_fixup_trees(
|
||||
*/
|
||||
if ((error = xfs_btree_delete(bno_cur, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
} else {
|
||||
/*
|
||||
* Update the by-block entry to start later|be shorter.
|
||||
@@ -557,10 +573,12 @@ xfs_alloc_fixup_trees(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(bno_cur, nfbno2, nflen2, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 0))
|
||||
return -EFSCORRUPTED;
|
||||
if ((error = xfs_btree_insert(bno_cur, &i)))
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -821,7 +839,8 @@ xfs_alloc_cur_check(
|
||||
error = xfs_alloc_get_rec(cur, &bno, &len, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(args->mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
/*
|
||||
* Check minlen and deactivate a cntbt cursor if out of acceptable size
|
||||
@@ -1026,7 +1045,10 @@ xfs_alloc_ag_vextent_small(
|
||||
error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i);
|
||||
if (error)
|
||||
goto error;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1058,9 +1080,12 @@ xfs_alloc_ag_vextent_small(
|
||||
}
|
||||
*fbnop = args->agbno = fbno;
|
||||
*flenp = args->len = 1;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp,
|
||||
fbno < be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
|
||||
error);
|
||||
if (XFS_IS_CORRUPT(args->mp,
|
||||
fbno >= be32_to_cpu(
|
||||
XFS_BUF_TO_AGF(args->agbp)->agf_length))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
args->wasfromfl = 1;
|
||||
trace_xfs_alloc_small_freelist(args);
|
||||
|
||||
@@ -1215,7 +1240,10 @@ xfs_alloc_ag_vextent_exact(
|
||||
error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
ASSERT(fbno <= args->agbno);
|
||||
|
||||
/*
|
||||
@@ -1494,7 +1522,8 @@ xfs_alloc_ag_vextent_lastblock(
|
||||
error = xfs_alloc_get_rec(acur->cnt, bno, len, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(args->mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
if (*len >= args->minlen)
|
||||
break;
|
||||
error = xfs_btree_increment(acur->cnt, 0, &i);
|
||||
@@ -1688,7 +1717,10 @@ restart:
|
||||
error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
|
||||
busy = xfs_alloc_compute_aligned(args, fbno, flen,
|
||||
&rbno, &rlen, &busy_gen);
|
||||
@@ -1722,8 +1754,13 @@ restart:
|
||||
* This can't happen in the second case above.
|
||||
*/
|
||||
rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 ||
|
||||
(rlen <= flen && rbno + rlen <= fbno + flen), error0);
|
||||
if (XFS_IS_CORRUPT(args->mp,
|
||||
rlen != 0 &&
|
||||
(rlen > flen ||
|
||||
rbno + rlen > fbno + flen))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if (rlen < args->maxlen) {
|
||||
xfs_agblock_t bestfbno;
|
||||
xfs_extlen_t bestflen;
|
||||
@@ -1742,15 +1779,22 @@ restart:
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if (flen < bestrlen)
|
||||
break;
|
||||
busy = xfs_alloc_compute_aligned(args, fbno, flen,
|
||||
&rbno, &rlen, &busy_gen);
|
||||
rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 ||
|
||||
(rlen <= flen && rbno + rlen <= fbno + flen),
|
||||
error0);
|
||||
if (XFS_IS_CORRUPT(args->mp,
|
||||
rlen != 0 &&
|
||||
(rlen > flen ||
|
||||
rbno + rlen > fbno + flen))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if (rlen > bestrlen) {
|
||||
bestrlen = rlen;
|
||||
bestrbno = rbno;
|
||||
@@ -1763,7 +1807,10 @@ restart:
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(args->mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
rlen = bestrlen;
|
||||
rbno = bestrbno;
|
||||
flen = bestflen;
|
||||
@@ -1786,7 +1833,10 @@ restart:
|
||||
xfs_alloc_fix_len(args);
|
||||
|
||||
rlen = args->len;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0);
|
||||
if (XFS_IS_CORRUPT(args->mp, rlen > flen)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Allocate and initialize a cursor for the by-block tree.
|
||||
*/
|
||||
@@ -1800,10 +1850,13 @@ restart:
|
||||
cnt_cur = bno_cur = NULL;
|
||||
args->len = rlen;
|
||||
args->agbno = rbno;
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp,
|
||||
args->agbno + args->len <=
|
||||
be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
|
||||
error0);
|
||||
if (XFS_IS_CORRUPT(args->mp,
|
||||
args->agbno + args->len >
|
||||
be32_to_cpu(
|
||||
XFS_BUF_TO_AGF(args->agbp)->agf_length))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
trace_xfs_alloc_size_done(args);
|
||||
return 0;
|
||||
|
||||
@@ -1875,7 +1928,10 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, <bno, <len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* It's not contiguous, though.
|
||||
*/
|
||||
@@ -1887,8 +1943,10 @@ xfs_free_ag_extent(
|
||||
* space was invalid, it's (partly) already free.
|
||||
* Very bad.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
ltbno + ltlen <= bno, error0);
|
||||
if (XFS_IS_CORRUPT(mp, ltbno + ltlen > bno)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
@@ -1903,7 +1961,10 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, >bno, >len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* It's not contiguous, though.
|
||||
*/
|
||||
@@ -1915,7 +1976,10 @@ xfs_free_ag_extent(
|
||||
* space was invalid, it's (partly) already free.
|
||||
* Very bad.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, gtbno >= bno + len, error0);
|
||||
if (XFS_IS_CORRUPT(mp, bno + len > gtbno)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
@@ -1932,31 +1996,49 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Delete the old by-size entry on the right.
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Delete the old by-block entry for the right block.
|
||||
*/
|
||||
if ((error = xfs_btree_delete(bno_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Move the by-block cursor back to the left neighbor.
|
||||
*/
|
||||
if ((error = xfs_btree_decrement(bno_cur, 0, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Check that this is the right record: delete didn't
|
||||
@@ -1969,9 +2051,13 @@ xfs_free_ag_extent(
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
i == 1 && xxbno == ltbno && xxlen == ltlen,
|
||||
error0);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
i != 1 ||
|
||||
xxbno != ltbno ||
|
||||
xxlen != ltlen)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
@@ -1992,17 +2078,26 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Back up the by-block cursor to the left neighbor, and
|
||||
* update its length.
|
||||
*/
|
||||
if ((error = xfs_btree_decrement(bno_cur, 0, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
nbno = ltbno;
|
||||
nlen = len + ltlen;
|
||||
if ((error = xfs_alloc_update(bno_cur, nbno, nlen)))
|
||||
@@ -2018,10 +2113,16 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Update the starting block and length of the right
|
||||
* neighbor in the by-block tree.
|
||||
@@ -2040,7 +2141,10 @@ xfs_free_ag_extent(
|
||||
nlen = len;
|
||||
if ((error = xfs_btree_insert(bno_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
|
||||
bno_cur = NULL;
|
||||
@@ -2049,10 +2153,16 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 0, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 0)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if ((error = xfs_btree_insert(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
|
||||
cnt_cur = NULL;
|
||||
|
||||
@@ -3177,12 +3287,18 @@ __xfs_free_extent(
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, agbno < mp->m_sb.sb_agblocks, err);
|
||||
if (XFS_IS_CORRUPT(mp, agbno >= mp->m_sb.sb_agblocks)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* validate the extent size is legal now we have the agf locked */
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
agbno + len <= be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_length),
|
||||
err);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
agbno + len >
|
||||
be32_to_cpu(XFS_BUF_TO_AGF(agbp)->agf_length))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto err;
|
||||
}
|
||||
|
||||
error = xfs_free_ag_extent(tp, agbp, agno, agbno, len, oinfo, type);
|
||||
if (error)
|
||||
|
Reference in New Issue
Block a user