aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-04-06 10:35:45 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-04-11 07:58:20 +0200
commit725116d22e850c502e6cb8d42b100da1080dfec0 (patch)
tree5ae1a81bf50dcb94cd7ccf5894973bf47479c625 /kernel
parentfe8706422605e466427ae2727ddb98ce5cd984f6 (diff)
downloadteachos-725116d22e850c502e6cb8d42b100da1080dfec0.tar.xz
teachos-725116d22e850c502e6cb8d42b100da1080dfec0.zip
Add file system pointer to ext2 inode
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/kernel/filesystem/ext2/inode.hpp5
-rw-r--r--kernel/src/filesystem/ext2/filesystem.cpp2
-rw-r--r--kernel/src/filesystem/ext2/inode.cpp12
3 files changed, 15 insertions, 4 deletions
diff --git a/kernel/include/kernel/filesystem/ext2/inode.hpp b/kernel/include/kernel/filesystem/ext2/inode.hpp
index 4284e6f..9318008 100644
--- a/kernel/include/kernel/filesystem/ext2/inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/inode.hpp
@@ -11,6 +11,8 @@
namespace kernel::filesystem::ext2
{
+ struct filesystem;
+
struct [[gnu::packed]] inode_data
{
uint16_t mode;
@@ -35,12 +37,13 @@ namespace kernel::filesystem::ext2
struct inode : kernel::filesystem::inode
{
- inode();
+ explicit inode(filesystem * fs);
auto read(void * buffer, size_t offset, size_t size) const -> size_t override;
auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
inode_data m_data{};
+ filesystem * m_filesystem;
};
} // namespace kernel::filesystem::ext2
diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp
index 56c0b88..514bb59 100644
--- a/kernel/src/filesystem/ext2/filesystem.cpp
+++ b/kernel/src/filesystem/ext2/filesystem.cpp
@@ -136,7 +136,7 @@ namespace kernel::filesystem::ext2
auto const inode_table_offset = static_cast<size_t>(inode_table_start_block) * block_size;
auto const inode_offset = inode_table_offset + inode_index_within_group * get_inode_size();
- auto new_inode = kstd::make_shared<inode>();
+ 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));
// TODO BA-FS26 improve inode_kind really needed? or just map it to the mode bits?
diff --git a/kernel/src/filesystem/ext2/inode.cpp b/kernel/src/filesystem/ext2/inode.cpp
index b75969a..4d36e66 100644
--- a/kernel/src/filesystem/ext2/inode.cpp
+++ b/kernel/src/filesystem/ext2/inode.cpp
@@ -1,14 +1,22 @@
#include "kernel/filesystem/ext2/inode.hpp"
+#include "kapi/system.hpp"
+
#include "kernel/filesystem/inode.hpp"
#include <cstddef>
namespace kernel::filesystem::ext2
{
- inode::inode()
+ inode::inode(filesystem * fs)
: kernel::filesystem::inode(inode_kind::regular)
- {}
+ , m_filesystem(fs)
+ {
+ if (!m_filesystem)
+ {
+ kapi::system::panic("[EXT2] ext2::inode constructed with filesystem null pointer");
+ }
+ }
auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
{