xfs: pass mp to XFS_WANT_CORRUPTED_GOTO
Today, if we hit an XFS_WANT_CORRUPTED_GOTO we don't print any information about which filesystem hit it. Passing in the mp allows us to print the filesystem (device) name, which is a pretty critical piece of information. Tested by running fsfuzzer 'til I hit some. Signed-off-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:

committed by
Dave Chinner

parent
58c904734c
commit
c29aad4115
@@ -682,7 +682,7 @@ xfs_alloc_ag_vextent_exact(
|
||||
error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
ASSERT(fbno <= args->agbno);
|
||||
|
||||
/*
|
||||
@@ -783,7 +783,7 @@ xfs_alloc_find_best_extent(
|
||||
error = xfs_alloc_get_rec(*scur, sbno, slen, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
xfs_alloc_compute_aligned(args, *sbno, *slen, sbnoa, slena);
|
||||
|
||||
/*
|
||||
@@ -946,7 +946,7 @@ restart:
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, <bno,
|
||||
<len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (ltlen >= args->minlen)
|
||||
break;
|
||||
if ((error = xfs_btree_increment(cnt_cur, 0, &i)))
|
||||
@@ -966,7 +966,7 @@ restart:
|
||||
*/
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
xfs_alloc_compute_aligned(args, ltbno, ltlen,
|
||||
<bnoa, <lena);
|
||||
if (ltlena < args->minlen)
|
||||
@@ -999,7 +999,7 @@ restart:
|
||||
cnt_cur->bc_ptrs[0] = besti;
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length));
|
||||
args->len = blen;
|
||||
if (!xfs_alloc_fix_minleft(args)) {
|
||||
@@ -1088,7 +1088,7 @@ restart:
|
||||
if (bno_cur_lt) {
|
||||
if ((error = xfs_alloc_get_rec(bno_cur_lt, <bno, <len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
xfs_alloc_compute_aligned(args, ltbno, ltlen,
|
||||
<bnoa, <lena);
|
||||
if (ltlena >= args->minlen)
|
||||
@@ -1104,7 +1104,7 @@ restart:
|
||||
if (bno_cur_gt) {
|
||||
if ((error = xfs_alloc_get_rec(bno_cur_gt, >bno, >len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
xfs_alloc_compute_aligned(args, gtbno, gtlen,
|
||||
>bnoa, >lena);
|
||||
if (gtlena >= args->minlen)
|
||||
@@ -1303,7 +1303,7 @@ restart:
|
||||
error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i);
|
||||
if (error)
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
|
||||
xfs_alloc_compute_aligned(args, fbno, flen,
|
||||
&rbno, &rlen);
|
||||
@@ -1342,7 +1342,7 @@ restart:
|
||||
* This can't happen in the second case above.
|
||||
*/
|
||||
rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
|
||||
XFS_WANT_CORRUPTED_GOTO(rlen == 0 ||
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 ||
|
||||
(rlen <= flen && rbno + rlen <= fbno + flen), error0);
|
||||
if (rlen < args->maxlen) {
|
||||
xfs_agblock_t bestfbno;
|
||||
@@ -1362,13 +1362,13 @@ restart:
|
||||
if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
if (flen < bestrlen)
|
||||
break;
|
||||
xfs_alloc_compute_aligned(args, fbno, flen,
|
||||
&rbno, &rlen);
|
||||
rlen = XFS_EXTLEN_MIN(args->maxlen, rlen);
|
||||
XFS_WANT_CORRUPTED_GOTO(rlen == 0 ||
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 ||
|
||||
(rlen <= flen && rbno + rlen <= fbno + flen),
|
||||
error0);
|
||||
if (rlen > bestrlen) {
|
||||
@@ -1383,7 +1383,7 @@ restart:
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
rlen = bestrlen;
|
||||
rbno = bestrbno;
|
||||
flen = bestflen;
|
||||
@@ -1408,7 +1408,7 @@ restart:
|
||||
if (!xfs_alloc_fix_minleft(args))
|
||||
goto out_nominleft;
|
||||
rlen = args->len;
|
||||
XFS_WANT_CORRUPTED_GOTO(rlen <= flen, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0);
|
||||
/*
|
||||
* Allocate and initialize a cursor for the by-block tree.
|
||||
*/
|
||||
@@ -1422,7 +1422,7 @@ restart:
|
||||
cnt_cur = bno_cur = NULL;
|
||||
args->len = rlen;
|
||||
args->agbno = rbno;
|
||||
XFS_WANT_CORRUPTED_GOTO(
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp,
|
||||
args->agbno + args->len <=
|
||||
be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
|
||||
error0);
|
||||
@@ -1467,7 +1467,7 @@ xfs_alloc_ag_vextent_small(
|
||||
if (i) {
|
||||
if ((error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0);
|
||||
}
|
||||
/*
|
||||
* Nothing in the btree, try the freelist. Make sure
|
||||
@@ -1493,7 +1493,7 @@ xfs_alloc_ag_vextent_small(
|
||||
}
|
||||
args->len = 1;
|
||||
args->agbno = fbno;
|
||||
XFS_WANT_CORRUPTED_GOTO(
|
||||
XFS_WANT_CORRUPTED_GOTO(args->mp,
|
||||
args->agbno + args->len <=
|
||||
be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
|
||||
error0);
|
||||
@@ -1579,7 +1579,7 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, <bno, <len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
/*
|
||||
* It's not contiguous, though.
|
||||
*/
|
||||
@@ -1591,7 +1591,8 @@ xfs_free_ag_extent(
|
||||
* space was invalid, it's (partly) already free.
|
||||
* Very bad.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(ltbno + ltlen <= bno, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
ltbno + ltlen <= bno, error0);
|
||||
}
|
||||
}
|
||||
/*
|
||||
@@ -1606,7 +1607,7 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, >bno, >len, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
/*
|
||||
* It's not contiguous, though.
|
||||
*/
|
||||
@@ -1618,7 +1619,7 @@ xfs_free_ag_extent(
|
||||
* space was invalid, it's (partly) already free.
|
||||
* Very bad.
|
||||
*/
|
||||
XFS_WANT_CORRUPTED_GOTO(gtbno >= bno + len, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, gtbno >= bno + len, error0);
|
||||
}
|
||||
}
|
||||
/*
|
||||
@@ -1635,31 +1636,31 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, 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(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, 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(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, 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(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Check that this is the right record: delete didn't
|
||||
@@ -1672,7 +1673,7 @@ xfs_free_ag_extent(
|
||||
if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen,
|
||||
&i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(
|
||||
XFS_WANT_CORRUPTED_GOTO(mp,
|
||||
i == 1 && xxbno == ltbno && xxlen == ltlen,
|
||||
error0);
|
||||
}
|
||||
@@ -1695,17 +1696,17 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, 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(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
nbno = ltbno;
|
||||
nlen = len + ltlen;
|
||||
if ((error = xfs_alloc_update(bno_cur, nbno, nlen)))
|
||||
@@ -1721,10 +1722,10 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
if ((error = xfs_btree_delete(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
/*
|
||||
* Update the starting block and length of the right
|
||||
* neighbor in the by-block tree.
|
||||
@@ -1743,7 +1744,7 @@ xfs_free_ag_extent(
|
||||
nlen = len;
|
||||
if ((error = xfs_btree_insert(bno_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
}
|
||||
xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR);
|
||||
bno_cur = NULL;
|
||||
@@ -1752,10 +1753,10 @@ xfs_free_ag_extent(
|
||||
*/
|
||||
if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 0, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 0, error0);
|
||||
if ((error = xfs_btree_insert(cnt_cur, &i)))
|
||||
goto error0;
|
||||
XFS_WANT_CORRUPTED_GOTO(i == 1, error0);
|
||||
XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0);
|
||||
xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR);
|
||||
cnt_cur = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user