Commit f9668a09 authored by Dave Chinner's avatar Dave Chinner Committed by Ben Myers

xfs: fix sparse reported log CRC endian issue

Not a bug as such, just warning noise from the xlog_cksum()
returning a __be32 type when it should be returning a __le32 type.

On Wed, Nov 28, 2012 at 08:30:59AM -0500, Christoph Hellwig wrote:
> But why are we storing the crc field little endian while all other on
> disk formats are big endian? (And yes I realize it might as well have
> been me who did that back in the idea, but I still have no idea why)

Because the CRC always returns the calcuation LE format, even on BE
systems. So rather than always having to byte swap it everywhere and
have all the force casts and anootations for sparse, it seems simpler to
just make it a __le32 everywhere....
Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarBen Myers <bpm@sgi.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent b870553c
...@@ -1538,7 +1538,7 @@ xlog_pack_data( ...@@ -1538,7 +1538,7 @@ xlog_pack_data(
* This is a little more complicated than it should be because the various * This is a little more complicated than it should be because the various
* headers and the actual data are non-contiguous. * headers and the actual data are non-contiguous.
*/ */
__be32 __le32
xlog_cksum( xlog_cksum(
struct xlog *log, struct xlog *log,
struct xlog_rec_header *rhead, struct xlog_rec_header *rhead,
......
...@@ -555,7 +555,7 @@ extern int ...@@ -555,7 +555,7 @@ extern int
xlog_recover_finish( xlog_recover_finish(
struct xlog *log); struct xlog *log);
extern __be32 xlog_cksum(struct xlog *log, struct xlog_rec_header *rhead, extern __le32 xlog_cksum(struct xlog *log, struct xlog_rec_header *rhead,
char *dp, int size); char *dp, int size);
extern kmem_zone_t *xfs_log_ticket_zone; extern kmem_zone_t *xfs_log_ticket_zone;
......
...@@ -3233,15 +3233,15 @@ xlog_unpack_data_crc( ...@@ -3233,15 +3233,15 @@ xlog_unpack_data_crc(
xfs_caddr_t dp, xfs_caddr_t dp,
struct xlog *log) struct xlog *log)
{ {
__be32 crc; __le32 crc;
crc = xlog_cksum(log, rhead, dp, be32_to_cpu(rhead->h_len)); crc = xlog_cksum(log, rhead, dp, be32_to_cpu(rhead->h_len));
if (crc != rhead->h_crc) { if (crc != rhead->h_crc) {
if (rhead->h_crc || xfs_sb_version_hascrc(&log->l_mp->m_sb)) { if (rhead->h_crc || xfs_sb_version_hascrc(&log->l_mp->m_sb)) {
xfs_alert(log->l_mp, xfs_alert(log->l_mp,
"log record CRC mismatch: found 0x%x, expected 0x%x.\n", "log record CRC mismatch: found 0x%x, expected 0x%x.\n",
be32_to_cpu(rhead->h_crc), le32_to_cpu(rhead->h_crc),
be32_to_cpu(crc)); le32_to_cpu(crc));
xfs_hex_dump(dp, 32); xfs_hex_dump(dp, 32);
} }
......
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