} else {
for (auto reg : b2r_it->second) {
// determine how much of the blob to read
- unsigned chunk_size = MAX(block_size, bptr->blob.get_csum_chunk_size());
+ uint64_t chunk_size = bptr->blob.get_chunk_size(block_size);
uint64_t r_off = reg.blob_xoffset;
uint64_t r_len = reg.length;
unsigned front = r_off % chunk_size;
<< " bstart 0x" << std::hex << bstart << std::dec << dendl;
// can we pad our head/tail out with zeros?
- uint64_t chunk_size = MAX(block_size, b->blob.get_csum_chunk_size());
+ uint64_t chunk_size = b->blob.get_chunk_size(block_size);
uint64_t head_pad = offset % chunk_size;
if (head_pad && o->onode.has_any_lextents(offset - head_pad, chunk_size)) {
head_pad = 0;
bool is_compressed() const {
return has_flag(FLAG_COMPRESSED);
}
+ bool has_csum() const {
+ return has_flag(FLAG_CSUM);
+ }
+
+ /// return chunk (i.e. min readable block) size for the blob
+ uint64_t get_chunk_size(uint64_t dev_block_size) {
+ return has_csum() ? MAX(dev_block_size, get_csum_chunk_size()) : dev_block_size;
+ }
+ uint32_t get_csum_chunk_size() const {
+ return 1 << csum_chunk_order;
+ }
uint32_t get_compressed_payload_length() const {
return is_compressed() ? compressed_length : 0;
}
return len;
}
- bool has_csum() const {
- return has_flag(FLAG_CSUM);
- }
-
- uint32_t get_csum_chunk_size() const {
- return 1 << csum_chunk_order;
- }
size_t get_csum_value_size() const {
switch (csum_type) {