aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-08-22 19:44:19 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-08-26 11:16:16 +0200
commitf9877bcf8faf8a216bbe95d82c546581c093b3cb (patch)
tree6016a48a0b598465bae2fff2cec9a293e518e79c /kernel
parentc1678823d808932c065942e9aa0f7d7fe0246b8a (diff)
downloadkernel-f9877bcf8faf8a216bbe95d82c546581c093b3cb.tar.xz
kernel-f9877bcf8faf8a216bbe95d82c546581c093b3cb.zip
kernel/fs: ext2: let VFS associate the owning mount
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.cpp11
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.hpp3
-rw-r--r--kernel/kernel/filesystem/ext2/inode.tests.cpp4
3 files changed, 9 insertions, 9 deletions
diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp
index 58d24fc1..115f6028 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.cpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.cpp
@@ -134,7 +134,7 @@ namespace kernel::filesystem::ext2
return kstd::failure(read_result.error());
}
- auto root = read_inode(constants::root_inode_number, nullptr);
+ auto root = read_inode(constants::root_inode_number);
if (!root)
{
@@ -187,7 +187,7 @@ namespace kernel::filesystem::ext2
auto const entry_name = std::string_view{entry->name.data(), entry->name_len};
if (entry_name == name)
{
- return read_inode(entry->inode, ext2_parent->owning_mount().lock());
+ return read_inode(entry->inode);
}
bytes_read += kstd::bytes{entry->rec_len};
@@ -395,8 +395,7 @@ namespace kernel::filesystem::ext2
kstd::libc::memcpy(entry->name.data(), name.data(), name_len);
}
- auto filesystem::read_inode(uint32_t inode_number, kstd::shared_ptr<struct mount> const & mount) const
- -> kstd::result<kstd::shared_ptr<inode>>
+ auto filesystem::read_inode(uint32_t inode_number) const -> kstd::result<kstd::shared_ptr<inode>>
{
if (auto inode_offset = calculate_inode_offset(inode_number))
{
@@ -409,9 +408,7 @@ namespace kernel::filesystem::ext2
}
else
{
- auto inode = kstd::make_shared<struct inode>(inode_number, new_inode_data);
- inode->set_owning_mount(mount);
- return inode;
+ return kstd::make_shared<struct inode>(inode_number, new_inode_data);
}
}
else
diff --git a/kernel/kernel/filesystem/ext2/filesystem.hpp b/kernel/kernel/filesystem/ext2/filesystem.hpp
index 2f9d0d58..23629928 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.hpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.hpp
@@ -178,8 +178,7 @@ namespace kernel::filesystem::ext2
std::string_view name, uint8_t file_type) -> void;
[[nodiscard]] auto calculate_inode_offset(uint32_t inode_number) const -> kstd::result<kstd::bytes>;
- [[nodiscard]] auto read_inode(uint32_t inode_number, kstd::shared_ptr<struct mount> const & mount) const
- -> kstd::result<kstd::shared_ptr<inode>>;
+ [[nodiscard]] auto read_inode(uint32_t inode_number) const -> kstd::result<kstd::shared_ptr<inode>>;
[[nodiscard]] auto read_block_number_at_index(uint32_t block_number, size_t index) const -> kstd::result<uint32_t>;
[[nodiscard]] auto block_group_descriptor_table_offset() const -> kstd::bytes;
diff --git a/kernel/kernel/filesystem/ext2/inode.tests.cpp b/kernel/kernel/filesystem/ext2/inode.tests.cpp
index ecfc76ba..48af4d75 100644
--- a/kernel/kernel/filesystem/ext2/inode.tests.cpp
+++ b/kernel/kernel/filesystem/ext2/inode.tests.cpp
@@ -112,6 +112,8 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Ext2 in
REQUIRE(file);
REQUIRE(file.value()->is_regular());
+ (*file)->set_owning_mount(*mount);
+
THEN("reading from offset zero returns expected file prefix")
{
auto buffer = kstd::vector<std::byte>(6);
@@ -320,6 +322,8 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_fixture, "Ext2 in
REQUIRE(file);
REQUIRE(file.value()->is_regular());
+ (*file)->set_owning_mount(*mount);
+
THEN("writing to the inode updates backing device and the inode size")
{
auto write_buffer = kstd::vector<std::byte>{std::byte{'H'}, std::byte{'e'}, std::byte{'l'}, std::byte{'l'},