aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/ext2/filesystem.cpp
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-04-13 21:17:50 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-04-13 21:17:50 +0200
commit5e183b418b0e65dcdffa02a43702a0d6deb43b04 (patch)
treed6ca3839070d0509eba11125edd8cb1511c3beda /kernel/src/filesystem/ext2/filesystem.cpp
parenteb36544624c18a284debdf78b43fe627f40a8371 (diff)
downloadteachos-5e183b418b0e65dcdffa02a43702a0d6deb43b04.tar.xz
teachos-5e183b418b0e65dcdffa02a43702a0d6deb43b04.zip
Back filesystem by inode and not device
Diffstat (limited to 'kernel/src/filesystem/ext2/filesystem.cpp')
-rw-r--r--kernel/src/filesystem/ext2/filesystem.cpp21
1 files changed, 8 insertions, 13 deletions
diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp
index 0ad5c97..c0f97ed 100644
--- a/kernel/src/filesystem/ext2/filesystem.cpp
+++ b/kernel/src/filesystem/ext2/filesystem.cpp
@@ -1,8 +1,5 @@
#include "kernel/filesystem/ext2/filesystem.hpp"
-#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/linked_directory_entry.hpp"
@@ -32,12 +29,11 @@ namespace kernel::filesystem::ext2
}
} // namespace
- auto filesystem::mount(kstd::shared_ptr<kapi::devices::device> const & device) -> operation_result
+ auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) -> operation_result
{
- kernel::filesystem::filesystem::mount(device);
+ kernel::filesystem::filesystem::mount(backing_inode);
- kernel::devices::block_device_utils::read(m_device, &m_superblock, constants::superblock_offset,
- sizeof(m_superblock));
+ m_backing_inode->read(&m_superblock, constants::superblock_offset, sizeof(m_superblock));
if (m_superblock.magic != constants::magic_number)
{
@@ -51,9 +47,8 @@ namespace kernel::filesystem::ext2
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));
+ m_backing_inode->read(m_block_group_descriptors.data(), block_group_descriptor_table_offset,
+ num_block_groups * sizeof(block_group_descriptor));
m_root_inode = read_inode(constants::root_inode_number);
@@ -86,7 +81,7 @@ namespace kernel::filesystem::ext2
{
auto const global_block_number = map_inode_block_index_to_global_block_number(i, inode_data);
auto const block_offset = global_block_number * block_size;
- kernel::devices::block_device_utils::read(m_device, buffer.data(), block_offset, block_size);
+ m_backing_inode->read(buffer.data(), block_offset, block_size);
auto const * entry = reinterpret_cast<linked_directory_entry const *>(buffer.data());
auto bytes_read = 0uz;
@@ -125,7 +120,7 @@ namespace kernel::filesystem::ext2
auto const inode_offset = inode_table_offset + inode_index_within_group * get_inode_size();
auto new_inode = kstd::make_shared<inode>(this);
- kernel::devices::block_device_utils::read(m_device, &new_inode->m_data, inode_offset, sizeof(inode_data));
+ m_backing_inode->read(&new_inode->m_data, inode_offset, sizeof(inode_data));
// TODO BA-FS26 improve inode_kind really needed? or just map it to the mode bits?
if (S_ISREG(new_inode->m_data.mode))
@@ -209,7 +204,7 @@ namespace kernel::filesystem::ext2
auto const block_start_offset = block_number * get_block_size();
auto const number_start_address = block_start_offset + index * sizeof(uint32_t);
- kernel::devices::block_device_utils::read(m_device, &block_number_buffer, number_start_address, sizeof(uint32_t));
+ m_backing_inode->read(&block_number_buffer, number_start_address, sizeof(uint32_t));
return block_number_buffer;
}