[thin_check (rust)] check metadata space map

This commit is contained in:
Joe Thornber
2020-08-12 08:02:29 +01:00
parent e65d2dec6f
commit 3757e1d947
2 changed files with 137 additions and 82 deletions
+24 -1
View File
@@ -1,6 +1,6 @@
use anyhow::{anyhow, Result};
use fixedbitset::FixedBitSet;
use nom::{number::complete::*, IResult};
use nom::{multi::count, number::complete::*, IResult};
use std::sync::{Arc, Mutex};
use crate::io_engine::*;
@@ -78,6 +78,29 @@ impl Unpack for IndexEntry {
//------------------------------------------
const MAX_METADATA_BITMAPS: usize = 255;
pub struct MetadataIndex {
pub indexes: Vec<IndexEntry>,
}
impl Unpack for MetadataIndex {
fn disk_size() -> u32 {
BLOCK_SIZE as u32
}
fn unpack(data: &[u8]) -> IResult<&[u8], Self> {
let (i, _csum) = le_u32(data)?;
let (i, _padding) = le_u32(i)?;
let (i, _blocknr) = le_u64(i)?;
let (i, indexes) = count(IndexEntry::unpack, MAX_METADATA_BITMAPS)(i)?;
Ok((i, MetadataIndex {indexes}))
}
}
//------------------------------------------
#[derive(Debug)]
pub struct BitmapHeader {
pub csum: u32,