aboutsummaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-04-02 11:09:13 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-04-11 07:58:20 +0200
commit16b854e991bb791694268d09eb696c719cdff42f (patch)
treebf5a0aea772ca1f9f3ab4f015d825f626553dce0 /kernel/src
parent1dcf253fdf8169a3b2b71bfac68f2f25951af1a8 (diff)
downloadteachos-16b854e991bb791694268d09eb696c719cdff42f.tar.xz
teachos-16b854e991bb791694268d09eb696c719cdff42f.zip
read block_group_descriptors
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/filesystem/ext2/filesystem.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp
index 0ebb243..96c1589 100644
--- a/kernel/src/filesystem/ext2/filesystem.cpp
+++ b/kernel/src/filesystem/ext2/filesystem.cpp
@@ -3,12 +3,14 @@
#include "kapi/devices/device.hpp"
#include "kernel/devices/block_device_utils.hpp"
+#include "kernel/filesystem/ext2/block_group_descriptor.hpp"
#include "kernel/filesystem/ext2/inode.hpp"
#include "kernel/filesystem/ext2/superblock.hpp"
#include "kernel/filesystem/filesystem.hpp"
#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
+#include <kstd/vector>
#include <cstddef>
#include <cstdint>
@@ -47,6 +49,17 @@ namespace kernel::filesystem::ext2
return -1;
}
+ auto const block_size = get_block_size();
+ auto const blocks_per_group = m_superblock.blocks_per_group;
+ auto const num_block_groups = (m_superblock.blocks_count + blocks_per_group - 1) / blocks_per_group;
+
+ m_block_group_descriptors = kstd::vector<block_group_descriptor>(num_block_groups);
+
+ auto const block_group_descriptor_table_offset = block_size == 1024 ? 2 * block_size : block_size;
+ kernel::devices::block_device_utils::read(m_device, m_block_group_descriptors.data(),
+ block_group_descriptor_table_offset,
+ num_block_groups * sizeof(block_group_descriptor));
+
// TODO BA-FS26 load proper root inode from ext2 metadata
// m_root_inode = inode{inode_kind::directory};