Commit 51582170 authored by Eric Sandeen's avatar Eric Sandeen Committed by Dave Chinner

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: default avatarEric Sandeen <sandeen@redhat.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent 533b81c8
...@@ -485,8 +485,7 @@ xfs_agfl_read_verify( ...@@ -485,8 +485,7 @@ xfs_agfl_read_verify(
if (!xfs_sb_version_hascrc(&mp->m_sb)) if (!xfs_sb_version_hascrc(&mp->m_sb))
return; return;
agfl_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), agfl_ok = xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF);
XFS_AGFL_CRC_OFF);
agfl_ok = agfl_ok && xfs_agfl_verify(bp); agfl_ok = agfl_ok && xfs_agfl_verify(bp);
...@@ -2240,8 +2239,7 @@ xfs_agf_read_verify( ...@@ -2240,8 +2239,7 @@ xfs_agf_read_verify(
int agf_ok = 1; int agf_ok = 1;
if (xfs_sb_version_hascrc(&mp->m_sb)) if (xfs_sb_version_hascrc(&mp->m_sb))
agf_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), agf_ok = xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF);
XFS_AGF_CRC_OFF);
agf_ok = agf_ok && xfs_agf_verify(mp, bp); agf_ok = agf_ok && xfs_agf_verify(mp, bp);
......
...@@ -240,8 +240,7 @@ xfs_attr3_leaf_read_verify( ...@@ -240,8 +240,7 @@ xfs_attr3_leaf_read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if ((xfs_sb_version_hascrc(&mp->m_sb) && if ((xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), !xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF)) ||
XFS_ATTR3_LEAF_CRC_OFF)) ||
!xfs_attr3_leaf_verify(bp)) { !xfs_attr3_leaf_verify(bp)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
...@@ -243,8 +243,8 @@ xfs_btree_lblock_verify_crc( ...@@ -243,8 +243,8 @@ xfs_btree_lblock_verify_crc(
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), return xfs_buf_verify_cksum(bp, XFS_BTREE_LBLOCK_CRC_OFF);
XFS_BTREE_LBLOCK_CRC_OFF);
return true; return true;
} }
...@@ -276,8 +276,8 @@ xfs_btree_sblock_verify_crc( ...@@ -276,8 +276,8 @@ xfs_btree_sblock_verify_crc(
struct xfs_buf *bp) struct xfs_buf *bp)
{ {
if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb))
return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), return xfs_buf_verify_cksum(bp, XFS_BTREE_SBLOCK_CRC_OFF);
XFS_BTREE_SBLOCK_CRC_OFF);
return true; return true;
} }
......
...@@ -369,6 +369,13 @@ static inline void xfs_buf_relse(xfs_buf_t *bp) ...@@ -369,6 +369,13 @@ static inline void xfs_buf_relse(xfs_buf_t *bp)
xfs_buf_rele(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. * Handling of buftargs.
*/ */
......
...@@ -214,8 +214,7 @@ xfs_da3_node_read_verify( ...@@ -214,8 +214,7 @@ xfs_da3_node_read_verify(
switch (be16_to_cpu(info->magic)) { switch (be16_to_cpu(info->magic)) {
case XFS_DA3_NODE_MAGIC: case XFS_DA3_NODE_MAGIC:
if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), if (!xfs_buf_verify_cksum(bp, XFS_DA3_NODE_CRC_OFF))
XFS_DA3_NODE_CRC_OFF))
break; break;
/* fall through */ /* fall through */
case XFS_DA_NODE_MAGIC: case XFS_DA_NODE_MAGIC:
......
...@@ -90,8 +90,7 @@ xfs_dir3_block_read_verify( ...@@ -90,8 +90,7 @@ xfs_dir3_block_read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if ((xfs_sb_version_hascrc(&mp->m_sb) && if ((xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) ||
XFS_DIR3_DATA_CRC_OFF)) ||
!xfs_dir3_block_verify(bp)) { !xfs_dir3_block_verify(bp)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
...@@ -268,8 +268,7 @@ xfs_dir3_data_read_verify( ...@@ -268,8 +268,7 @@ xfs_dir3_data_read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if ((xfs_sb_version_hascrc(&mp->m_sb) && if ((xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) ||
XFS_DIR3_DATA_CRC_OFF)) ||
!xfs_dir3_data_verify(bp)) { !xfs_dir3_data_verify(bp)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
...@@ -180,8 +180,7 @@ __read_verify( ...@@ -180,8 +180,7 @@ __read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if ((xfs_sb_version_hascrc(&mp->m_sb) && if ((xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), !xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF)) ||
XFS_DIR3_LEAF_CRC_OFF)) ||
!xfs_dir3_leaf_verify(bp, magic)) { !xfs_dir3_leaf_verify(bp, magic)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
...@@ -116,8 +116,7 @@ xfs_dir3_free_read_verify( ...@@ -116,8 +116,7 @@ xfs_dir3_free_read_verify(
struct xfs_mount *mp = bp->b_target->bt_mount; struct xfs_mount *mp = bp->b_target->bt_mount;
if ((xfs_sb_version_hascrc(&mp->m_sb) && if ((xfs_sb_version_hascrc(&mp->m_sb) &&
!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), !xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF)) ||
XFS_DIR3_FREE_CRC_OFF)) ||
!xfs_dir3_free_verify(bp)) { !xfs_dir3_free_verify(bp)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
...@@ -1571,8 +1571,8 @@ xfs_agi_read_verify( ...@@ -1571,8 +1571,8 @@ xfs_agi_read_verify(
int agi_ok = 1; int agi_ok = 1;
if (xfs_sb_version_hascrc(&mp->m_sb)) if (xfs_sb_version_hascrc(&mp->m_sb))
agi_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), agi_ok = xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF);
XFS_AGI_CRC_OFF);
agi_ok = agi_ok && xfs_agi_verify(bp); agi_ok = agi_ok && xfs_agi_verify(bp);
if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI,
......
...@@ -119,6 +119,7 @@ typedef __uint64_t __psunsigned_t; ...@@ -119,6 +119,7 @@ typedef __uint64_t __psunsigned_t;
#include "xfs_iops.h" #include "xfs_iops.h"
#include "xfs_aops.h" #include "xfs_aops.h"
#include "xfs_super.h" #include "xfs_super.h"
#include "xfs_cksum.h"
#include "xfs_buf.h" #include "xfs_buf.h"
#include "xfs_message.h" #include "xfs_message.h"
......
...@@ -610,8 +610,7 @@ xfs_sb_read_verify( ...@@ -610,8 +610,7 @@ xfs_sb_read_verify(
XFS_SB_VERSION_5) || XFS_SB_VERSION_5) ||
dsb->sb_crc != 0)) { dsb->sb_crc != 0)) {
if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), if (!xfs_buf_verify_cksum(bp, XFS_SB_CRC_OFF)) {
XFS_SB_CRC_OFF)) {
/* Only fail bad secondaries on a known V5 filesystem */ /* Only fail bad secondaries on a known V5 filesystem */
if (bp->b_bn == XFS_SB_DADDR || if (bp->b_bn == XFS_SB_DADDR ||
xfs_sb_version_hascrc(&mp->m_sb)) { xfs_sb_version_hascrc(&mp->m_sb)) {
......
...@@ -133,8 +133,7 @@ xfs_symlink_read_verify( ...@@ -133,8 +133,7 @@ xfs_symlink_read_verify(
if (!xfs_sb_version_hascrc(&mp->m_sb)) if (!xfs_sb_version_hascrc(&mp->m_sb))
return; return;
if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF) ||
XFS_SYMLINK_CRC_OFF) ||
!xfs_symlink_verify(bp)) { !xfs_symlink_verify(bp)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr);
xfs_buf_ioerror(bp, EFSCORRUPTED); xfs_buf_ioerror(bp, EFSCORRUPTED);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment