mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:48:12 +00:00
Ext2FS: Fix broken logic for accessing inode and block bitmaps.
This logic only worked for the very first block group.
This commit is contained in:
parent
fd5136a1ab
commit
f8951afe17
1 changed files with 10 additions and 6 deletions
|
@ -933,8 +933,9 @@ bool Ext2FS::get_inode_allocation_state(InodeIndex index) const
|
||||||
{
|
{
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
return true;
|
return true;
|
||||||
auto& bgd = group_descriptor(group_index_from_inode(index));
|
unsigned group_index = group_index_from_inode(index);
|
||||||
unsigned index_in_group = index % inodes_per_group();
|
auto& bgd = group_descriptor(group_index);
|
||||||
|
unsigned index_in_group = index - ((group_index - 1) * inodes_per_group());
|
||||||
unsigned inodes_per_bitmap_block = block_size() * 8;
|
unsigned inodes_per_bitmap_block = block_size() * 8;
|
||||||
unsigned bitmap_block_index = (index_in_group - 1) / inodes_per_bitmap_block;
|
unsigned bitmap_block_index = (index_in_group - 1) / inodes_per_bitmap_block;
|
||||||
unsigned bit_index = (index_in_group - 1) % inodes_per_bitmap_block;
|
unsigned bit_index = (index_in_group - 1) % inodes_per_bitmap_block;
|
||||||
|
@ -946,8 +947,9 @@ bool Ext2FS::get_inode_allocation_state(InodeIndex index) const
|
||||||
|
|
||||||
bool Ext2FS::set_inode_allocation_state(unsigned index, bool newState)
|
bool Ext2FS::set_inode_allocation_state(unsigned index, bool newState)
|
||||||
{
|
{
|
||||||
auto& bgd = group_descriptor(group_index_from_inode(index));
|
unsigned group_index = group_index_from_inode(index);
|
||||||
unsigned index_in_group = index % inodes_per_group();
|
auto& bgd = group_descriptor(group_index);
|
||||||
|
unsigned index_in_group = index - ((group_index - 1) * inodes_per_group());
|
||||||
unsigned inodes_per_bitmap_block = block_size() * 8;
|
unsigned inodes_per_bitmap_block = block_size() * 8;
|
||||||
unsigned bitmap_block_index = (index_in_group - 1) / inodes_per_bitmap_block;
|
unsigned bitmap_block_index = (index_in_group - 1) / inodes_per_bitmap_block;
|
||||||
unsigned bit_index = (index_in_group - 1) % inodes_per_bitmap_block;
|
unsigned bit_index = (index_in_group - 1) % inodes_per_bitmap_block;
|
||||||
|
@ -990,10 +992,12 @@ bool Ext2FS::set_block_allocation_state(GroupIndex group, BlockIndex bi, bool ne
|
||||||
dbgprintf("Ext2FS: set_block_allocation_state(group=%u, block=%u, state=%u)\n", group, bi, new_state);
|
dbgprintf("Ext2FS: set_block_allocation_state(group=%u, block=%u, state=%u)\n", group, bi, new_state);
|
||||||
auto& bgd = group_descriptor(group);
|
auto& bgd = group_descriptor(group);
|
||||||
|
|
||||||
|
BlockIndex index_in_group = bi - ((group - 1) * blocks_per_group());
|
||||||
|
|
||||||
// Update block bitmap
|
// Update block bitmap
|
||||||
unsigned blocks_per_bitmap_block = block_size() * 8;
|
unsigned blocks_per_bitmap_block = block_size() * 8;
|
||||||
unsigned bitmap_block_index = (bi - 1) / blocks_per_bitmap_block;
|
unsigned bitmap_block_index = (index_in_group - 1) / blocks_per_bitmap_block;
|
||||||
unsigned bit_index = (bi - 1) % blocks_per_bitmap_block;
|
unsigned bit_index = (index_in_group - 1) % blocks_per_bitmap_block;
|
||||||
auto block = read_block(bgd.bg_block_bitmap + bitmap_block_index);
|
auto block = read_block(bgd.bg_block_bitmap + bitmap_block_index);
|
||||||
ASSERT(block);
|
ASSERT(block);
|
||||||
auto bitmap = Bitmap::wrap(block.pointer(), blocks_per_bitmap_block);
|
auto bitmap = Bitmap::wrap(block.pointer(), blocks_per_bitmap_block);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue