[caching tools] handle version 1 metadata where policy_hint_width is zero
This commit is contained in:
@ -55,7 +55,7 @@ namespace {
|
||||
|
||||
uint32_t const SUPERBLOCK_MAGIC = 06142003;
|
||||
uint32_t const VERSION_BEGIN = 1;
|
||||
uint32_t const VERSION_END = 2;
|
||||
uint32_t const VERSION_END = 3;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
@ -109,7 +109,7 @@ superblock::superblock()
|
||||
: csum(0),
|
||||
blocknr(SUPERBLOCK_LOCATION),
|
||||
magic(SUPERBLOCK_MAGIC),
|
||||
version(VERSION_BEGIN),
|
||||
version(VERSION_END - 1u),
|
||||
policy_hint_size(0),
|
||||
mapping_root(0),
|
||||
hint_root(0),
|
||||
@ -152,7 +152,7 @@ superblock_traits::unpack(superblock_disk const &disk, superblock &core)
|
||||
for (unsigned i = 0; i < CACHE_POLICY_VERSION_SIZE; i++)
|
||||
core.policy_version[i] = to_cpu<uint32_t>(disk.policy_version[i]);
|
||||
|
||||
core.policy_hint_size = to_cpu<uint32_t>(disk.policy_hint_size);
|
||||
core.policy_hint_size = core.version == 1 ? 4 : to_cpu<uint32_t>(disk.policy_hint_size);
|
||||
|
||||
::memcpy(core.metadata_space_map_root,
|
||||
disk.metadata_space_map_root,
|
||||
@ -194,7 +194,6 @@ superblock_traits::pack(superblock const &core, superblock_disk &disk)
|
||||
|
||||
for (unsigned i = 0; i < CACHE_POLICY_VERSION_SIZE; i++)
|
||||
disk.policy_version[i] = to_disk<le32>(core.policy_version[i]);
|
||||
|
||||
disk.policy_hint_size = to_disk<le32>(core.policy_hint_size);
|
||||
|
||||
::memcpy(disk.metadata_space_map_root,
|
||||
|
Reference in New Issue
Block a user