]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs: kill the XFS_WANT_CORRUPT_* macros
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 22 Jan 2020 16:29:44 +0000 (11:29 -0500)
committerEric Sandeen <sandeen@redhat.com>
Wed, 22 Jan 2020 16:29:44 +0000 (11:29 -0500)
Source kernel commit: f9e0370648b9f9908ec97f44459a1152aecbbf45

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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/libxfs_priv.h
libxfs/xfs_alloc.c
libxfs/xfs_bmap.c
libxfs/xfs_btree.c
libxfs/xfs_ialloc.c
libxfs/xfs_refcount.c
libxfs/xfs_rmap.c

index 90b41f0788e9893d68c85b18cb5b92500cb33655..462ab421a668ed26c73776e444e6a4656beb4efb 100644 (file)
@@ -146,6 +146,14 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
        cmn_err(CE_ALERT, "%s: XFS_ERROR_REPORT", (e));  \
 } while (0)
 
+#define XFS_WARN_CORRUPT(mp, expr) \
+       ( ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED) ? \
+          (printf("%s: XFS_WARN_CORRUPT at %s:%d", #expr, \
+                  __func__, __LINE__), true) : true)
+
+#define XFS_IS_CORRUPT(mp, expr)       \
+       (unlikely(expr) ? XFS_WARN_CORRUPT((mp), (expr)) : false)
+
 #define XFS_ERRLEVEL_LOW               1
 #define XFS_FORCED_SHUTDOWN(mp)                0
 #define XFS_ILOCK_EXCL                 0
@@ -153,25 +161,6 @@ enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
 #define XFS_STATS_DEC(mp, count, x)    do { (mp) = (mp); } while (0)
 #define XFS_STATS_ADD(mp, count, x)    do { (mp) = (mp); } while (0)
 #define XFS_TEST_ERROR(expr,a,b)       ( expr )
-#define XFS_WANT_CORRUPTED_GOTO(mp, expr, l)                           \
-{                                                                      \
-       if (!(expr)) {                                                  \
-               if ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED)        \
-                       printf("WANT_CORRUPTED_GOTO at %s:%d\n",        \
-                               __func__, __LINE__);                    \
-               error = -EFSCORRUPTED;                                  \
-               goto l;                                                 \
-       }                                                               \
-}
-#define XFS_WANT_CORRUPTED_RETURN(mp, expr)                            \
-{                                                                      \
-       if (!(expr)) {                                                  \
-               if ((mp)->m_flags & LIBXFS_MOUNT_WANT_CORRUPTED)        \
-                       printf("WANT_CORRUPTED_RETURN at %s:%d\n",      \
-                               __func__, __LINE__);                    \
-               return -EFSCORRUPTED;                                   \
-       }                                                               \
-}
 
 #ifdef __GNUC__
 #define __return_address       __builtin_return_address(0)
index 75e5a924e62b73527bdfac4381fbd7036087eaaf..28b30d4e17612daa5d2e99b49bb60c9e9e6d2b5e 100644 (file)
@@ -446,13 +446,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.
@@ -461,13 +465,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
@@ -478,8 +486,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
 
@@ -509,25 +519,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).
@@ -538,7 +553,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.
@@ -552,10 +568,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;
 }
@@ -816,7 +834,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
@@ -1021,7 +1040,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;
        }
 
@@ -1053,9 +1075,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);
 
@@ -1210,7 +1235,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);
 
        /*
@@ -1489,7 +1517,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);
@@ -1683,7 +1712,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);
@@ -1717,8 +1749,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;
@@ -1737,15 +1774,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;
@@ -1758,7 +1802,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;
@@ -1781,7 +1828,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.
         */
@@ -1795,10 +1845,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;
 
@@ -1870,7 +1923,10 @@ xfs_free_ag_extent(
                 */
                if ((error = xfs_alloc_get_rec(bno_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;
+               }
                /*
                 * It's not contiguous, though.
                 */
@@ -1882,8 +1938,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;
+                       }
                }
        }
        /*
@@ -1898,7 +1956,10 @@ xfs_free_ag_extent(
                 */
                if ((error = xfs_alloc_get_rec(bno_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;
+               }
                /*
                 * It's not contiguous, though.
                 */
@@ -1910,7 +1971,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;
+                       }
                }
        }
        /*
@@ -1927,31 +1991,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
@@ -1964,9 +2046,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
                /*
@@ -1987,17 +2073,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)))
@@ -2013,10 +2108,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.
@@ -2035,7 +2136,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;
@@ -2044,10 +2148,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;
 
@@ -3172,12 +3282,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)
index d46013405a41623b08d1c1f81cb0d8d85e98a241..40b73b0e7694cc5b578acbf39575362845801664 100644 (file)
@@ -376,8 +376,10 @@ xfs_bmap_check_leaf_extents(
                xfs_check_block(block, mp, 0, 0);
                pp = XFS_BMBT_PTR_ADDR(mp, block, 1, mp->m_bmap_dmxr[1]);
                bno = be64_to_cpu(*pp);
-               XFS_WANT_CORRUPTED_GOTO(mp,
-                                       xfs_verify_fsbno(mp, bno), error0);
+               if (XFS_IS_CORRUPT(mp, !xfs_verify_fsbno(mp, bno))) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
                if (bp_release) {
                        bp_release = 0;
                        xfs_trans_brelse(NULL, bp);
@@ -604,8 +606,8 @@ xfs_bmap_btree_to_extents(
        pp = XFS_BMAP_BROOT_PTR_ADDR(mp, rblock, 1, ifp->if_broot_bytes);
        cbno = be64_to_cpu(*pp);
 #ifdef DEBUG
-       XFS_WANT_CORRUPTED_RETURN(cur->bc_mp,
-                       xfs_btree_check_lptr(cur, cbno, 1));
+       if (XFS_IS_CORRUPT(cur->bc_mp, !xfs_btree_check_lptr(cur, cbno, 1)))
+               return -EFSCORRUPTED;
 #endif
        error = xfs_btree_read_bufl(mp, tp, cbno, &cbp, XFS_BMAP_BTREE_REF,
                                &xfs_bmbt_buf_ops);
@@ -930,7 +932,10 @@ xfs_bmap_add_attrfork_btree(
                if (error)
                        goto error0;
                /* must be at least one entry */
