mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	xfs: add helper for verifying checksums on xfs_bufs
Many/most callers of xfs_verify_cksum() pass bp->b_addr and BBTOB(bp->b_length) as the first 2 args. Add a helper which can just accept the bp and the crc offset, and work it out on its own, for brevity. Signed-off-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
		
							parent
							
								
									533b81c875
								
							
						
					
					
						commit
						5158217058
					
				
					 13 changed files with 24 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -485,8 +485,7 @@ xfs_agfl_read_verify(
 | 
			
		|||
	if (!xfs_sb_version_hascrc(&mp->m_sb))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	agfl_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
				   XFS_AGFL_CRC_OFF);
 | 
			
		||||
	agfl_ok = xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF);
 | 
			
		||||
 | 
			
		||||
	agfl_ok = agfl_ok && xfs_agfl_verify(bp);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2240,8 +2239,7 @@ xfs_agf_read_verify(
 | 
			
		|||
	int		agf_ok = 1;
 | 
			
		||||
 | 
			
		||||
	if (xfs_sb_version_hascrc(&mp->m_sb))
 | 
			
		||||
		agf_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_AGF_CRC_OFF);
 | 
			
		||||
		agf_ok = xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF);
 | 
			
		||||
 | 
			
		||||
	agf_ok = agf_ok && xfs_agf_verify(mp, bp);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -240,8 +240,7 @@ xfs_attr3_leaf_read_verify(
 | 
			
		|||
	struct xfs_mount	*mp = bp->b_target->bt_mount;
 | 
			
		||||
 | 
			
		||||
	if ((xfs_sb_version_hascrc(&mp->m_sb) &&
 | 
			
		||||
	     !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_ATTR3_LEAF_CRC_OFF)) ||
 | 
			
		||||
	     !xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF)) ||
 | 
			
		||||
	    !xfs_attr3_leaf_verify(bp)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -243,8 +243,8 @@ xfs_btree_lblock_verify_crc(
 | 
			
		|||
	struct xfs_buf		*bp)
 | 
			
		||||
{
 | 
			
		||||
	if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
 | 
			
		||||
		return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					XFS_BTREE_LBLOCK_CRC_OFF);
 | 
			
		||||
		return xfs_buf_verify_cksum(bp, XFS_BTREE_LBLOCK_CRC_OFF);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -276,8 +276,8 @@ xfs_btree_sblock_verify_crc(
 | 
			
		|||
	struct xfs_buf		*bp)
 | 
			
		||||
{
 | 
			
		||||
	if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
 | 
			
		||||
		return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					XFS_BTREE_SBLOCK_CRC_OFF);
 | 
			
		||||
		return xfs_buf_verify_cksum(bp, XFS_BTREE_SBLOCK_CRC_OFF);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -369,6 +369,13 @@ static inline void xfs_buf_relse(xfs_buf_t *bp)
 | 
			
		|||
	xfs_buf_rele(bp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int
 | 
			
		||||
xfs_buf_verify_cksum(struct xfs_buf *bp, unsigned long cksum_offset)
 | 
			
		||||
{
 | 
			
		||||
	return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
				cksum_offset);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Handling of buftargs.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,8 +214,7 @@ xfs_da3_node_read_verify(
 | 
			
		|||
 | 
			
		||||
	switch (be16_to_cpu(info->magic)) {
 | 
			
		||||
		case XFS_DA3_NODE_MAGIC:
 | 
			
		||||
			if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					      XFS_DA3_NODE_CRC_OFF))
 | 
			
		||||
			if (!xfs_buf_verify_cksum(bp, XFS_DA3_NODE_CRC_OFF))
 | 
			
		||||
				break;
 | 
			
		||||
			/* fall through */
 | 
			
		||||
		case XFS_DA_NODE_MAGIC:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,8 +90,7 @@ xfs_dir3_block_read_verify(
 | 
			
		|||
	struct xfs_mount	*mp = bp->b_target->bt_mount;
 | 
			
		||||
 | 
			
		||||
	if ((xfs_sb_version_hascrc(&mp->m_sb) &&
 | 
			
		||||
	     !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_DIR3_DATA_CRC_OFF)) ||
 | 
			
		||||
	     !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) ||
 | 
			
		||||
	    !xfs_dir3_block_verify(bp)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -268,8 +268,7 @@ xfs_dir3_data_read_verify(
 | 
			
		|||
	struct xfs_mount	*mp = bp->b_target->bt_mount;
 | 
			
		||||
 | 
			
		||||
	if ((xfs_sb_version_hascrc(&mp->m_sb) &&
 | 
			
		||||
	     !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_DIR3_DATA_CRC_OFF)) ||
 | 
			
		||||
	     !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) ||
 | 
			
		||||
	    !xfs_dir3_data_verify(bp)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,8 +180,7 @@ __read_verify(
 | 
			
		|||
	struct xfs_mount	*mp = bp->b_target->bt_mount;
 | 
			
		||||
 | 
			
		||||
	if ((xfs_sb_version_hascrc(&mp->m_sb) &&
 | 
			
		||||
	     !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_DIR3_LEAF_CRC_OFF)) ||
 | 
			
		||||
	     !xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF)) ||
 | 
			
		||||
	    !xfs_dir3_leaf_verify(bp, magic)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,8 +116,7 @@ xfs_dir3_free_read_verify(
 | 
			
		|||
	struct xfs_mount	*mp = bp->b_target->bt_mount;
 | 
			
		||||
 | 
			
		||||
	if ((xfs_sb_version_hascrc(&mp->m_sb) &&
 | 
			
		||||
	     !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_DIR3_FREE_CRC_OFF)) ||
 | 
			
		||||
	     !xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF)) ||
 | 
			
		||||
	    !xfs_dir3_free_verify(bp)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1571,8 +1571,8 @@ xfs_agi_read_verify(
 | 
			
		|||
	int		agi_ok = 1;
 | 
			
		||||
 | 
			
		||||
	if (xfs_sb_version_hascrc(&mp->m_sb))
 | 
			
		||||
		agi_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
					  XFS_AGI_CRC_OFF);
 | 
			
		||||
		agi_ok = xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF);
 | 
			
		||||
 | 
			
		||||
	agi_ok = agi_ok && xfs_agi_verify(bp);
 | 
			
		||||
 | 
			
		||||
	if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,6 +119,7 @@ typedef __uint64_t __psunsigned_t;
 | 
			
		|||
