On Wed, May 22, 2019 at 10:19:10AM +0200, Johannes Thumshirn wrote: > Now that we everything in place, we can add SHA-256 as another checksum > algorithm. > > SHA-256 was taken as it was the cryptographically strongest algorithm that > can fit into the 32 Bytes we have left. > > Signed-off-by: Johannes Thumshirn <jthumsh...@suse.de> > > --- > changes to v2: > - Add pre dependency on sha256 > Changes to v1: > - Select SHA-256 in KConfig > - Minimalize switch() in btrfs_supported_super_csum() (Nikolay) > - Use enum for new on-disk checksum type (Nikolay/David) > - Format SHA256 using sprintf()'s hexdump mode > --- > fs/btrfs/Kconfig | 1 + > fs/btrfs/btrfs_inode.h | 3 +++ > fs/btrfs/ctree.h | 4 ++-- > fs/btrfs/disk-io.c | 1 + > fs/btrfs/super.c | 1 + > include/uapi/linux/btrfs_tree.h | 6 ++++-- > 6 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/fs/btrfs/Kconfig b/fs/btrfs/Kconfig > index 212b4a854f2c..2521a24f74be 100644 > --- a/fs/btrfs/Kconfig > +++ b/fs/btrfs/Kconfig > @@ -4,6 +4,7 @@ config BTRFS_FS > tristate "Btrfs filesystem support" > select CRYPTO > select CRYPTO_CRC32C > + select CRYPTO_SHA256 > select ZLIB_INFLATE > select ZLIB_DEFLATE > select LZO_COMPRESS > diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h > index e79fd9129075..125bc7f3b871 100644 > --- a/fs/btrfs/btrfs_inode.h > +++ b/fs/btrfs/btrfs_inode.h > @@ -346,6 +346,9 @@ static inline void btrfs_csum_format(struct > btrfs_super_block *sb, > case BTRFS_CSUM_TYPE_CRC32: > snprintf(cbuf, size, "0x%08x", *(u32 *)csum); > break; > + case BTRFS_CSUM_TYPE_SHA256: > + snprintf(cbuf, size, "%*phN", (int)size / 8, csum);
This seems to print the buffer in the host order ('h', other formats use that). I wonder if there needs to be some caution about endianity here. Ideally we won't need to care and just use the right format that will printk handle transparently for us.