• C
    xfs: add CRC checks to the log · 0e446be4
    Christoph Hellwig 提交于
    Implement CRCs for the log buffers.  We re-use a field in
    struct xlog_rec_header that was used for a weak checksum of the
    log buffer payload in debug builds before.
    
    The new checksumming uses the crc32c checksum we will use elsewhere
    in XFS, and also protects the record header and addition cycle data.
    
    Due to this there are some interesting changes in xlog_sync, as we
    need to do the cycle wrapping for the split buffer case much earlier,
    as we would touch the buffer after generating the checksum otherwise.
    
    The CRC calculation is always enabled, even for non-CRC filesystems,
    as adding this CRC does not change the log format. On non-CRC
    filesystems, only issue an alert if a CRC mismatch is found and
    allow recovery to continue - this will act as an indicator that
    log recovery problems are a result of log corruption. On CRC enabled
    filesystems, however, log recovery will fail.
    
    Note that existing debug kernels will write a simple checksum value
    to the log, so the first time this is run on a filesystem taht was
    last used on a debug kernel it will through CRC mismatch warning
    errors. These can be ignored.
    
    Initially based on a patch from Dave Chinner, then modified
    significantly by Christoph Hellwig.  Modified again by Dave Chinner
    to get to this version.
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NDave Chinner <dchinner@redhat.com>
    Reviewed-by: NMark Tinguely <tinguely@sgi.com>
    Signed-off-by: NBen Myers <bpm@sgi.com>
    0e446be4
xfs_log_recover.c 104.9 KB