Commit a71895c5 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: convert open coded corruption check to use XFS_IS_CORRUPT



Convert the last of the open coded corruption check and report idioms to
use the XFS_IS_CORRUPT macro.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent f9e03706
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1071,8 +1071,7 @@ xfs_alloc_ag_vextent_small(
		struct xfs_buf	*bp;

		bp = xfs_btree_get_bufs(args->mp, args->tp, args->agno, fbno);
		if (!bp) {
			XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, args->mp);
		if (XFS_IS_CORRUPT(args->mp, !bp)) {
			error = -EFSCORRUPTED;
			goto error;
		}
@@ -2341,10 +2340,8 @@ xfs_free_agfl_block(
		return error;

	bp = xfs_btree_get_bufs(tp->t_mountp, tp, agno, agbno);
	if (!bp) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, tp->t_mountp);
	if (XFS_IS_CORRUPT(tp->t_mountp, !bp))
		return -EFSCORRUPTED;
	}
	xfs_trans_binval(tp, bp);

	return 0;
+24 −44
Original line number Diff line number Diff line
@@ -731,8 +731,7 @@ xfs_bmap_extents_to_btree(
	ip->i_d.di_nblocks++;
	xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, 1L);
	abp = xfs_btree_get_bufl(mp, tp, args.fsbno);
	if (!abp) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !abp)) {
		error = -EFSCORRUPTED;
		goto out_unreserve_dquot;
	}
@@ -1090,8 +1089,7 @@ xfs_bmap_add_attrfork(
		goto trans_cancel;
	if (XFS_IFORK_Q(ip))
		goto trans_cancel;
	if (ip->i_d.di_anextents != 0) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, ip->i_d.di_anextents != 0)) {
		error = -EFSCORRUPTED;
		goto trans_cancel;
	}
@@ -1238,8 +1236,9 @@ xfs_iread_extents(

	ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));

	if (unlikely(XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE)) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp,
			   XFS_IFORK_FORMAT(ip, whichfork) !=
			   XFS_DINODE_FMT_BTREE)) {
		error = -EFSCORRUPTED;
		goto out;
	}
@@ -1253,8 +1252,8 @@ xfs_iread_extents(
	if (error)
		goto out;

	if (ir.loaded != XFS_IFORK_NEXTENTS(ip, whichfork)) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp,
			   ir.loaded != XFS_IFORK_NEXTENTS(ip, whichfork))) {
		error = -EFSCORRUPTED;
		goto out;
	}
@@ -1444,10 +1443,8 @@ xfs_bmap_last_offset(
	if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL)
		return 0;

	if (!xfs_ifork_has_extents(ip, whichfork)) {
		ASSERT(0);
	if (XFS_IS_CORRUPT(ip->i_mount, !xfs_ifork_has_extents(ip, whichfork)))
		return -EFSCORRUPTED;
	}

	error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, &is_empty);
	if (error || is_empty)
@@ -3906,10 +3903,8 @@ xfs_bmapi_read(
			   XFS_BMAPI_COWFORK)));
	ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED|XFS_ILOCK_EXCL));

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT("xfs_bmapi_read", XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

@@ -4417,10 +4412,8 @@ xfs_bmapi_write(
	ASSERT((flags & (XFS_BMAPI_PREALLOC | XFS_BMAPI_ZERO)) !=
			(XFS_BMAPI_PREALLOC | XFS_BMAPI_ZERO));

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT("xfs_bmapi_write", XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

@@ -4686,10 +4679,8 @@ xfs_bmapi_remap(
	ASSERT((flags & (XFS_BMAPI_ATTRFORK | XFS_BMAPI_PREALLOC)) !=
			(XFS_BMAPI_ATTRFORK | XFS_BMAPI_PREALLOC));

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT("xfs_bmapi_remap", XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

@@ -5311,7 +5302,7 @@ __xfs_bunmapi(
	int			isrt;		/* freeing in rt area */
	int			logflags;	/* transaction logging flags */
	xfs_extlen_t		mod;		/* rt extent offset */
	struct xfs_mount	*mp;		/* mount structure */
	struct xfs_mount	*mp = ip->i_mount;
	int			tmp_logflags;	/* partial logging flags */
	int			wasdel;		/* was a delayed alloc extent */
	int			whichfork;	/* data or attribute fork */
@@ -5328,12 +5319,8 @@ __xfs_bunmapi(
	whichfork = xfs_bmapi_whichfork(flags);
	ASSERT(whichfork != XFS_COW_FORK);
	ifp = XFS_IFORK_PTR(ip, whichfork);
	if (unlikely(!xfs_ifork_has_extents(ip, whichfork))) {
		XFS_ERROR_REPORT("xfs_bunmapi", XFS_ERRLEVEL_LOW,
				 ip->i_mount);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)))
		return -EFSCORRUPTED;
	}
	mp = ip->i_mount;
	if (XFS_FORCED_SHUTDOWN(mp))
		return -EIO;

@@ -5826,10 +5813,8 @@ xfs_bmap_collapse_extents(
	int			error = 0;
	int			logflags = 0;

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

@@ -5945,10 +5930,8 @@ xfs_bmap_insert_extents(
	int			error = 0;
	int			logflags = 0;

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

@@ -5986,8 +5969,8 @@ xfs_bmap_insert_extents(
		goto del_cursor;
	}

	if (stop_fsb >= got.br_startoff + got.br_blockcount) {
		ASSERT(0);
	if (XFS_IS_CORRUPT(mp,
			   stop_fsb >= got.br_startoff + got.br_blockcount)) {
		error = -EFSCORRUPTED;
		goto del_cursor;
	}
@@ -6053,11 +6036,8 @@ xfs_bmap_split_extent_at(
	int				logflags = 0;
	int				i = 0;

	if (unlikely(XFS_TEST_ERROR(
	    !xfs_ifork_has_extents(ip, whichfork),
	     mp, XFS_ERRTAG_BMAPIFORMAT))) {
		XFS_ERROR_REPORT("xfs_bmap_split_extent_at",
				 XFS_ERRLEVEL_LOW, mp);
	if (XFS_IS_CORRUPT(mp, !xfs_ifork_has_extents(ip, whichfork)) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BMAPIFORMAT)) {
		return -EFSCORRUPTED;
	}

+5 −9
Original line number Diff line number Diff line
@@ -105,11 +105,10 @@ xfs_btree_check_lblock(
	xfs_failaddr_t		fa;

	fa = __xfs_btree_check_lblock(cur, block, level, bp);
	if (unlikely(XFS_TEST_ERROR(fa != NULL, mp,
			XFS_ERRTAG_BTREE_CHECK_LBLOCK))) {
	if (XFS_IS_CORRUPT(mp, fa != NULL) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BTREE_CHECK_LBLOCK)) {
		if (bp)
			trace_xfs_btree_corrupt(bp, _RET_IP_);
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
		return -EFSCORRUPTED;
	}
	return 0;
@@ -169,11 +168,10 @@ xfs_btree_check_sblock(
	xfs_failaddr_t		fa;

	fa = __xfs_btree_check_sblock(cur, block, level, bp);
	if (unlikely(XFS_TEST_ERROR(fa != NULL, mp,
			XFS_ERRTAG_BTREE_CHECK_SBLOCK))) {
	if (XFS_IS_CORRUPT(mp, fa != NULL) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_BTREE_CHECK_SBLOCK)) {
		if (bp)
			trace_xfs_btree_corrupt(bp, _RET_IP_);
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp);
		return -EFSCORRUPTED;
	}
	return 0;
@@ -1849,10 +1847,8 @@ xfs_btree_lookup(
	XFS_BTREE_STATS_INC(cur, lookup);

	/* No such thing as a zero-level tree. */
	if (cur->bc_nlevels == 0) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, cur->bc_mp);
	if (XFS_IS_CORRUPT(cur->bc_mp, cur->bc_nlevels == 0))
		return -EFSCORRUPTED;
	}

	block = NULL;
	keyno = 0;
+15 −35
Original line number Diff line number Diff line
@@ -1663,17 +1663,12 @@ xfs_da3_node_lookup_int(
		}

		/* We can't point back to the root. */
		if (blkno == args->geo->leafblk) {
			XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW,
					dp->i_mount);
		if (XFS_IS_CORRUPT(dp->i_mount, blkno == args->geo->leafblk))
			return -EFSCORRUPTED;
	}
	}

	if (expected_level != 0) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, dp->i_mount);
	if (XFS_IS_CORRUPT(dp->i_mount, expected_level != 0))
		return -EFSCORRUPTED;
	}

	/*
	 * A leaf block that ends in the hashval that we are interested in
@@ -2267,11 +2262,8 @@ xfs_da3_swap_lastblock(
	error = xfs_bmap_last_before(tp, dp, &lastoff, w);
	if (error)
		return error;
	if (unlikely(lastoff == 0)) {
		XFS_ERROR_REPORT("xfs_da_swap_lastblock(1)", XFS_ERRLEVEL_LOW,
				 mp);
	if (XFS_IS_CORRUPT(mp, lastoff == 0))
		return -EFSCORRUPTED;
	}
	/*
	 * Read the last block in the btree space.
	 */
@@ -2317,11 +2309,9 @@ xfs_da3_swap_lastblock(
		if (error)
			goto done;
		sib_info = sib_buf->b_addr;
		if (unlikely(
		if (XFS_IS_CORRUPT(mp,
				   be32_to_cpu(sib_info->forw) != last_blkno ||
				   sib_info->magic != dead_info->magic)) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(2)",
					 XFS_ERRLEVEL_LOW, mp);
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2339,11 +2329,9 @@ xfs_da3_swap_lastblock(
		if (error)
			goto done;
		sib_info = sib_buf->b_addr;
		if (unlikely(
		if (XFS_IS_CORRUPT(mp,
				   be32_to_cpu(sib_info->back) != last_blkno ||
				   sib_info->magic != dead_info->magic)) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(3)",
					 XFS_ERRLEVEL_LOW, mp);
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2364,9 +2352,8 @@ xfs_da3_swap_lastblock(
			goto done;
		par_node = par_buf->b_addr;
		xfs_da3_node_hdr_from_disk(dp->i_mount, &par_hdr, par_node);
		if (level >= 0 && level != par_hdr.level + 1) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(4)",
					 XFS_ERRLEVEL_LOW, mp);
		if (XFS_IS_CORRUPT(mp,
				   level >= 0 && level != par_hdr.level + 1)) {
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2377,9 +2364,7 @@ xfs_da3_swap_lastblock(
		     be32_to_cpu(btree[entno].hashval) < dead_hash;
		     entno++)
			continue;
		if (entno == par_hdr.count) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(5)",
					 XFS_ERRLEVEL_LOW, mp);
		if (XFS_IS_CORRUPT(mp, entno == par_hdr.count)) {
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2404,9 +2389,7 @@ xfs_da3_swap_lastblock(
		par_blkno = par_hdr.forw;
		xfs_trans_brelse(tp, par_buf);
		par_buf = NULL;
		if (unlikely(par_blkno == 0)) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(6)",
					 XFS_ERRLEVEL_LOW, mp);
		if (XFS_IS_CORRUPT(mp, par_blkno == 0)) {
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2415,9 +2398,7 @@ xfs_da3_swap_lastblock(
			goto done;
		par_node = par_buf->b_addr;
		xfs_da3_node_hdr_from_disk(dp->i_mount, &par_hdr, par_node);
		if (par_hdr.level != level) {
			XFS_ERROR_REPORT("xfs_da_swap_lastblock(7)",
					 XFS_ERRLEVEL_LOW, mp);
		if (XFS_IS_CORRUPT(mp, par_hdr.level != level)) {
			error = -EFSCORRUPTED;
			goto done;
		}
@@ -2611,7 +2592,7 @@ xfs_dabuf_map(

	if (!xfs_da_map_covers_blocks(nirecs, irecs, bno, nfsb)) {
		/* Caller ok with no mapping. */
		if (mappedbno == -2) {
		if (!XFS_IS_CORRUPT(mp, mappedbno != -2)) {
			error = -1;
			goto out;
		}
@@ -2632,7 +2613,6 @@ xfs_dabuf_map(
					irecs[i].br_state);
			}
		}
		XFS_ERROR_REPORT("xfs_da_do_buf(1)", XFS_ERRLEVEL_LOW, mp);
		error = -EFSCORRUPTED;
		goto out;
	}
+5 −5
Original line number Diff line number Diff line
@@ -208,10 +208,10 @@ xfs_dir_ino_validate(
{
	bool		ino_ok = xfs_verify_dir_ino(mp, ino);

	if (unlikely(XFS_TEST_ERROR(!ino_ok, mp, XFS_ERRTAG_DIR_INO_VALIDATE))) {
	if (XFS_IS_CORRUPT(mp, !ino_ok) ||
	    XFS_TEST_ERROR(false, mp, XFS_ERRTAG_DIR_INO_VALIDATE)) {
		xfs_warn(mp, "Invalid inode number 0x%Lx",
				(unsigned long long) ino);
		XFS_ERROR_REPORT("xfs_dir_ino_validate", XFS_ERRLEVEL_LOW, mp);
		return -EFSCORRUPTED;
	}
	return 0;
@@ -617,10 +617,10 @@ xfs_dir2_isblock(
	if ((rval = xfs_bmap_last_offset(args->dp, &last, XFS_DATA_FORK)))
		return rval;
	rval = XFS_FSB_TO_B(args->dp->i_mount, last) == args->geo->blksize;
	if (rval != 0 && args->dp->i_d.di_size != args->geo->blksize) {
		XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, args->dp->i_mount);
	if (XFS_IS_CORRUPT(args->dp->i_mount,
			   rval != 0 &&
			   args->dp->i_d.di_size != args->geo->blksize))
		return -EFSCORRUPTED;
	}
	*vp = rval;
	return 0;
}
Loading