From f9877bcf8faf8a216bbe95d82c546581c093b3cb Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sat, 22 Aug 2026 19:44:19 +0200 Subject: kernel/fs: ext2: let VFS associate the owning mount --- kernel/kernel/filesystem/ext2/filesystem.cpp | 11 ++++------- kernel/kernel/filesystem/ext2/filesystem.hpp | 3 +-- kernel/kernel/filesystem/ext2/inode.tests.cpp | 4 ++++ 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'kernel') 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 const & mount) const - -> kstd::result> + auto filesystem::read_inode(uint32_t inode_number) const -> kstd::result> { if (auto inode_offset = calculate_inode_offset(inode_number)) { @@ -409,9 +408,7 @@ namespace kernel::filesystem::ext2 } else { - auto inode = kstd::make_shared(inode_number, new_inode_data); - inode->set_owning_mount(mount); - return inode; + return kstd::make_shared(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; - [[nodiscard]] auto read_inode(uint32_t inode_number, kstd::shared_ptr const & mount) const - -> kstd::result>; + [[nodiscard]] auto read_inode(uint32_t inode_number) const -> kstd::result>; [[nodiscard]] auto read_block_number_at_index(uint32_t block_number, size_t index) const -> kstd::result; [[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(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{'H'}, std::byte{'e'}, std::byte{'l'}, std::byte{'l'}, -- cgit v1.2.3