Ext2FS: Deallocate block list meta blocks when freeing an inode

When computing the list of blocks to deallocate when freeing an inode,
we would stop collecting blocks after reaching the inode's block count.
Since we're getting rid of the inode, we need to also include the meta
blocks used by the on-disk block list itself.
This commit is contained in:
Andreas Kling 2020-11-07 16:45:03 +01:00
parent 508063ef85
commit bab24ce34c
Notes: sideshowbarker 2024-07-19 01:31:49 +09:00
2 changed files with 8 additions and 2 deletions

View file

@ -184,7 +184,7 @@ bool Ext2FS::find_block_containing_inode(unsigned inode, unsigned& block_index,
return true;
}
Ext2FS::BlockListShape Ext2FS::compute_block_list_shape(unsigned blocks)
Ext2FS::BlockListShape Ext2FS::compute_block_list_shape(unsigned blocks) const
{
BlockListShape shape;
const unsigned entries_per_block = EXT2_ADDR_PER_BLOCK(&super_block());
@ -440,6 +440,12 @@ Vector<Ext2FS::BlockIndex> Ext2FS::block_list_for_inode_impl(const ext2_inode& e
#endif
unsigned blocks_remaining = block_count;
if (include_block_list_blocks) {
auto shape = compute_block_list_shape(block_count);
blocks_remaining += shape.meta_blocks;
}
Vector<BlockIndex> list;
auto add_block = [&](BlockIndex bi) {

View file

@ -165,7 +165,7 @@ private:
unsigned meta_blocks { 0 };
};
BlockListShape compute_block_list_shape(unsigned blocks);
BlockListShape compute_block_list_shape(unsigned blocks) const;
unsigned m_block_group_count { 0 };