From 6e47fa084bbd27fe0ed27120b2613f7c326332bc Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 26 Jun 2026 19:32:56 +0300 Subject: [PATCH] Kernel: Fix ext2 indirect block lookup math This was broken for doubly and triply indirect blocks :D --- kernel/kernel/FS/Ext2/Inode.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/FS/Ext2/Inode.cpp b/kernel/kernel/FS/Ext2/Inode.cpp index ba124abf..cbe48b32 100644 --- a/kernel/kernel/FS/Ext2/Inode.cpp +++ b/kernel/kernel/FS/Ext2/Inode.cpp @@ -164,7 +164,7 @@ namespace Kernel } 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; } @@ -917,6 +917,8 @@ needs_new_block: auto inode_location = TRY(m_fs.locate_inode(ino())); 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)); if (memcmp(block_buffer.data() + inode_location.offset, &inode, sizeof(Ext2::Inode))) {