diff options
author | Eric Sandeen <sandeen@redhat.com> | 2014-02-26 23:17:27 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2014-02-26 23:17:27 -0500 |
commit | 5158217058fc2cdb92e05b9bb3c1a350d2a51ed9 (patch) | |
tree | 3d2260f1e7f670fe71fd69f14b01daa342832742 | |
parent | 533b81c875589ad0a2fc116991534b4601195253 (diff) |
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>
-rw-r--r-- | fs/xfs/xfs_alloc.c | 6 | ||||
-rw-r--r-- | fs/xfs/xfs_attr_leaf.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_btree.c | 8 | ||||
-rw-r--r-- | fs/xfs/xfs_buf.h | 7 | ||||
-rw-r--r-- | fs/xfs/xfs_da_btree.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2_block.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2_data.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2_leaf.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2_node.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_ialloc.c | 4 | ||||
-rw-r--r-- | fs/xfs/xfs_linux.h | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_sb.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_symlink_remote.c | 3 |
13 files changed, 24 insertions, 26 deletions
diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 72ea85512eb6..5050c9a2fbb0 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c | |||
@@ -485,8 +485,7 @@ xfs_agfl_read_verify( | |||
485 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 485 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
486 | return; | 486 | return; |
487 | 487 | ||
488 | agfl_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 488 | agfl_ok = xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF); |
489 | XFS_AGFL_CRC_OFF); | ||
490 | 489 | ||
491 | agfl_ok = agfl_ok && xfs_agfl_verify(bp); | 490 | agfl_ok = agfl_ok && xfs_agfl_verify(bp); |
492 | 491 | ||
@@ -2240,8 +2239,7 @@ xfs_agf_read_verify( | |||
2240 | int agf_ok = 1; | 2239 | int agf_ok = 1; |
2241 | 2240 | ||
2242 | if (xfs_sb_version_hascrc(&mp->m_sb)) | 2241 | if (xfs_sb_version_hascrc(&mp->m_sb)) |
2243 | agf_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 2242 | agf_ok = xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF); |
2244 | XFS_AGF_CRC_OFF); | ||
2245 | 2243 | ||
2246 | agf_ok = agf_ok && xfs_agf_verify(mp, bp); | 2244 | agf_ok = agf_ok && xfs_agf_verify(mp, bp); |
2247 | 2245 | ||
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 7b126f46a2f9..a19a0234c82a 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c | |||
@@ -240,8 +240,7 @@ xfs_attr3_leaf_read_verify( | |||
240 | struct xfs_mount *mp = bp->b_target->bt_mount; | 240 | struct xfs_mount *mp = bp->b_target->bt_mount; |
241 | 241 | ||
242 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 242 | if ((xfs_sb_version_hascrc(&mp->m_sb) && |
243 | !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 243 | !xfs_buf_verify_cksum(bp, XFS_ATTR3_LEAF_CRC_OFF)) || |
244 | XFS_ATTR3_LEAF_CRC_OFF)) || | ||
245 | !xfs_attr3_leaf_verify(bp)) { | 244 | !xfs_attr3_leaf_verify(bp)) { |
246 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 245 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
247 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 246 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index 9adaae4f3e2f..4e8524d7741b 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c | |||
@@ -243,8 +243,8 @@ xfs_btree_lblock_verify_crc( | |||
243 | struct xfs_buf *bp) | 243 | struct xfs_buf *bp) |
244 | { | 244 | { |
245 | if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) | 245 | if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) |
246 | return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 246 | return xfs_buf_verify_cksum(bp, XFS_BTREE_LBLOCK_CRC_OFF); |
247 | XFS_BTREE_LBLOCK_CRC_OFF); | 247 | |
248 | return true; | 248 | return true; |
249 | } | 249 | } |
250 | 250 | ||
@@ -276,8 +276,8 @@ xfs_btree_sblock_verify_crc( | |||
276 | struct xfs_buf *bp) | 276 | struct xfs_buf *bp) |
277 | { | 277 | { |
278 | if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) | 278 | if (xfs_sb_version_hascrc(&bp->b_target->bt_mount->m_sb)) |
279 | return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 279 | return xfs_buf_verify_cksum(bp, XFS_BTREE_SBLOCK_CRC_OFF); |
280 | XFS_BTREE_SBLOCK_CRC_OFF); | 280 | |
281 | return true; | 281 | return true; |
282 | } | 282 | } |
283 | 283 | ||
diff --git a/fs/xfs/xfs_buf.h b/fs/xfs/xfs_buf.h index 995339534db6..5edcfbaddb26 100644 --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h | |||
@@ -369,6 +369,13 @@ static inline void xfs_buf_relse(xfs_buf_t *bp) | |||
369 | xfs_buf_rele(bp); | 369 | xfs_buf_rele(bp); |
370 | } | 370 | } |
371 | 371 | ||
372 | static inline int | ||
373 | xfs_buf_verify_cksum(struct xfs_buf *bp, unsigned long cksum_offset) | ||
374 | { | ||
375 | return xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | ||
376 | cksum_offset); | ||
377 | } | ||
378 | |||
372 | /* | 379 | /* |
373 | * Handling of buftargs. | 380 | * Handling of buftargs. |
374 | */ | 381 | */ |
diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c index 796272a2e129..6cece557c3c4 100644 --- a/fs/xfs/xfs_da_btree.c +++ b/fs/xfs/xfs_da_btree.c | |||
@@ -214,8 +214,7 @@ xfs_da3_node_read_verify( | |||
214 | 214 | ||
215 | switch (be16_to_cpu(info->magic)) { | 215 | switch (be16_to_cpu(info->magic)) { |
216 | case XFS_DA3_NODE_MAGIC: | 216 | case XFS_DA3_NODE_MAGIC: |
217 | if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 217 | if (!xfs_buf_verify_cksum(bp, XFS_DA3_NODE_CRC_OFF)) |
218 | XFS_DA3_NODE_CRC_OFF)) | ||
219 | break; | 218 | break; |
220 | /* fall through */ | 219 | /* fall through */ |
221 | case XFS_DA_NODE_MAGIC: | 220 | case XFS_DA_NODE_MAGIC: |
diff --git a/fs/xfs/xfs_dir2_block.c b/fs/xfs/xfs_dir2_block.c index 90cdbf4b5f19..948dc391d42e 100644 --- a/fs/xfs/xfs_dir2_block.c +++ b/fs/xfs/xfs_dir2_block.c | |||
@@ -90,8 +90,7 @@ xfs_dir3_block_read_verify( | |||
90 | struct xfs_mount *mp = bp->b_target->bt_mount; | 90 | struct xfs_mount *mp = bp->b_target->bt_mount; |
91 | 91 | ||
92 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 92 | if ((xfs_sb_version_hascrc(&mp->m_sb) && |
93 | !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 93 | !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) || |
94 | XFS_DIR3_DATA_CRC_OFF)) || | ||
95 | !xfs_dir3_block_verify(bp)) { | 94 | !xfs_dir3_block_verify(bp)) { |
96 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 95 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
97 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 96 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
diff --git a/fs/xfs/xfs_dir2_data.c b/fs/xfs/xfs_dir2_data.c index 70acff4ee173..1952f00286ea 100644 --- a/fs/xfs/xfs_dir2_data.c +++ b/fs/xfs/xfs_dir2_data.c | |||
@@ -268,8 +268,7 @@ xfs_dir3_data_read_verify( | |||
268 | struct xfs_mount *mp = bp->b_target->bt_mount; | 268 | struct xfs_mount *mp = bp->b_target->bt_mount; |
269 | 269 | ||
270 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 270 | if ((xfs_sb_version_hascrc(&mp->m_sb) && |
271 | !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 271 | !xfs_buf_verify_cksum(bp, XFS_DIR3_DATA_CRC_OFF)) || |
272 | XFS_DIR3_DATA_CRC_OFF)) || | ||
273 | !xfs_dir3_data_verify(bp)) { | 272 | !xfs_dir3_data_verify(bp)) { |
274 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 273 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
275 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 274 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c index ae47ec6e16c4..1a412eb0e4de 100644 --- a/fs/xfs/xfs_dir2_leaf.c +++ b/fs/xfs/xfs_dir2_leaf.c | |||
@@ -180,8 +180,7 @@ __read_verify( | |||
180 | struct xfs_mount *mp = bp->b_target->bt_mount; | 180 | struct xfs_mount *mp = bp->b_target->bt_mount; |
181 | 181 | ||
182 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 182 | if ((xfs_sb_version_hascrc(&mp->m_sb) && |
183 | !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 183 | !xfs_buf_verify_cksum(bp, XFS_DIR3_LEAF_CRC_OFF)) || |
184 | XFS_DIR3_LEAF_CRC_OFF)) || | ||
185 | !xfs_dir3_leaf_verify(bp, magic)) { | 184 | !xfs_dir3_leaf_verify(bp, magic)) { |
186 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 185 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
187 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 186 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c index 48c7d18f68c3..875e7c03c978 100644 --- a/fs/xfs/xfs_dir2_node.c +++ b/fs/xfs/xfs_dir2_node.c | |||
@@ -116,8 +116,7 @@ xfs_dir3_free_read_verify( | |||
116 | struct xfs_mount *mp = bp->b_target->bt_mount; | 116 | struct xfs_mount *mp = bp->b_target->bt_mount; |
117 | 117 | ||
118 | if ((xfs_sb_version_hascrc(&mp->m_sb) && | 118 | if ((xfs_sb_version_hascrc(&mp->m_sb) && |
119 | !xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 119 | !xfs_buf_verify_cksum(bp, XFS_DIR3_FREE_CRC_OFF)) || |
120 | XFS_DIR3_FREE_CRC_OFF)) || | ||
121 | !xfs_dir3_free_verify(bp)) { | 120 | !xfs_dir3_free_verify(bp)) { |
122 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 121 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
123 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 122 | xfs_buf_ioerror(bp, EFSCORRUPTED); |
diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c index d79210b15bc0..d6a879d879ca 100644 --- a/fs/xfs/xfs_ialloc.c +++ b/fs/xfs/xfs_ialloc.c | |||
@@ -1571,8 +1571,8 @@ xfs_agi_read_verify( | |||
1571 | int agi_ok = 1; | 1571 | int agi_ok = 1; |
1572 | 1572 | ||
1573 | if (xfs_sb_version_hascrc(&mp->m_sb)) | 1573 | if (xfs_sb_version_hascrc(&mp->m_sb)) |
1574 | agi_ok = xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 1574 | agi_ok = xfs_buf_verify_cksum(bp, XFS_AGI_CRC_OFF); |
1575 | XFS_AGI_CRC_OFF); | 1575 | |
1576 | agi_ok = agi_ok && xfs_agi_verify(bp); | 1576 | agi_ok = agi_ok && xfs_agi_verify(bp); |
1577 | 1577 | ||
1578 | if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, | 1578 | if (unlikely(XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, |
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h index f9bb590acc0e..e8fed74dd669 100644 --- a/fs/xfs/xfs_linux.h +++ b/fs/xfs/xfs_linux.h | |||
@@ -119,6 +119,7 @@ typedef __uint64_t __psunsigned_t; | |||
119 | #include "xfs_iops.h" | 119 | #include "xfs_iops.h" |
120 | #include "xfs_aops.h" | 120 | #include "xfs_aops.h" |
121 | #include "xfs_super.h" | 121 | #include "xfs_super.h" |
122 | #include "xfs_cksum.h" | ||
122 | #include "xfs_buf.h" | 123 | #include "xfs_buf.h" |
123 | #include "xfs_message.h" | 124 | #include "xfs_message.h" |
124 | 125 | ||
diff --git a/fs/xfs/xfs_sb.c b/fs/xfs/xfs_sb.c index 1ea7c865b208..36f287fa9e26 100644 --- a/fs/xfs/xfs_sb.c +++ b/fs/xfs/xfs_sb.c | |||
@@ -610,8 +610,7 @@ xfs_sb_read_verify( | |||
610 | XFS_SB_VERSION_5) || | 610 | XFS_SB_VERSION_5) || |
611 | dsb->sb_crc != 0)) { | 611 | dsb->sb_crc != 0)) { |
612 | 612 | ||
613 | if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 613 | if (!xfs_buf_verify_cksum(bp, XFS_SB_CRC_OFF)) { |
614 | XFS_SB_CRC_OFF)) { | ||
615 | /* Only fail bad secondaries on a known V5 filesystem */ | 614 | /* Only fail bad secondaries on a known V5 filesystem */ |
616 | if (bp->b_bn == XFS_SB_DADDR || | 615 | if (bp->b_bn == XFS_SB_DADDR || |
617 | xfs_sb_version_hascrc(&mp->m_sb)) { | 616 | xfs_sb_version_hascrc(&mp->m_sb)) { |
diff --git a/fs/xfs/xfs_symlink_remote.c b/fs/xfs/xfs_symlink_remote.c index 7a705a451ebc..b17295515b18 100644 --- a/fs/xfs/xfs_symlink_remote.c +++ b/fs/xfs/xfs_symlink_remote.c | |||
@@ -133,8 +133,7 @@ xfs_symlink_read_verify( | |||
133 | if (!xfs_sb_version_hascrc(&mp->m_sb)) | 133 | if (!xfs_sb_version_hascrc(&mp->m_sb)) |
134 | return; | 134 | return; |
135 | 135 | ||
136 | if (!xfs_verify_cksum(bp->b_addr, BBTOB(bp->b_length), | 136 | if (!xfs_buf_verify_cksum(bp, XFS_SYMLINK_CRC_OFF) || |
137 | XFS_SYMLINK_CRC_OFF) || | ||
138 | !xfs_symlink_verify(bp)) { | 137 | !xfs_symlink_verify(bp)) { |
139 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); | 138 | XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, bp->b_addr); |
140 | xfs_buf_ioerror(bp, EFSCORRUPTED); | 139 | xfs_buf_ioerror(bp, EFSCORRUPTED); |