#include "xfs_iops.h"
 | 
			
		||||
#include "xfs_aops.h"
 | 
			
		||||
#include "xfs_super.h"
 | 
			
		||||
#include "xfs_cksum.h"
 | 
			
		||||
#include "xfs_buf.h"
 | 
			
		||||
#include "xfs_message.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -610,8 +610,7 @@ xfs_sb_read_verify(
 | 
			
		|||
						XFS_SB_VERSION_5) ||
 | 
			
		||||
	     dsb->sb_crc != 0)) {
 | 
			
		||||
 | 
			
		||||
		if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
				      XFS_SB_CRC_OFF)) {
 | 
			
		||||
		if (!xfs_buf_verify_cksum(bp, XFS_SB_CRC_OFF)) {
 | 
			
		||||
			/* Only fail bad secondaries on a known V5 filesystem */
 | 
			
		||||
			if (bp->b_bn == XFS_SB_DADDR ||
 | 
			
		||||
			    xfs_sb_version_hascrc(&mp->m_sb)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,8 +133,7 @@ xfs_symlink_read_verify(
 | 
			
		|||
	if (!xfs_sb_version_hascrc(&mp->m_sb))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length),
 | 
			
		||||
				  XFS_SYMLINK_CRC_OFF) ||
 | 
			
		||||
	if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF) ||
 | 
			
		||||
	    !xfs_symlink_verify(bp)) {
 | 
			
		||||
		XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
 | 
			
		||||
		xfs_buf_ioerror(bp, EFSCORRUPTED);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue