[haiku-commits] haiku: hrev53567 - src/add-ons/kernel/file_systems/btrfs

  • From: Adrien Destugues <pulkomandy@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 27 Oct 2019 03:55:39 -0400 (EDT)

hrev53567 adds 1 changeset to branch 'master'
old head: 5fb44dff84ebd514be162d3bd37c46cf1eb58dea
new head: 8f40380d6a1461226df8846d387380f6409b04b4
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=8f40380d6a14+%5E5fb44dff84eb

----------------------------------------------------------------------------

8f40380d6a14: btrfs: update superblock checksum on write
  
  Note there are 32bytes on disk for the checksum, but only the first 4
  are used. This is because btrfs can (or could, at some point?) use
  sha256 instead of crc32 when higher reliability is needed (but high
  performance isn't).
  
  Change-Id: I8a2bcf8f462440568d9b3e2d9fbdb7208723bfb9
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/1596
  Reviewed-by: Chế Vũ Gia Hy <ugen@xxxxxxxxxxx>
  Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>

                                           [ brjhaiku <brjhaiku@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53567
Commit:      8f40380d6a1461226df8846d387380f6409b04b4
URL:         https://git.haiku-os.org/haiku/commit/?id=8f40380d6a14
Author:      brjhaiku <brjhaiku@xxxxxxxxx>
Date:        Tue Jul 16 04:15:31 2019 UTC
Committer:   Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Commit-Date: Sun Oct 27 07:54:16 2019 UTC

----------------------------------------------------------------------------

2 files changed, 10 insertions(+), 2 deletions(-)
src/add-ons/kernel/file_systems/btrfs/CRCTable.cpp |  2 +-
src/add-ons/kernel/file_systems/btrfs/Volume.cpp   | 10 +++++++++-

----------------------------------------------------------------------------

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..fd180878be 100644
--- a/src/add-ons/kernel/file_systems/btrfs/Volume.cpp
+++ b/src/add-ons/kernel/file_systems/btrfs/Volume.cpp
@@ -15,6 +15,7 @@
 #include "BTree.h"
 #include "CachedBlock.h"
 #include "Chunk.h"
+#include "CRCTable.h"
 #include "DebugSupport.h"
 #include "ExtentAllocator.h"
 #include "Inode.h"
@@ -656,7 +657,14 @@ Volume::FindBlock(off_t logical, off_t& physical)
 status_t
 Volume::WriteSuperBlock()
 {
-       // TODO(lesderid): Calculate checksum
+       uint32 checksum = calculate_crc((uint32)~1,
+                       (uint8 *)(&fSuperBlock + sizeof(fSuperBlock.checksum)),
+                       sizeof(fSuperBlock) - sizeof(fSuperBlock.checksum));
+
+       fSuperBlock.checksum[0] = (checksum >>  0) & 0xFF;
+       fSuperBlock.checksum[1] = (checksum >>  8) & 0xFF;
+       fSuperBlock.checksum[2] = (checksum >> 16) & 0xFF;
+       fSuperBlock.checksum[3] = (checksum >> 24) & 0xFF;
 
        if (write_pos(fDevice, BTRFS_SUPER_BLOCK_OFFSET, &fSuperBlock,
                        sizeof(btrfs_super_block))


Other related posts:

  • » [haiku-commits] haiku: hrev53567 - src/add-ons/kernel/file_systems/btrfs - Adrien Destugues