aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/kernel/filesystem/rootfs/filesystem.hpp2
-rw-r--r--kernel/include/kernel/filesystem/rootfs/inode.hpp30
-rw-r--r--kernel/src/filesystem/rootfs/filesystem.cpp9
-rw-r--r--kernel/src/filesystem/rootfs/filesystem.tests.cpp7
-rw-r--r--kernel/src/filesystem/rootfs/inode.cpp19
-rw-r--r--kernel/src/filesystem/rootfs/inode.tests.cpp47
-rw-r--r--kernel/src/filesystem/vfs.cpp10
7 files changed, 5 insertions, 119 deletions
diff --git a/kernel/include/kernel/filesystem/rootfs/filesystem.hpp b/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
index cc778d8..f99440b 100644
--- a/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
@@ -31,7 +31,7 @@ namespace kernel::filesystem::rootfs
@brief Looks up an inode by @p name within a @p parent directory.
@param parent The parent directory inode.
@param name The name of the inode to look up.
- @return A pointer to the found inode, or a null pointer if not found.
+ @return Always returns nullptr.
*/
auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
-> kstd::shared_ptr<kernel::filesystem::inode> override;
diff --git a/kernel/include/kernel/filesystem/rootfs/inode.hpp b/kernel/include/kernel/filesystem/rootfs/inode.hpp
index 58035ea..442dc8a 100644
--- a/kernel/include/kernel/filesystem/rootfs/inode.hpp
+++ b/kernel/include/kernel/filesystem/rootfs/inode.hpp
@@ -8,16 +8,10 @@
#include <kstd/vector>
#include <cstddef>
-#include <string_view>
-#include <utility>
-
namespace kernel::filesystem::rootfs
{
/**
- @brief Represents an inode in the rootfs filesystem. This inode represents a directory in the root filesystem and
- maintains a list of child inodes corresponding to files and subdirectories within the root directory. The rootfs inode
- provides methods for reading and writing data (which are no-ops for the root directory), as well as adding and looking
- up child inodes by name.
+ @brief Represents an inode in the rootfs filesystem.
*/
struct inode : kernel::filesystem::inode
{
@@ -38,28 +32,6 @@ namespace kernel::filesystem::rootfs
@return Number of bytes written (always 0 because writes are not supported for this inode).
*/
auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
-
- /**
- @brief Adds a child inode to the rootfs directory inode with the specified @p name.
- @param name The name of the child inode.
- */
- auto add_child(std::string_view name) -> void;
-
- /**
- @brief Looks up a child inode by @p name.
- @param name The name of the child inode to look up.
- @return A pointer to the found child inode, or a null pointer if not found.
- */
- auto lookup_child(std::string_view name) -> kstd::shared_ptr<inode>;
-
- /**
- @brief Check if this inode represents a directory.
- @return returns true, since this inode represents the root directory in the rootfs filesystem.
- */
- [[nodiscard]] auto is_directory() const -> bool override;
-
- private:
- kstd::vector<std::pair<kstd::string, kstd::shared_ptr<inode>>> m_children;
};
} // namespace kernel::filesystem::rootfs
diff --git a/kernel/src/filesystem/rootfs/filesystem.cpp b/kernel/src/filesystem/rootfs/filesystem.cpp
index 6187c3c..d49e237 100644
--- a/kernel/src/filesystem/rootfs/filesystem.cpp
+++ b/kernel/src/filesystem/rootfs/filesystem.cpp
@@ -11,18 +11,13 @@ namespace kernel::filesystem::rootfs
{
auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> operation_result
{
- auto rfs_inode = kstd::make_shared<inode>();
- rfs_inode->add_child("dev");
- m_root_inode = rfs_inode;
-
+ m_root_inode = kstd::make_shared<inode>();
return operation_result::success;
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view)
-> kstd::shared_ptr<kernel::filesystem::inode>
{
- if (auto * rfs_inode = static_cast<inode *>(parent.get()))
- return rfs_inode->lookup_child(name);
return nullptr;
}
} // namespace kernel::filesystem::rootfs
diff --git a/kernel/src/filesystem/rootfs/filesystem.tests.cpp b/kernel/src/filesystem/rootfs/filesystem.tests.cpp
index 81ac9e4..ae320e9 100644
--- a/kernel/src/filesystem/rootfs/filesystem.tests.cpp
+++ b/kernel/src/filesystem/rootfs/filesystem.tests.cpp
@@ -21,13 +21,6 @@ SCENARIO("Rootfs filesystem mount and lookup", "[filesystem][rootfs][filesystem]
REQUIRE(fs.root_inode() != nullptr);
}
- THEN("looking up the 'dev' directory returns a valid inode")
- {
- auto dev_inode = fs.lookup(fs.root_inode(), "dev");
- REQUIRE(dev_inode != nullptr);
- REQUIRE(dev_inode->is_directory());
- }
-
THEN("looking up a non-existent directory returns null")
{
auto non_existent_inode_1 = fs.lookup(fs.root_inode(), "");
diff --git a/kernel/src/filesystem/rootfs/inode.cpp b/kernel/src/filesystem/rootfs/inode.cpp
index d099676..2ad4815 100644
--- a/kernel/src/filesystem/rootfs/inode.cpp
+++ b/kernel/src/filesystem/rootfs/inode.cpp
@@ -5,10 +5,7 @@
#include <kstd/memory>
#include <kstd/string>
-#include <algorithm>
#include <cstddef>
-#include <string_view>
-#include <utility>
namespace kernel::filesystem::rootfs
{
@@ -21,20 +18,4 @@ namespace kernel::filesystem::rootfs
{
return 0;
}
-
- auto inode::add_child(std::string_view name) -> void
- {
- m_children.push_back(std::make_pair(kstd::string{name}, kstd::make_shared<inode>()));
- }
-
- auto inode::lookup_child(std::string_view name) -> kstd::shared_ptr<inode>
- {
- auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; });
- return (it != m_children.end()) ? it->second : nullptr;
- }
-
- auto inode::is_directory() const -> bool
- {
- return true;
- }
} // namespace kernel::filesystem::rootfs
diff --git a/kernel/src/filesystem/rootfs/inode.tests.cpp b/kernel/src/filesystem/rootfs/inode.tests.cpp
index 7cc217f..f4b634f 100644
--- a/kernel/src/filesystem/rootfs/inode.tests.cpp
+++ b/kernel/src/filesystem/rootfs/inode.tests.cpp
@@ -6,53 +6,6 @@
#include <catch2/catch_test_macros.hpp>
-SCENARIO("Rootfs inode creation", "[filesystem][rootfs][inode]")
-{
- GIVEN("a rootfs inode")
- {
- auto inode = kernel::filesystem::rootfs::inode{};
-
- THEN("the inode has the correct kind")
- {
- REQUIRE(inode.is_directory());
- REQUIRE_FALSE(inode.is_device());
- REQUIRE_FALSE(inode.is_regular());
- REQUIRE_FALSE(inode.is_symbolic_link());
- }
-
- THEN("the inode has no children")
- {
- REQUIRE(inode.lookup_child("child") == nullptr);
- }
- }
-}
-
-SCENARIO("Rootfs inode child management", "[filesystem][rootfs][inode]")
-{
- GIVEN("a rootfs inode")
- {
- auto inode = kernel::filesystem::rootfs::inode{};
-
- WHEN("adding a child inode")
- {
- inode.add_child("child");
- inode.add_child("another child");
-
- THEN("the child can be looked up by name")
- {
- auto child_inode = inode.lookup_child("child");
- REQUIRE(child_inode != nullptr);
- REQUIRE(child_inode->is_directory());
- }
-
- THEN("looking up a non-existent child returns null")
- {
- REQUIRE(inode.lookup_child("nonexistent") == nullptr);
- }
- }
- }
-}
-
SCENARIO("Rootfs inode read/write", "[filesystem][rootfs][inode]")
{
GIVEN("a rootfs inode")
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 3b3d6ff..67671e2 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -53,15 +53,7 @@ namespace kernel::filesystem
// mount devfs at /dev (inside rootfs, temporary, will be shadowed)
auto device_fs = kstd::make_shared<devfs::filesystem>();
device_fs->mount(nullptr);
-
- if (auto dev_mount_point_dentry = resolve_path("/dev"))
- {
- do_mount_internal(dev_mount_point_dentry, root_mount, device_fs);
- }
- else
- {
- kapi::system::panic("[FILESYSTEM] failed to resolve /dev for initial devfs mount.");
- }
+ graft_persistent_device_fs(device_fs);
// mount boot fs at / (shadows rootfs), re-graft devfs
if (auto boot_device_dentry = resolve_path("/dev/ram0"))