mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 01:20:25 +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
Notes:
sideshowbarker
2024-07-19 01:31:49 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/bab24ce34c6
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) {
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
Loading…
Reference in a new issue