From caf05af5dd9364af5fc808921f8b0c3a43736aaf Mon Sep 17 00:00:00 2001 From: brjhaiku Date: Tue, 16 Jul 2019 09:45:31 +0530 Subject: [PATCH] btrfs: update superblock checksum on write MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I8a2bcf8f462440568d9b3e2d9fbdb7208723bfb9 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1596 Reviewed-by: Chế Vũ Gia Hy Reviewed-by: Adrien Destugues --- src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp | 2 +- src/add-ons/kernel/file_systems/btrfs/Volume.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp b/src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp index 3b16ecdba3..7c3e42b380 100644 --- a/src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp @@ -66,7 +66,7 @@ static uint32 kCrcTable[256] = { \param data Pointer to the byte stream. \param length Length of the byte stream in bytes. - \return The crc checksum, or 0 if an error occurred. + \return The crc checksum. */ uint32 calculate_crc(uint32 crc, uint8* data, uint16 length) diff --git a/src/add-ons/kernel/file_systems/btrfs/Volume.cpp b/src/add-ons/kernel/file_systems/btrfs/Volume.cpp index 311a001c51..e3bead5c23 100644 --- a/src/add-ons/kernel/file_systems/btrfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/btrfs/Volume.cpp @@ -656,7 +656,9 @@ Volume::FindBlock(off_t logical, off_t& physical) status_t Volume::WriteSuperBlock() { - // TODO(lesderid): Calculate checksum + fSuperBlock.checksum = calculate_crc((uint32)~1, + (uint8 *)(*(&fSuperBlock + sizeof(fSuperBlock.checksum))), + sizeof(fSuperBlock) - sizeof(fSuperBlock.checksum)); if (write_pos(fDevice, BTRFS_SUPER_BLOCK_OFFSET, &fSuperBlock, sizeof(btrfs_super_block))