On Wed, May 22, 2019 at 10:18:57AM +0200, Johannes Thumshirn wrote:
> This patchset add support for adding new checksum types in BTRFS.
>
> Currently BTRFS only supports CRC32C as data and metadata checksum, which is
> good if you only want to detect errors due to data corruption in hardware.
>
> But CRC32C isn't able cover other use-cases like de-duplication or
> cryptographically save data integrity guarantees.
>
> The following properties made SHA-256 interesting for these use-cases:
> - Still considered cryptographically sound
> - Reasonably well understood by the security industry
> - Result fits into the 32Byte/256Bit we have for the checksum in the on-disk
> format
> - Small enough collision space to make it feasible for data de-duplication
> - Fast enough to calculate and offloadable to crypto hardware via the kernel's
> crypto_shash framework.
>
> The patchset also provides mechanisms for plumbing in different hash
> algorithms relatively easy.
>
> Unfortunately this patchset also partially reverts commit:
> 9678c54388b6 ("btrfs: Remove custom crc32c init code")
>
> This is an intermediate submission, as a) mkfs.btrfs support is still missing
> and b) David requested to have three hash algorithms, where 1 is crc32c, one
> cryptographically secure and one in between.
>
> A changelog can be found directly in the patches. The branch is also available
> on a gitweb at
> https://git.kernel.org/pub/scm/linux/kernel/git/jth/linux.git/log/?h=btrfs-csum-rework.v3
>
> Johannes Thumshirn (13):
> btrfs: use btrfs_csum_data() instead of directly calling crc32c
> btrfs: resurrect btrfs_crc32c()
> btrfs: use btrfs_crc32c{,_final}() in for free space cache
> btrfs: don't assume ordered sums to be 4 bytes
> btrfs: dont assume compressed_bio sums to be 4 bytes
> btrfs: format checksums according to type for printing
> btrfs: add common checksum type validation
> btrfs: check for supported superblock checksum type before checksum
> validation
> btrfs: Simplify btrfs_check_super_csum() and get rid of size
> assumptions
> btrfs: add boilerplate code for directly including the crypto
> framework
> btrfs: directly call into crypto framework for checsumming
> btrfs: remove assumption about csum type form
> btrfs_print_data_csum_error()
> btrfs: add sha256 as another checksum algorithm
1-5 are reviewed and ok, 6 and 13 should be reworked, 7-12 is ok. I
can't put the branch to next yet due to the csum formatting "issues" but
will do once you resend. Should be ok just 6 and 13 as they're
independent.