diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-08-22 19:44:19 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-08-26 11:16:16 +0200 |
| commit | f9877bcf8faf8a216bbe95d82c546581c093b3cb (patch) | |
| tree | 6016a48a0b598465bae2fff2cec9a293e518e79c /kernel | |
| parent | c1678823d808932c065942e9aa0f7d7fe0246b8a (diff) | |
| download | kernel-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.cpp | 11 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.hpp | 3 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.tests.cpp | 4 |
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'}, |
