Kernel: Fix ext2 indirect block lookup math

This was broken for doubly and triply indirect blocks :D
This commit is contained in:
2026-06-26 19:32:56 +03:00
parent 32c10f7db2
commit 6e47fa084b

View File

@@ -164,7 +164,7 @@ namespace Kernel
} }
return block_from_indirect_block_no_lock(block, data_block_index, i + 1, allocate); return block_from_indirect_block_no_lock(block, data_block_index, i + 1, allocate);
} }
data_block_index -= indices_per_block; data_block_index -= depth_block_count;
depth_block_count *= indices_per_block; depth_block_count *= indices_per_block;
} }
@@ -917,6 +917,8 @@ needs_new_block:
auto inode_location = TRY(m_fs.locate_inode(ino())); auto inode_location = TRY(m_fs.locate_inode(ino()));
auto block_buffer = TRY(m_fs.get_block_buffer()); auto block_buffer = TRY(m_fs.get_block_buffer());
// FIXME: race condition when syncing multiple inodes :)
TRY(m_fs.read_block(inode_location.block, block_buffer)); TRY(m_fs.read_block(inode_location.block, block_buffer));
if (memcmp(block_buffer.data() + inode_location.offset, &inode, sizeof(Ext2::Inode))) if (memcmp(block_buffer.data() + inode_location.offset, &inode, sizeof(Ext2::Inode)))
{ {