mirror of
https://github.com/RGBCube/serenity
synced 2025-06-30 02:12:11 +00:00
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:
parent
508063ef85
commit
bab24ce34c
2 changed files with 8 additions and 2 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue