Re: [PATCH 1/2] xfs: add CRC infrastructure

Mark Tinguely
2012-11-08T14:41:06Z

On 11/07/12 07:37, Dave Chinner wrote:
> +/*
> + * Calculate the intermediate checksum for a buffer that has the CRC field
> + * inside it. The offset of the 32bit crc fields is passed as the
> + * cksum_offset parameter.
> + */
> +static inline __uint32_t
> +xfs_start_cksum(char *buffer, size_t length, unsigned long cksum_offset)
> +{
> + __uint32_t zero = 0;
> + __uint32_t crc;
> +
> + /* Calculate CRC up to the checksum. */
> + crc = crc32c(XFS_CRC_SEED, buffer, cksum_offset);
> +
> + /* Skip checksum field */
> + crc = crc32c(crc,&zero, sizeof(__u32));
> +
> + /* Calculate the rest of the CRC. */
> + return crc32c(crc,&buffer[cksum_offset + sizeof(__be32)],
> + length - (cksum_offset + sizeof(__be32)));
> +}

Why not zero the cksum field and then calculate the crc on the whole buffer?

--Mark.