aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp10
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.hpp3
-rw-r--r--kernel/kernel/filesystem/vfs.cpp10
-rw-r--r--kernel/kernel/filesystem/vfs.hpp3
4 files changed, 14 insertions, 12 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp
index 640a01db..0e3f3164 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.cpp
@@ -47,13 +47,15 @@ namespace kernel::filesystem::devfs
[[gnu::used]]
constexpr auto registration = type_registration<type>{};
+ static_assert(sizeof(kernel::filesystem::filesystem) == sizeof(devfs::filesystem));
+
auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result>
{
- m_root_inode = kstd::make_shared<inode>();
- return mount_result{m_root_inode, nullptr};
+ auto root = kstd::make_shared<inode>();
+ return mount_result{root, root};
}
- auto filesystem::lookup(inode_ptr const & parent, std::string_view name, driver_data_ptr) const
+ auto filesystem::lookup(inode_ptr const & parent, std::string_view name, driver_data_ptr driver_data) const
-> kstd::result<inode_ptr>
{
if (!parent)
@@ -66,7 +68,7 @@ namespace kernel::filesystem::devfs
return kstd::failure(vfs_errc::not_a_directory);
}
- if (parent.get() != m_root_inode.get())
+ if (parent.get() != driver_data.get())
{
return kstd::failure(vfs_errc::invalid_inode);
}
diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp
index 147cb692..56744477 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.hpp
@@ -38,9 +38,6 @@ namespace kernel::filesystem::devfs
driver_data_ptr driver_data,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt)
-> kstd::result<inode_ptr> override;
-
- private:
- inode_ptr m_root_inode{};
};
} // namespace kernel::filesystem::devfs
diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp
index 512b7394..43da7130 100644
--- a/kernel/kernel/filesystem/vfs.cpp
+++ b/kernel/kernel/filesystem/vfs.cpp
@@ -85,7 +85,8 @@ namespace kernel::filesystem
kapi::system::panic("[FILESYSTEM] failed to mount device FS", device_fs_mount_result.error());
}
- graft_persistent_device_fs(device_fs, device_fs_mount_result->first);
+ auto [device_fs_root, device_fs_data] = *device_fs_mount_result;
+ graft_persistent_device_fs(device_fs, device_fs_root, device_fs_data);
// mount boot fs at / (shadows rootfs), re-graft devfs
auto [boot_device_dentry, boot_device_mount_context] =
@@ -103,7 +104,7 @@ namespace kernel::filesystem
kapi::system::panic("[OS:FS] failed to mount boot FS", mount.error());
}
m_mount_table.add_mount(*mount);
- graft_persistent_device_fs(device_fs, device_fs_mount_result->first);
+ graft_persistent_device_fs(device_fs, device_fs_root, device_fs_data);
}
}
}
@@ -312,7 +313,8 @@ namespace kernel::filesystem
}
auto vfs::graft_persistent_device_fs(kstd::shared_ptr<filesystem> const & device_fs,
- kstd::shared_ptr<inode> const & root_inode) -> void
+ kstd::shared_ptr<inode> const & root_inode, kstd::shared_ptr<void> driver_data)
+ -> void
{
auto [root_mount_point_dentry, root_mount] = resolve_path_internal("/").value_or(std::pair{nullptr, nullptr});
if (root_mount_point_dentry && root_mount)
@@ -324,7 +326,7 @@ namespace kernel::filesystem
root_mount_point_dentry->add_child(dev_dentry);
}
- auto new_mount = mount::attach(dev_dentry, device_fs, root_inode, nullptr, root_mount, nullptr);
+ auto new_mount = mount::attach(dev_dentry, device_fs, root_inode, driver_data, root_mount, nullptr);
m_mount_table.add_mount(new_mount);
}
}
diff --git a/kernel/kernel/filesystem/vfs.hpp b/kernel/kernel/filesystem/vfs.hpp
index 1975ac8a..a53ab532 100644
--- a/kernel/kernel/filesystem/vfs.hpp
+++ b/kernel/kernel/filesystem/vfs.hpp
@@ -112,7 +112,8 @@ namespace kernel::filesystem
[[nodiscard]] auto find_mount(std::string_view path) const -> kstd::result<mount_ptr>;
auto graft_persistent_device_fs(kstd::shared_ptr<filesystem> const & device_fs,
- kstd::shared_ptr<inode> const & root_inode) -> void;
+ kstd::shared_ptr<inode> const & root_inode, kstd::shared_ptr<void> driver_data)
+ -> void;
auto create_inode(std::string_view path, kapi::filesystem::file_type type,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<void>;