-               XFS_WANT_CORRUPTED_GOTO(mp, stat == 1, error0);
+               if (XFS_IS_CORRUPT(mp, stat != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
                if ((error = xfs_btree_new_iroot(cur, flags, &stat)))
                        goto error0;
                if (stat == 0) {
@@ -1611,15 +1616,24 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, &RIGHT, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_delete(bma->cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_decrement(bma->cur, 0, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(bma->cur, &LEFT);
                        if (error)
                                goto done;
@@ -1645,7 +1659,10 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(bma->cur, &LEFT);
                        if (error)
                                goto done;
@@ -1675,7 +1692,10 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, &RIGHT, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(bma->cur, &PREV);
                        if (error)
                                goto done;
@@ -1700,11 +1720,17 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
                break;
 
@@ -1735,7 +1761,10 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(bma->cur, &LEFT);
                        if (error)
                                goto done;
@@ -1756,11 +1785,17 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
 
                if (xfs_bmap_needs_btree(bma->ip, whichfork)) {
@@ -1801,7 +1836,10 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(bma->cur, &RIGHT);
                        if (error)
                                goto done;
@@ -1833,11 +1871,17 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
 
                if (xfs_bmap_needs_btree(bma->ip, whichfork)) {
@@ -1913,11 +1957,17 @@ xfs_bmap_add_extent_delay_real(
                        error = xfs_bmbt_lookup_eq(bma->cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_insert(bma->cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
 
                if (xfs_bmap_needs_btree(bma->ip, whichfork)) {
@@ -2111,19 +2161,34 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &RIGHT, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_delete(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_decrement(cur, 0, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_delete(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_decrement(cur, 0, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &LEFT);
                        if (error)
                                goto done;
@@ -2149,13 +2214,22 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &PREV, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_delete(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_decrement(cur, 0, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &LEFT);
                        if (error)
                                goto done;
@@ -2184,13 +2258,22 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &RIGHT, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_delete(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_decrement(cur, 0, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
@@ -2213,7 +2296,10 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
@@ -2243,7 +2329,10 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
@@ -2277,14 +2366,20 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
                        cur->bc_rec.b = *new;
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
                break;
 
@@ -2311,7 +2406,10 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
@@ -2345,17 +2443,26 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &PREV);
                        if (error)
                                goto done;
                        error = xfs_bmbt_lookup_eq(cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
                break;
 
@@ -2389,7 +2496,10 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        /* new right extent - oldext */
                        error = xfs_bmbt_update(cur, &r[1]);
                        if (error)
@@ -2398,7 +2508,10 @@ xfs_bmap_add_extent_unwritten_real(
                        cur->bc_rec.b = PREV;
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        /*
                         * Reset the cursor to the position of the new extent
                         * we are about to insert as we can't trust it after
@@ -2407,11 +2520,17 @@ xfs_bmap_add_extent_unwritten_real(
                        error = xfs_bmbt_lookup_eq(cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        /* new middle extent - newext */
                        if ((error = xfs_btree_insert(cur, &i)))
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
                break;
 
@@ -2694,15 +2813,24 @@ xfs_bmap_add_extent_hole_real(
                        error = xfs_bmbt_lookup_eq(cur, &right, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_delete(cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_decrement(cur, 0, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &left);
                        if (error)
                                goto done;
@@ -2728,7 +2856,10 @@ xfs_bmap_add_extent_hole_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &left);
                        if (error)
                                goto done;
@@ -2755,7 +2886,10 @@ xfs_bmap_add_extent_hole_real(
                        error = xfs_bmbt_lookup_eq(cur, &old, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_bmbt_update(cur, &right);
                        if (error)
                                goto done;
@@ -2778,11 +2912,17 @@ xfs_bmap_add_extent_hole_real(
                        error = xfs_bmbt_lookup_eq(cur, new, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+                       if (XFS_IS_CORRUPT(mp, i != 0)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                        error = xfs_btree_insert(cur, &i);
                        if (error)
                                goto done;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                }
                break;
        }
@@ -4972,7 +5112,10 @@ xfs_bmap_del_extent_real(
                error = xfs_bmbt_lookup_eq(cur, &got, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
        }
 
        if (got.br_startoff == del->br_startoff)
@@ -4996,7 +5139,10 @@ xfs_bmap_del_extent_real(
                }
                if ((error = xfs_btree_delete(cur, &i)))
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                break;
        case BMAP_LEFT_FILLING:
                /*
@@ -5067,7 +5213,10 @@ xfs_bmap_del_extent_real(
                                error = xfs_bmbt_lookup_eq(cur, &got, &i);
                                if (error)
                                        goto done;
-                               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                                       error = -EFSCORRUPTED;
+                                       goto done;
+                               }
                                /*
                                 * Update the btree record back
                                 * to the original value.
@@ -5084,7 +5233,10 @@ xfs_bmap_del_extent_real(
                                error = -ENOSPC;
                                goto done;
                        }
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto done;
+                       }
                } else
                        flags |= xfs_ilog_fext(whichfork);
                XFS_IFORK_NEXT_SET(ip, whichfork,
@@ -5567,18 +5719,21 @@ xfs_bmse_merge(
        error = xfs_bmbt_lookup_eq(cur, got, &i);
        if (error)
                return error;
-       XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
+       if (XFS_IS_CORRUPT(mp, i != 1))
+               return -EFSCORRUPTED;
 
        error = xfs_btree_delete(cur, &i);
        if (error)
                return error;
-       XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
+       if (XFS_IS_CORRUPT(mp, i != 1))
+               return -EFSCORRUPTED;
 
        /* lookup and update size of the previous extent */
        error = xfs_bmbt_lookup_eq(cur, left, &i);
        if (error)
                return error;
-       XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
+       if (XFS_IS_CORRUPT(mp, i != 1))
+               return -EFSCORRUPTED;
 
        error = xfs_bmbt_update(cur, &new);
        if (error)
@@ -5626,7 +5781,8 @@ xfs_bmap_shift_update_extent(
                error = xfs_bmbt_lookup_eq(cur, &prev, &i);
                if (error)
                        return error;
-               XFS_WANT_CORRUPTED_RETURN(mp, i == 1);
+               if (XFS_IS_CORRUPT(mp, i != 1))
+                       return -EFSCORRUPTED;
 
                error = xfs_bmbt_update(cur, got);
                if (error)
@@ -5689,8 +5845,10 @@ xfs_bmap_collapse_extents(
                *done = true;
                goto del_cursor;
        }
-       XFS_WANT_CORRUPTED_GOTO(mp, !isnullstartblock(got.br_startblock),
-                               del_cursor);
+       if (XFS_IS_CORRUPT(mp, isnullstartblock(got.br_startblock))) {
+               error = -EFSCORRUPTED;
+               goto del_cursor;
+       }
 
        new_startoff = got.br_startoff - offset_shift_fsb;
        if (xfs_iext_peek_prev_extent(ifp, &icur, &prev)) {
@@ -5815,8 +5973,10 @@ xfs_bmap_insert_extents(
                        goto del_cursor;
                }
        }
-       XFS_WANT_CORRUPTED_GOTO(mp, !isnullstartblock(got.br_startblock),
-                               del_cursor);
+       if (XFS_IS_CORRUPT(mp, isnullstartblock(got.br_startblock))) {
+               error = -EFSCORRUPTED;
+               goto del_cursor;
+       }
 
        if (stop_fsb >= got.br_startoff + got.br_blockcount) {
                ASSERT(0);
@@ -5923,7 +6083,10 @@ xfs_bmap_split_extent_at(
                error = xfs_bmbt_lookup_eq(cur, &got, &i);
                if (error)
                        goto del_cursor;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, del_cursor);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto del_cursor;
+               }
        }
 
        got.br_blockcount = gotblkcnt;
@@ -5948,11 +6111,17 @@ xfs_bmap_split_extent_at(
                error = xfs_bmbt_lookup_eq(cur, &new, &i);
                if (error)
                        goto del_cursor;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 0, del_cursor);
+               if (XFS_IS_CORRUPT(mp, i != 0)) {
+                       error = -EFSCORRUPTED;
+                       goto del_cursor;
+               }
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto del_cursor;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, del_cursor);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto del_cursor;
+               }
        }
 
        /*
index 6e051e3c2dce46828c0bc2b1512f6e8214256001..03ac240e059dd4941b523b0402b1f664b3a0cc37 100644 (file)
@@ -1966,7 +1966,8 @@ xfs_btree_lookup(
                        error = xfs_btree_increment(cur, 0, &i);
                        if (error)
                                goto error0;
-                       XFS_WANT_CORRUPTED_RETURN(cur->bc_mp, i == 1);
+                       if (XFS_IS_CORRUPT(cur->bc_mp, i != 1))
+                               return -EFSCORRUPTED;
                        *stat = 1;
                        return 0;
                }
@@ -2421,7 +2422,10 @@ xfs_btree_lshift(
                if (error)
                        goto error0;
                i = xfs_btree_firstrec(tcur, level);
-               XFS_WANT_CORRUPTED_GOTO(tcur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(tcur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                error = xfs_btree_decrement(tcur, level, &i);
                if (error)
@@ -2588,7 +2592,10 @@ xfs_btree_rshift(
        if (error)
                goto error0;
        i = xfs_btree_lastrec(tcur, level);
-       XFS_WANT_CORRUPTED_GOTO(tcur->bc_mp, i == 1, error0);
+       if (XFS_IS_CORRUPT(tcur->bc_mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto error0;
+       }
 
        error = xfs_btree_increment(tcur, level, &i);
        if (error)
@@ -3446,7 +3453,10 @@ xfs_btree_insert(
                        goto error0;
                }
 
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
                level++;
 
                /*
@@ -3850,15 +3860,24 @@ xfs_btree_delrec(
                 * Actually any entry but the first would suffice.
                 */
                i = xfs_btree_lastrec(tcur, level);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                error = xfs_btree_increment(tcur, level, &i);
                if (error)
                        goto error0;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                i = xfs_btree_lastrec(tcur, level);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                /* Grab a pointer to the block. */
                right = xfs_btree_get_block(tcur, level, &rbp);
@@ -3902,12 +3921,18 @@ xfs_btree_delrec(
                rrecs = xfs_btree_get_numrecs(right);
                if (!xfs_btree_ptr_is_null(cur, &lptr)) {
                        i = xfs_btree_firstrec(tcur, level);
-                       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+                       if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto error0;
+                       }
 
                        error = xfs_btree_decrement(tcur, level, &i);
                        if (error)
                                goto error0;
-                       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+                       if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto error0;
+                       }
                }
        }
 
@@ -3921,13 +3946,19 @@ xfs_btree_delrec(
                 * previous block.
                 */
                i = xfs_btree_firstrec(tcur, level);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                error = xfs_btree_decrement(tcur, level, &i);
                if (error)
                        goto error0;
                i = xfs_btree_firstrec(tcur, level);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, error0);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto error0;
+               }
 
                /* Grab a pointer to the block. */
                left = xfs_btree_get_block(tcur, level, &lbp);
index f039b2871f30b0229c3318b0e69bd34009823dd9..71e7d0f6df9e091eedf16dd8448d05527a2309f7 100644 (file)
@@ -538,7 +538,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;
        }
@@ -551,17 +554,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,
@@ -1051,7 +1060,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;
@@ -1075,7 +1085,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;
@@ -1155,12 +1166,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) {
                        /*
@@ -1315,19 +1332,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:
@@ -1387,7 +1413,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
@@ -1410,10 +1437,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
@@ -1466,7 +1499,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;
                }
        }
@@ -1477,12 +1511,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;
 }
@@ -1504,20 +1540,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);
 }
@@ -1927,14 +1967,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.
         */
@@ -2046,7 +2092,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,
@@ -2069,14 +2118,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
index c68a018ad2f9375bb32564beaa6824c1c2b8cd8e..b592d7f4a421cc10749216bd14efe1a82bc9cf0d 100644 (file)
@@ -198,7 +198,10 @@ xfs_refcount_insert(
        error = xfs_btree_insert(cur, i);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, *i == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, *i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
 out_error:
        if (error)
@@ -225,10 +228,16 @@ xfs_refcount_delete(
        error = xfs_refcount_get_rec(cur, &irec, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        trace_xfs_refcount_delete(cur->bc_mp, cur->bc_private.a.agno, &irec);
        error = xfs_btree_delete(cur, i);
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, *i == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, *i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        if (error)
                goto out_error;
        error = xfs_refcount_lookup_ge(cur, irec.rc_startblock, &found_rec);
@@ -347,7 +356,10 @@ xfs_refcount_split_extent(
        error = xfs_refcount_get_rec(cur, &rcext, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        if (rcext.rc_startblock == agbno || xfs_refc_next(&rcext) <= agbno)
                return 0;
 
@@ -369,7 +381,10 @@ xfs_refcount_split_extent(
        error = xfs_refcount_insert(cur, &tmp, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        return error;
 
 out_error:
@@ -408,19 +423,27 @@ xfs_refcount_merge_center_extents(
                        &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        error = xfs_refcount_delete(cur, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        if (center->rc_refcount > 1) {
                error = xfs_refcount_delete(cur, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        }
 
        /* Enlarge the left extent. */
@@ -428,7 +451,10 @@ xfs_refcount_merge_center_extents(
                        &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        left->rc_blockcount = extlen;
        error = xfs_refcount_update(cur, left);
@@ -467,14 +493,18 @@ xfs_refcount_merge_left_extent(
                                &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                error = xfs_refcount_delete(cur, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        }
 
        /* Enlarge the left extent. */
@@ -482,7 +512,10 @@ xfs_refcount_merge_left_extent(
                        &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        left->rc_blockcount += cleft->rc_blockcount;
        error = xfs_refcount_update(cur, left);
@@ -524,14 +557,18 @@ xfs_refcount_merge_right_extent(
                        &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                error = xfs_refcount_delete(cur, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        }
 
        /* Enlarge the right extent. */
@@ -539,7 +576,10 @@ xfs_refcount_merge_right_extent(
                        &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        right->rc_startblock -= cright->rc_blockcount;
        right->rc_blockcount += cright->rc_blockcount;
@@ -585,7 +625,10 @@ xfs_refcount_find_left_extents(
        error = xfs_refcount_get_rec(cur, &tmp, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        if (xfs_refc_next(&tmp) != agbno)
                return 0;
@@ -603,8 +646,10 @@ xfs_refcount_find_left_extents(
                error = xfs_refcount_get_rec(cur, &tmp, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                /* if tmp starts at the end of our range, just use that */
                if (tmp.rc_startblock == agbno)
@@ -669,7 +714,10 @@ xfs_refcount_find_right_extents(
        error = xfs_refcount_get_rec(cur, &tmp, &found_rec);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        if (tmp.rc_startblock != agbno + aglen)
                return 0;
@@ -687,8 +735,10 @@ xfs_refcount_find_right_extents(
                error = xfs_refcount_get_rec(cur, &tmp, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, found_rec == 1,
-                               out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                /* if tmp ends at the end of our range, just use that */
                if (xfs_refc_next(&tmp) == agbno + aglen)
@@ -911,8 +961,11 @@ xfs_refcount_adjust_extents(
                                                &found_tmp);
                                if (error)
                                        goto out_error;
-                               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                                               found_tmp == 1, out_error);
+                               if (XFS_IS_CORRUPT(cur->bc_mp,
+                                                  found_tmp != 1)) {
+                                       error = -EFSCORRUPTED;
+                                       goto out_error;
+                               }
                                cur->bc_private.a.priv.refc.nr_ops++;
                        } else {
                                fsbno = XFS_AGB_TO_FSB(cur->bc_mp,
@@ -953,8 +1006,10 @@ xfs_refcount_adjust_extents(
                        error = xfs_refcount_delete(cur, &found_rec);
                        if (error)
                                goto out_error;
-                       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                                       found_rec == 1, out_error);
+                       if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto out_error;
+                       }
                        cur->bc_private.a.priv.refc.nr_ops++;
                        goto advloop;
                } else {
@@ -1270,7 +1325,10 @@ xfs_refcount_find_shared(
        error = xfs_refcount_get_rec(cur, &tmp, &i);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, out_error);
+       if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /* If the extent ends before the start, look at the next one */
        if (tmp.rc_startblock + tmp.rc_blockcount <= agbno) {
@@ -1282,7 +1340,10 @@ xfs_refcount_find_shared(
                error = xfs_refcount_get_rec(cur, &tmp, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        }
 
        /* If the extent starts after the range we want, bail out */
@@ -1310,7 +1371,10 @@ xfs_refcount_find_shared(
                error = xfs_refcount_get_rec(cur, &tmp, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                if (tmp.rc_startblock >= agbno + aglen ||
                    tmp.rc_startblock != *fbno + *flen)
                        break;
@@ -1411,8 +1475,11 @@ xfs_refcount_adjust_cow_extents(
        switch (adj) {
        case XFS_REFCOUNT_ADJUST_COW_ALLOC:
                /* Adding a CoW reservation, there should be nothing here. */
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                               ext.rc_startblock >= agbno + aglen, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp,
+                                  agbno + aglen > ext.rc_startblock)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                tmp.rc_startblock = agbno;
                tmp.rc_blockcount = aglen;
@@ -1424,17 +1491,25 @@ xfs_refcount_adjust_cow_extents(
                                &found_tmp);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                               found_tmp == 1, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_tmp != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                break;
        case XFS_REFCOUNT_ADJUST_COW_FREE:
                /* Removing a CoW reservation, there should be one extent. */
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                       ext.rc_startblock == agbno, out_error);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                       ext.rc_blockcount == aglen, out_error);
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                       ext.rc_refcount == 1, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, ext.rc_startblock != agbno)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
+               if (XFS_IS_CORRUPT(cur->bc_mp, ext.rc_blockcount != aglen)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
+               if (XFS_IS_CORRUPT(cur->bc_mp, ext.rc_refcount != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                ext.rc_refcount = 0;
                trace_xfs_refcount_modify_extent(cur->bc_mp,
@@ -1442,8 +1517,10 @@ xfs_refcount_adjust_cow_extents(
                error = xfs_refcount_delete(cur, &found_rec);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(cur->bc_mp,
-                               found_rec == 1, out_error);
+               if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                break;
        default:
                ASSERT(0);
index cdd6d40195afecf57b225a22fb176bfa364c943b..ce23a4ad801e033969bd3ca7ee521419c808b373 100644 (file)
@@ -111,7 +111,10 @@ xfs_rmap_insert(
        error = xfs_rmap_lookup_eq(rcur, agbno, len, owner, offset, flags, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(rcur->bc_mp, i == 0, done);
+       if (XFS_IS_CORRUPT(rcur->bc_mp, i != 0)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 
        rcur->bc_rec.r.rm_startblock = agbno;
        rcur->bc_rec.r.rm_blockcount = len;
@@ -121,7 +124,10 @@ xfs_rmap_insert(
        error = xfs_btree_insert(rcur, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(rcur->bc_mp, i == 1, done);
+       if (XFS_IS_CORRUPT(rcur->bc_mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 done:
        if (error)
                trace_xfs_rmap_insert_error(rcur->bc_mp,
@@ -147,12 +153,18 @@ xfs_rmap_delete(
        error = xfs_rmap_lookup_eq(rcur, agbno, len, owner, offset, flags, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(rcur->bc_mp, i == 1, done);
+       if (XFS_IS_CORRUPT(rcur->bc_mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 
        error = xfs_btree_delete(rcur, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(rcur->bc_mp, i == 1, done);
+       if (XFS_IS_CORRUPT(rcur->bc_mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 done:
        if (error)
                trace_xfs_rmap_delete_error(rcur->bc_mp,
@@ -404,24 +416,39 @@ xfs_rmap_free_check_owner(
                return 0;
 
        /* Make sure the unwritten flag matches. */
-       XFS_WANT_CORRUPTED_GOTO(mp, (flags & XFS_RMAP_UNWRITTEN) ==
-                       (rec->rm_flags & XFS_RMAP_UNWRITTEN), out);
+       if (XFS_IS_CORRUPT(mp,
+                          (flags & XFS_RMAP_UNWRITTEN) !=
+                          (rec->rm_flags & XFS_RMAP_UNWRITTEN))) {
+               error = -EFSCORRUPTED;
+               goto out;
+       }
 
        /* Make sure the owner matches what we expect to find in the tree. */
-       XFS_WANT_CORRUPTED_GOTO(mp, owner == rec->rm_owner, out);
+       if (XFS_IS_CORRUPT(mp, owner != rec->rm_owner)) {
+               error = -EFSCORRUPTED;
+               goto out;
+       }
 
        /* Check the offset, if necessary. */
        if (XFS_RMAP_NON_INODE_OWNER(owner))
                goto out;
 
        if (flags & XFS_RMAP_BMBT_BLOCK) {
-               XFS_WANT_CORRUPTED_GOTO(mp, rec->rm_flags & XFS_RMAP_BMBT_BLOCK,
-                               out);
+               if (XFS_IS_CORRUPT(mp,
+                                  !(rec->rm_flags & XFS_RMAP_BMBT_BLOCK))) {
+                       error = -EFSCORRUPTED;
+                       goto out;
+               }
        } else {
-               XFS_WANT_CORRUPTED_GOTO(mp, rec->rm_offset <= offset, out);
-               XFS_WANT_CORRUPTED_GOTO(mp,
-                               ltoff + rec->rm_blockcount >= offset + len,
-                               out);
+               if (XFS_IS_CORRUPT(mp, rec->rm_offset > offset)) {
+                       error = -EFSCORRUPTED;
+                       goto out;
+               }
+               if (XFS_IS_CORRUPT(mp,
+                                  offset + len > ltoff + rec->rm_blockcount)) {
+                       error = -EFSCORRUPTED;
+                       goto out;
+               }
        }
 
 out:
@@ -480,12 +507,18 @@ xfs_rmap_unmap(
        error = xfs_rmap_lookup_le(cur, bno, len, owner, offset, flags, &i);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        error = xfs_rmap_get_rec(cur, &ltrec, &i);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        trace_xfs_rmap_lookup_le_range_result(cur->bc_mp,
                        cur->bc_private.a.agno, ltrec.rm_startblock,
                        ltrec.rm_blockcount, ltrec.rm_owner,
@@ -500,8 +533,12 @@ xfs_rmap_unmap(
         * be the case that the "left" extent goes all the way to EOFS.
         */
        if (owner == XFS_RMAP_OWN_NULL) {
-               XFS_WANT_CORRUPTED_GOTO(mp, bno >= ltrec.rm_startblock +
-                                               ltrec.rm_blockcount, out_error);
+               if (XFS_IS_CORRUPT(mp,
+                                  bno <
+                                  ltrec.rm_startblock + ltrec.rm_blockcount)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                goto out_done;
        }
 
@@ -524,15 +561,22 @@ xfs_rmap_unmap(
                error = xfs_rmap_get_rec(cur, &rtrec, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                if (rtrec.rm_startblock >= bno + len)
                        goto out_done;
        }
 
        /* Make sure the extent we found covers the entire freeing range. */
-       XFS_WANT_CORRUPTED_GOTO(mp, ltrec.rm_startblock <= bno &&
-                       ltrec.rm_startblock + ltrec.rm_blockcount >=
-                       bno + len, out_error);
+       if (XFS_IS_CORRUPT(mp,
+                          ltrec.rm_startblock > bno ||
+                          ltrec.rm_startblock + ltrec.rm_blockcount <
+                          bno + len)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /* Check owner information. */
        error = xfs_rmap_free_check_owner(mp, ltoff, &ltrec, len, owner,
@@ -549,7 +593,10 @@ xfs_rmap_unmap(
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        } else if (ltrec.rm_startblock == bno) {
                /*
                 * overlap left hand side of extent: move the start, trim the
@@ -741,7 +788,10 @@ xfs_rmap_map(
                error = xfs_rmap_get_rec(cur, &ltrec, &have_lt);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, have_lt == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, have_lt != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                trace_xfs_rmap_lookup_le_range_result(cur->bc_mp,
                                cur->bc_private.a.agno, ltrec.rm_startblock,
                                ltrec.rm_blockcount, ltrec.rm_owner,
@@ -751,9 +801,12 @@ xfs_rmap_map(
                        have_lt = 0;
        }
 
-       XFS_WANT_CORRUPTED_GOTO(mp,
-               have_lt == 0 ||
-               ltrec.rm_startblock + ltrec.rm_blockcount <= bno, out_error);
+       if (XFS_IS_CORRUPT(mp,
+                          have_lt != 0 &&
+                          ltrec.rm_startblock + ltrec.rm_blockcount > bno)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /*
         * Increment the cursor to see if we have a right-adjacent record to our
@@ -767,9 +820,14 @@ xfs_rmap_map(
                error = xfs_rmap_get_rec(cur, &gtrec, &have_gt);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, have_gt == 1, out_error);
-               XFS_WANT_CORRUPTED_GOTO(mp, bno + len <= gtrec.rm_startblock,
-                                       out_error);
+               if (XFS_IS_CORRUPT(mp, have_gt != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
+               if (XFS_IS_CORRUPT(mp, bno + len > gtrec.rm_startblock)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                trace_xfs_rmap_find_right_neighbor_result(cur->bc_mp,
                        cur->bc_private.a.agno, gtrec.rm_startblock,
                        gtrec.rm_blockcount, gtrec.rm_owner,
@@ -819,7 +877,10 @@ xfs_rmap_map(
                        error = xfs_btree_delete(cur, &i);
                        if (error)
                                goto out_error;
-                       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+                       if (XFS_IS_CORRUPT(mp, i != 1)) {
+                               error = -EFSCORRUPTED;
+                               goto out_error;
+                       }
                }
 
                /* point the cursor back to the left record and update */
@@ -863,7 +924,10 @@ xfs_rmap_map(
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
        }
 
        trace_xfs_rmap_map_done(mp, cur->bc_private.a.agno, bno, len,
@@ -955,12 +1019,18 @@ xfs_rmap_convert(
        error = xfs_rmap_lookup_le(cur, bno, len, owner, offset, oldext, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 
        error = xfs_rmap_get_rec(cur, &PREV, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
        trace_xfs_rmap_lookup_le_range_result(cur->bc_mp,
                        cur->bc_private.a.agno, PREV.rm_startblock,
                        PREV.rm_blockcount, PREV.rm_owner,
@@ -993,10 +1063,16 @@ xfs_rmap_convert(
                error = xfs_rmap_get_rec(cur, &LEFT, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
-               XFS_WANT_CORRUPTED_GOTO(mp,
-                               LEFT.rm_startblock + LEFT.rm_blockcount <= bno,
-                               done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
+               if (XFS_IS_CORRUPT(mp,
+                                  LEFT.rm_startblock + LEFT.rm_blockcount >
+                                  bno)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_find_left_neighbor_result(cur->bc_mp,
                                cur->bc_private.a.agno, LEFT.rm_startblock,
                                LEFT.rm_blockcount, LEFT.rm_owner,
@@ -1015,7 +1091,10 @@ xfs_rmap_convert(
        error = xfs_btree_increment(cur, 0, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
        error = xfs_btree_increment(cur, 0, &i);
        if (error)
                goto done;
@@ -1024,9 +1103,14 @@ xfs_rmap_convert(
                error = xfs_rmap_get_rec(cur, &RIGHT, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
-               XFS_WANT_CORRUPTED_GOTO(mp, bno + len <= RIGHT.rm_startblock,
-                                       done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
+               if (XFS_IS_CORRUPT(mp, bno + len > RIGHT.rm_startblock)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_find_right_neighbor_result(cur->bc_mp,
                                cur->bc_private.a.agno, RIGHT.rm_startblock,
                                RIGHT.rm_blockcount, RIGHT.rm_owner,
@@ -1053,7 +1137,10 @@ xfs_rmap_convert(
        error = xfs_rmap_lookup_le(cur, bno, len, owner, offset, oldext, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 
        /*
         * Switch out based on the FILLING and CONTIG state bits.
@@ -1069,7 +1156,10 @@ xfs_rmap_convert(
                error = xfs_btree_increment(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_delete(mp, cur->bc_private.a.agno,
                                RIGHT.rm_startblock, RIGHT.rm_blockcount,
                                RIGHT.rm_owner, RIGHT.rm_offset,
@@ -1077,11 +1167,17 @@ xfs_rmap_convert(
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                error = xfs_btree_decrement(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_delete(mp, cur->bc_private.a.agno,
                                PREV.rm_startblock, PREV.rm_blockcount,
                                PREV.rm_owner, PREV.rm_offset,
@@ -1089,11 +1185,17 @@ xfs_rmap_convert(
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                error = xfs_btree_decrement(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW = LEFT;
                NEW.rm_blockcount += PREV.rm_blockcount + RIGHT.rm_blockcount;
                error = xfs_rmap_update(cur, &NEW);
@@ -1113,11 +1215,17 @@ xfs_rmap_convert(
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                error = xfs_btree_decrement(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW = LEFT;
                NEW.rm_blockcount += PREV.rm_blockcount;
                error = xfs_rmap_update(cur, &NEW);
@@ -1133,7 +1241,10 @@ xfs_rmap_convert(
                error = xfs_btree_increment(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_delete(mp, cur->bc_private.a.agno,
                                RIGHT.rm_startblock, RIGHT.rm_blockcount,
                                RIGHT.rm_owner, RIGHT.rm_offset,
@@ -1141,11 +1252,17 @@ xfs_rmap_convert(
                error = xfs_btree_delete(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                error = xfs_btree_decrement(cur, 0, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW = PREV;
                NEW.rm_blockcount = len + RIGHT.rm_blockcount;
                NEW.rm_flags = newext;
@@ -1212,7 +1329,10 @@ xfs_rmap_convert(
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                break;
 
        case RMAP_RIGHT_FILLING | RMAP_RIGHT_CONTIG:
@@ -1251,7 +1371,10 @@ xfs_rmap_convert(
                                oldext, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+               if (XFS_IS_CORRUPT(mp, i != 0)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_startblock = bno;
                NEW.rm_owner = owner;
                NEW.rm_offset = offset;
@@ -1263,7 +1386,10 @@ xfs_rmap_convert(
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                break;
 
        case 0:
@@ -1293,7 +1419,10 @@ xfs_rmap_convert(
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                /*
                 * Reset the cursor to the position of the new extent
                 * we are about to insert as we can't trust it after
@@ -1303,7 +1432,10 @@ xfs_rmap_convert(
                                oldext, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 0, done);
+               if (XFS_IS_CORRUPT(mp, i != 0)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                /* new middle extent - newext */
                cur->bc_rec.r.rm_flags &= ~XFS_RMAP_UNWRITTEN;
                cur->bc_rec.r.rm_flags |= newext;
@@ -1312,7 +1444,10 @@ xfs_rmap_convert(
                error = xfs_btree_insert(cur, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                break;
 
        case RMAP_LEFT_FILLING | RMAP_LEFT_CONTIG | RMAP_RIGHT_CONTIG:
@@ -1381,7 +1516,10 @@ xfs_rmap_convert_shared(
                        &PREV, &i);
        if (error)
                goto done;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto done;
+       }
 
        ASSERT(PREV.rm_offset <= offset);
        ASSERT(PREV.rm_offset + PREV.rm_blockcount >= new_endoff);
@@ -1404,9 +1542,12 @@ xfs_rmap_convert_shared(
                goto done;
        if (i) {
                state |= RMAP_LEFT_VALID;
-               XFS_WANT_CORRUPTED_GOTO(mp,
-                               LEFT.rm_startblock + LEFT.rm_blockcount <= bno,
-                               done);
+               if (XFS_IS_CORRUPT(mp,
+                                  LEFT.rm_startblock + LEFT.rm_blockcount >
+                                  bno)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                if (xfs_rmap_is_mergeable(&LEFT, owner, newext))
                        state |= RMAP_LEFT_CONTIG;
        }
@@ -1421,9 +1562,14 @@ xfs_rmap_convert_shared(
                error = xfs_rmap_get_rec(cur, &RIGHT, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
-               XFS_WANT_CORRUPTED_GOTO(mp, bno + len <= RIGHT.rm_startblock,
-                               done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
+               if (XFS_IS_CORRUPT(mp, bno + len > RIGHT.rm_startblock)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                trace_xfs_rmap_find_right_neighbor_result(cur->bc_mp,
                                cur->bc_private.a.agno, RIGHT.rm_startblock,
                                RIGHT.rm_blockcount, RIGHT.rm_owner,
@@ -1470,7 +1616,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount += PREV.rm_blockcount + RIGHT.rm_blockcount;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1493,7 +1642,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount += PREV.rm_blockcount;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1516,7 +1668,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount += RIGHT.rm_blockcount;
                NEW.rm_flags = RIGHT.rm_flags;
                error = xfs_rmap_update(cur, &NEW);
@@ -1536,7 +1691,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_flags = newext;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1568,7 +1726,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount += len;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1610,7 +1771,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount = offset - NEW.rm_offset;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1642,7 +1806,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount -= len;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1677,7 +1844,10 @@ xfs_rmap_convert_shared(
                                NEW.rm_offset, NEW.rm_flags, &i);
                if (error)
                        goto done;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, done);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto done;
+               }
                NEW.rm_blockcount = offset - NEW.rm_offset;
                error = xfs_rmap_update(cur, &NEW);
                if (error)
@@ -1763,25 +1933,44 @@ xfs_rmap_unmap_shared(
                        &ltrec, &i);
        if (error)
                goto out_error;
-       XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+       if (XFS_IS_CORRUPT(mp, i != 1)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
        ltoff = ltrec.rm_offset;
 
        /* Make sure the extent we found covers the entire freeing range. */
-       XFS_WANT_CORRUPTED_GOTO(mp, ltrec.rm_startblock <= bno &&
-               ltrec.rm_startblock + ltrec.rm_blockcount >=
-               bno + len, out_error);
+       if (XFS_IS_CORRUPT(mp,
+                          ltrec.rm_startblock > bno ||
+                          ltrec.rm_startblock + ltrec.rm_blockcount <
+                          bno + len)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /* Make sure the owner matches what we expect to find in the tree. */
-       XFS_WANT_CORRUPTED_GOTO(mp, owner == ltrec.rm_owner, out_error);
+       if (XFS_IS_CORRUPT(mp, owner != ltrec.rm_owner)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /* Make sure the unwritten flag matches. */
-       XFS_WANT_CORRUPTED_GOTO(mp, (flags & XFS_RMAP_UNWRITTEN) ==
-                       (ltrec.rm_flags & XFS_RMAP_UNWRITTEN), out_error);
+       if (XFS_IS_CORRUPT(mp,
+                          (flags & XFS_RMAP_UNWRITTEN) !=
+                          (ltrec.rm_flags & XFS_RMAP_UNWRITTEN))) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        /* Check the offset. */
-       XFS_WANT_CORRUPTED_GOTO(mp, ltrec.rm_offset <= offset, out_error);
-       XFS_WANT_CORRUPTED_GOTO(mp, offset <= ltoff + ltrec.rm_blockcount,
-                       out_error);
+       if (XFS_IS_CORRUPT(mp, ltrec.rm_offset > offset)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
+       if (XFS_IS_CORRUPT(mp, offset > ltoff + ltrec.rm_blockcount)) {
+               error = -EFSCORRUPTED;
+               goto out_error;
+       }
 
        if (ltrec.rm_startblock == bno && ltrec.rm_blockcount == len) {
                /* Exact match, simply remove the record from rmap tree. */
@@ -1834,7 +2023,10 @@ xfs_rmap_unmap_shared(
                                ltrec.rm_offset, ltrec.rm_flags, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                ltrec.rm_blockcount -= len;
                error = xfs_rmap_update(cur, &ltrec);
                if (error)
@@ -1860,7 +2052,10 @@ xfs_rmap_unmap_shared(
                                ltrec.rm_offset, ltrec.rm_flags, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                ltrec.rm_blockcount = bno - ltrec.rm_startblock;
                error = xfs_rmap_update(cur, &ltrec);
                if (error)
@@ -1936,7 +2131,10 @@ xfs_rmap_map_shared(
                error = xfs_rmap_get_rec(cur, &gtrec, &have_gt);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, have_gt == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, have_gt != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
                trace_xfs_rmap_find_right_neighbor_result(cur->bc_mp,
                        cur->bc_private.a.agno, gtrec.rm_startblock,
                        gtrec.rm_blockcount, gtrec.rm_owner,
@@ -1985,7 +2183,10 @@ xfs_rmap_map_shared(
                                ltrec.rm_offset, ltrec.rm_flags, &i);
                if (error)
                        goto out_error;
-               XFS_WANT_CORRUPTED_GOTO(mp, i == 1, out_error);
+               if (XFS_IS_CORRUPT(mp, i != 1)) {
+                       error = -EFSCORRUPTED;
+                       goto out_error;
+               }
 
                error = xfs_rmap_update(cur, &ltrec);
                if (error)