Fix missing metadata checksums after resize
This commit is contained in:
@@ -315,8 +315,7 @@ int disk_tool_t::write_json_meta(json11::Json meta)
|
|||||||
fromhexstr(e["data_csum"].string_value(), new_data_csum_size,
|
fromhexstr(e["data_csum"].string_value(), new_data_csum_size,
|
||||||
((uint8_t*)new_entry) + sizeof(clean_disk_entry) + 2*new_clean_entry_bitmap_size);
|
((uint8_t*)new_entry) + sizeof(clean_disk_entry) + 2*new_clean_entry_bitmap_size);
|
||||||
}
|
}
|
||||||
uint32_t *new_entry_csum = (uint32_t*)(((uint8_t*)new_entry) + sizeof(clean_disk_entry) +
|
uint32_t *new_entry_csum = (uint32_t*)(((uint8_t*)new_entry) + new_clean_entry_size - 4);
|
||||||
2*new_clean_entry_bitmap_size + new_data_csum_size);
|
|
||||||
*new_entry_csum = crc32c(0, new_entry, new_clean_entry_size - 4);
|
*new_entry_csum = crc32c(0, new_entry, new_clean_entry_size - 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -467,12 +467,13 @@ int disk_tool_t::resize_rewrite_meta()
|
|||||||
blockstore_meta_header_v2_t *new_hdr = (blockstore_meta_header_v2_t *)new_meta_buf;
|
blockstore_meta_header_v2_t *new_hdr = (blockstore_meta_header_v2_t *)new_meta_buf;
|
||||||
new_hdr->zero = 0;
|
new_hdr->zero = 0;
|
||||||
new_hdr->magic = BLOCKSTORE_META_MAGIC_V1;
|
new_hdr->magic = BLOCKSTORE_META_MAGIC_V1;
|
||||||
new_hdr->version = BLOCKSTORE_META_FORMAT_V1;
|
new_hdr->version = BLOCKSTORE_META_FORMAT_V2;
|
||||||
new_hdr->meta_block_size = dsk.meta_block_size;
|
new_hdr->meta_block_size = dsk.meta_block_size;
|
||||||
new_hdr->data_block_size = dsk.data_block_size;
|
new_hdr->data_block_size = dsk.data_block_size;
|
||||||
new_hdr->bitmap_granularity = dsk.bitmap_granularity ? dsk.bitmap_granularity : 4096;
|
new_hdr->bitmap_granularity = dsk.bitmap_granularity ? dsk.bitmap_granularity : 4096;
|
||||||
new_hdr->data_csum_type = dsk.data_csum_type;
|
new_hdr->data_csum_type = dsk.data_csum_type;
|
||||||
new_hdr->csum_block_size = dsk.csum_block_size;
|
new_hdr->csum_block_size = dsk.csum_block_size;
|
||||||
|
new_hdr->header_csum = crc32c(0, new_hdr, sizeof(*new_hdr));
|
||||||
},
|
},
|
||||||
[this](uint64_t block_num, clean_disk_entry *entry, uint8_t *bitmap)
|
[this](uint64_t block_num, clean_disk_entry *entry, uint8_t *bitmap)
|
||||||
{
|
{
|
||||||
@@ -494,6 +495,8 @@ int disk_tool_t::resize_rewrite_meta()
|
|||||||
memcpy(new_entry->bitmap, bitmap, 2*new_clean_entry_bitmap_size + new_data_csum_size);
|
memcpy(new_entry->bitmap, bitmap, 2*new_clean_entry_bitmap_size + new_data_csum_size);
|
||||||
else
|
else
|
||||||
memset(new_entry->bitmap, 0xff, 2*new_clean_entry_bitmap_size);
|
memset(new_entry->bitmap, 0xff, 2*new_clean_entry_bitmap_size);
|
||||||
|
uint32_t *new_entry_csum = (uint32_t*)(((uint8_t*)new_entry) + new_clean_entry_size - 4);
|
||||||
|
*new_entry_csum = crc32c(0, new_entry, new_clean_entry_size - 4);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user