65a66,69
> // Superblocks must be aware of the block size due to their co-
> // allocation conditions
> superblock->setBlkSize(blkSize);
>
99,109d102
< bool
< CompressedTags::canCoAllocate(const SuperBlk* superblock,
< const std::size_t compressed_size) const
< {
< // Simple co-allocation function: at most numBlocksPerSector blocks that
< // compress at least to (100/numBlocksPerSector)% of their original size
< // can share a superblock
< return superblock->isCompressed() &&
< (compressed_size <= (blkSize * 8) / numBlocksPerSector);
< }
<
130c123,124
< canCoAllocate(superblock, compressed_size))
---
> superblock->isCompressed() &&
> superblock->canCoAllocate(compressed_size))
173a168,175
> // We check if block can co-allocate before inserting, because this check
> // assumes the block is still invalid
> CompressionBlk* compression_blk = static_cast<CompressionBlk*>(blk);
> const SuperBlk* superblock = static_cast<const SuperBlk*>(
> compression_blk->getSectorBlock());
> const bool is_co_allocatable = superblock->isCompressed() &&
> superblock->canCoAllocate(compression_blk->getSizeBits());
>
177,179c179,184
< // @todo We always store compressed blocks when possible
< CompressionBlk* compression_blk = static_cast<CompressionBlk*>(blk);
< compression_blk->setUncompressed();
---
> // We always store compressed blocks when possible
> if (is_co_allocatable) {
> compression_blk->setCompressed();
> } else {
> compression_blk->setUncompressed();
> }