mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
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:
parent
1ec28615d2
commit
f9e0370648
9 changed files with 956 additions and 329 deletions
|
@ -544,7 +544,10 @@ xfs_inobt_insert_sprec(
|
|||
nrec->ir_free, &i);
|
||||
if (error)
|
||||
goto error;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
@ -557,17 +560,23 @@ xfs_inobt_insert_sprec(
|
|||
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||
if (error)
|
||||
goto error;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
rec.ir_startino == nrec->ir_startino,
|
||||
error);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
if (XFS_IS_CORRUPT(mp, rec.ir_startino != nrec->ir_startino)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/*
|
||||
* This should never fail. If we have coexisting records that
|
||||
* cannot merge, something is seriously wrong.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, __xfs_inobt_can_merge(nrec, &rec),
|
||||
error);
|
||||
if (XFS_IS_CORRUPT(mp, !__xfs_inobt_can_merge(nrec, &rec))) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
trace_xfs_irec_merge_pre(mp, agno, rec.ir_startino,
|
||||
rec.ir_holemask, nrec->ir_startino,
|
||||
|
@ -1057,7 +1066,8 @@ xfs_ialloc_next_rec(
|
|||
error = xfs_inobt_get_rec(cur, rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1081,7 +1091,8 @@ xfs_ialloc_get_rec(
|
|||
error = xfs_inobt_get_rec(cur, rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1161,12 +1172,18 @@ xfs_dialloc_ag_inobt(
|
|||
error = xfs_inobt_lookup(cur, pagino, XFS_LOOKUP_LE, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
|
||||
error = xfs_inobt_get_rec(cur, &rec, &j);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, j == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, j != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
|
||||
if (rec.ir_freecount > 0) {
|
||||
/*
|
||||
|
@ -1321,19 +1338,28 @@ xfs_dialloc_ag_inobt(
|
|||
error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
if (rec.ir_freecount > 0)
|
||||
break;
|
||||
error = xfs_btree_increment(cur, 0, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
}
|
||||
|
||||
alloc_inode:
|
||||
|
@ -1393,7 +1419,8 @@ xfs_dialloc_ag_finobt_near(
|
|||
error = xfs_inobt_get_rec(lcur, rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(lcur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(lcur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
/*
|
||||
* See if we've landed in the parent inode record. The finobt
|
||||
|
@ -1416,10 +1443,16 @@ xfs_dialloc_ag_finobt_near(
|
|||
error = xfs_inobt_get_rec(rcur, &rrec, &j);
|
||||
if (error)
|
||||
goto error_rcur;
|
||||
XFS_WANT_CORRUPTED_GOTO(lcur->bc_mp, j == 1, error_rcur);
|
||||
if (XFS_IS_CORRUPT(lcur->bc_mp, j != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error_rcur;
|
||||
}
|
||||
}
|
||||
|
||||
XFS_WANT_CORRUPTED_GOTO(lcur->bc_mp, i == 1 || j == 1, error_rcur);
|
||||
if (XFS_IS_CORRUPT(lcur->bc_mp, i != 1 && j != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error_rcur;
|
||||
}
|
||||
if (i == 1 && j == 1) {
|
||||
/*
|
||||
* Both the left and right records are valid. Choose the closer
|
||||
|
@ -1472,7 +1505,8 @@ xfs_dialloc_ag_finobt_newino(
|
|||
error = xfs_inobt_get_rec(cur, rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1483,12 +1517,14 @@ xfs_dialloc_ag_finobt_newino(
|
|||
error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
error = xfs_inobt_get_rec(cur, rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1510,20 +1546,24 @@ xfs_dialloc_ag_update_inobt(
|
|||
error = xfs_inobt_lookup(cur, frec->ir_startino, XFS_LOOKUP_EQ, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||
if (error)
|
||||
return error;
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
|
||||
return -EFSCORRUPTED;
|
||||
ASSERT((XFS_AGINO_TO_OFFSET(cur->bc_mp, rec.ir_startino) %
|
||||
XFS_INODES_PER_CHUNK) == 0);
|
||||
|
||||
rec.ir_free &= ~XFS_INOBT_MASK(offset);
|
||||
rec.ir_freecount--;
|
||||
|
||||
XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, (rec.ir_free == frec->ir_free) &&
|
||||
(rec.ir_freecount == frec->ir_freecount));
|
||||
if (XFS_IS_CORRUPT(cur->bc_mp,
|
||||
rec.ir_free != frec->ir_free ||
|
||||
rec.ir_freecount != frec->ir_freecount))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
return xfs_inobt_update(cur, &rec);
|
||||
}
|
||||
|
@ -1933,14 +1973,20 @@ xfs_difree_inobt(
|
|||
__func__, error);
|
||||
goto error0;
|
||||
}
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||
if (error) {
|
||||
xfs_warn(mp, "%s: xfs_inobt_get_rec() returned error %d.",
|
||||
__func__, error);
|
||||
goto error0;
|
||||
}
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error0;
|
||||
}
|
||||
/*
|
||||
* Get the offset in the inode chunk.
|
||||
*/
|
||||
|
@ -2052,7 +2098,10 @@ xfs_difree_finobt(
|
|||
* freed an inode in a previously fully allocated chunk. If not,
|
||||
* something is out of sync.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, ibtrec->ir_freecount == 1, error);
|
||||
if (XFS_IS_CORRUPT(mp, ibtrec->ir_freecount != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
error = xfs_inobt_insert_rec(cur, ibtrec->ir_holemask,
|
||||
ibtrec->ir_count,
|
||||
|
@ -2075,14 +2124,20 @@ xfs_difree_finobt(
|
|||
error = xfs_inobt_get_rec(cur, &rec, &i);
|
||||
if (error)
|
||||
goto error;
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error);
|
||||
if (XFS_IS_CORRUPT(mp, i != 1)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
rec.ir_free |= XFS_INOBT_MASK(offset);
|
||||
rec.ir_freecount++;
|
||||
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, (rec.ir_free == ibtrec->ir_free) &&
|
||||
(rec.ir_freecount == ibtrec->ir_freecount),
|
||||
error);
|
||||
if (XFS_IS_CORRUPT(mp,
|
||||
rec.ir_free != ibtrec->ir_free ||
|
||||
rec.ir_freecount != ibtrec->ir_freecount)) {
|
||||
error = -EFSCORRUPTED;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/*
|
||||
* The content of inobt records should always match between the inobt
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue