[block-cache] Add check_raw() to bcache::validator
This commit is contained in:
parent
45e9916428
commit
778c153c1e
@ -26,12 +26,14 @@ namespace bcache {
|
|||||||
virtual ~validator() {}
|
virtual ~validator() {}
|
||||||
|
|
||||||
virtual void check(void const *data, block_address location) const = 0;
|
virtual void check(void const *data, block_address location) const = 0;
|
||||||
|
virtual bool check_raw(void const *data) const = 0;
|
||||||
virtual void prepare(void *data, block_address location) const = 0;
|
virtual void prepare(void *data, block_address location) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class noop_validator : public validator {
|
class noop_validator : public validator {
|
||||||
public:
|
public:
|
||||||
void check(void const *data, block_address location) const {}
|
void check(void const *data, block_address location) const {}
|
||||||
|
bool check_raw(void const *data) const {return true;}
|
||||||
void prepare(void *data, block_address location) const {}
|
void prepare(void *data, block_address location) const {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -292,6 +292,15 @@ namespace validator {
|
|||||||
throw checksum_error("bad checksum in superblock");
|
throw checksum_error("bad checksum in superblock");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
superblock_disk const *sbd = reinterpret_cast<superblock_disk const *>(raw);
|
||||||
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
sum.append(&sbd->flags, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(sbd->csum))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
||||||
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
@ -219,6 +219,15 @@ namespace era_validator {
|
|||||||
throw checksum_error("bad checksum in superblock");
|
throw checksum_error("bad checksum in superblock");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
superblock_disk const *sbd = reinterpret_cast<superblock_disk const *>(raw);
|
||||||
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
sum.append(&sbd->flags, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(sbd->csum))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
||||||
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
@ -43,6 +43,15 @@ namespace persistent_data {
|
|||||||
throw checksum_error("bad block nr in array block");
|
throw checksum_error("bad block nr in array block");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
array_block_disk const *data = reinterpret_cast<array_block_disk const *>(raw);
|
||||||
|
crc32c sum(ARRAY_CSUM_XOR);
|
||||||
|
sum.append(&data->max_entries, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(data->csum))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
array_block_disk *data = reinterpret_cast<array_block_disk *>(raw);
|
array_block_disk *data = reinterpret_cast<array_block_disk *>(raw);
|
||||||
data->blocknr = to_disk<base::le64, uint64_t>(location);
|
data->blocknr = to_disk<base::le64, uint64_t>(location);
|
||||||
|
@ -32,7 +32,6 @@ namespace {
|
|||||||
using namespace persistent_data;
|
using namespace persistent_data;
|
||||||
using namespace btree_detail;
|
using namespace btree_detail;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
@ -50,6 +50,15 @@ namespace {
|
|||||||
throw checksum_error("bad block nr in space map bitmap");
|
throw checksum_error("bad block nr in space map bitmap");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
bitmap_header const *data = reinterpret_cast<bitmap_header const *>(raw);
|
||||||
|
crc32c sum(BITMAP_CSUM_XOR);
|
||||||
|
sum.append(&data->not_used, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(data->csum))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
bitmap_header *data = reinterpret_cast<bitmap_header *>(raw);
|
bitmap_header *data = reinterpret_cast<bitmap_header *>(raw);
|
||||||
data->blocknr = to_disk<base::le64, uint64_t>(location);
|
data->blocknr = to_disk<base::le64, uint64_t>(location);
|
||||||
@ -77,6 +86,15 @@ namespace {
|
|||||||
throw checksum_error("bad block nr in metadata index block");
|
throw checksum_error("bad block nr in metadata index block");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
metadata_index const *mi = reinterpret_cast<metadata_index const *>(raw);
|
||||||
|
crc32c sum(INDEX_CSUM_XOR);
|
||||||
|
sum.append(&mi->padding_, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(mi->csum_))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
metadata_index *mi = reinterpret_cast<metadata_index *>(raw);
|
metadata_index *mi = reinterpret_cast<metadata_index *>(raw);
|
||||||
mi->blocknr_ = to_disk<base::le64, uint64_t>(location);
|
mi->blocknr_ = to_disk<base::le64, uint64_t>(location);
|
||||||
|
@ -31,6 +31,16 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
disk_node const *data = reinterpret_cast<disk_node const *>(raw);
|
||||||
|
node_header const *n = &data->header;
|
||||||
|
crc32c sum(BTREE_CSUM_XOR);
|
||||||
|
sum.append(&n->flags, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(n->csum))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
disk_node *data = reinterpret_cast<disk_node *>(raw);
|
disk_node *data = reinterpret_cast<disk_node *>(raw);
|
||||||
node_header *n = &data->header;
|
node_header *n = &data->header;
|
||||||
|
@ -98,6 +98,15 @@ namespace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
superblock_disk const *sbd = reinterpret_cast<superblock_disk const *>(raw);
|
||||||
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
sum.append(&sbd->flags_, MD_BLOCK_SIZE - sizeof(uint32_t));
|
||||||
|
if (sum.get_sum() != to_cpu<uint32_t>(sbd->csum_))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
superblock_disk *sbd = reinterpret_cast<superblock_disk *>(raw);
|
||||||
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
crc32c sum(SUPERBLOCK_CSUM_SEED);
|
||||||
|
@ -44,6 +44,14 @@ namespace {
|
|||||||
throw runtime_error("validator check zero");
|
throw runtime_error("validator check zero");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool check_raw(void const *raw) const {
|
||||||
|
unsigned char const *data = reinterpret_cast<unsigned char const *>(raw);
|
||||||
|
for (unsigned b = 0; b < BlockSize; b++)
|
||||||
|
if (data[b] != 0)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepare(void *raw, block_address location) const {
|
virtual void prepare(void *raw, block_address location) const {
|
||||||
unsigned char *data = reinterpret_cast<unsigned char *>(raw);
|
unsigned char *data = reinterpret_cast<unsigned char *>(raw);
|
||||||
for (unsigned b = 0; b < BlockSize; b++)
|
for (unsigned b = 0; b < BlockSize; b++)
|
||||||
|
Loading…
Reference in New Issue
Block a user