aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/filesystem.cpp13
-rw-r--r--kernel/kernel/filesystem/filesystem.hpp12
-rw-r--r--kernel/kernel/filesystem/mount.cpp36
-rw-r--r--kernel/kernel/filesystem/mount.hpp33
-rw-r--r--kernel/kernel/filesystem/mount.tests.cpp59
-rw-r--r--kernel/kernel/filesystem/mount_table.tests.cpp40
-rw-r--r--kernel/kernel/filesystem/vfs.cpp38
-rw-r--r--kernel/kernel/filesystem/vfs.hpp4
8 files changed, 142 insertions, 93 deletions
diff --git a/kernel/kernel/filesystem/filesystem.cpp b/kernel/kernel/filesystem/filesystem.cpp
index 1d222888..362c4d1e 100644
--- a/kernel/kernel/filesystem/filesystem.cpp
+++ b/kernel/kernel/filesystem/filesystem.cpp
@@ -8,13 +8,10 @@
#include <kstd/result.hpp>
#include <kstd/system_error.hpp>
-#include <utility>
-
namespace kernel::filesystem
{
- auto filesystem::probe_and_mount(kstd::shared_ptr<inode> const & backing_inode)
- -> kstd::result<std::pair<kstd::shared_ptr<filesystem>, kstd::shared_ptr<inode>>>
+ auto filesystem::probe(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<filesystem>>
{
for (auto & type : type_registry::get().all())
{
@@ -23,14 +20,10 @@ namespace kernel::filesystem
continue;
}
- auto fs = type->make_instance();
- auto root = fs->mount(backing_inode);
- if (!root)
+ if (auto fs = type->make_instance())
{
- continue;
+ return fs;
}
-
- return std::pair{fs, *root};
}
return kstd::failure(vfs_errc::unsupported_filesystem);
diff --git a/kernel/kernel/filesystem/filesystem.hpp b/kernel/kernel/filesystem/filesystem.hpp
index f18422b2..dccc9434 100644
--- a/kernel/kernel/filesystem/filesystem.hpp
+++ b/kernel/kernel/filesystem/filesystem.hpp
@@ -12,7 +12,6 @@
#include <optional>
#include <string_view>
-#include <utility>
namespace kernel::filesystem
{
@@ -25,14 +24,11 @@ namespace kernel::filesystem
//! Virtual destructor enabling polymorphic destruction.
virtual ~filesystem() = default;
- //! Probes the given inode to determine if it contains a recognizable filesystem, and if so, mount it.
+ //! Probes the given inode to determine if it contains a recognizable filesystem.
//!
- //! @warning This function panics if @p backing_inode is null.
- //!
- //! @param backing_inode The inode to probe and mount.
- //! @return A pointer to the mounted filesystem and the root of it on success, an error otherwise.
- auto static probe_and_mount(kstd::shared_ptr<inode> const & backing_inode)
- -> kstd::result<std::pair<kstd::shared_ptr<filesystem>, kstd::shared_ptr<inode>>>;
+ //! @param backing_inode The inode to probe and mount, if any.
+ //! @return A pointer to the instantiated filesystem and the root of it on success, an error otherwise.
+ auto static probe(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<filesystem>>;
//! Initializes the filesystem with the given inode.
//!
diff --git a/kernel/kernel/filesystem/mount.cpp b/kernel/kernel/filesystem/mount.cpp
index 009ab230..b1335735 100644
--- a/kernel/kernel/filesystem/mount.cpp
+++ b/kernel/kernel/filesystem/mount.cpp
@@ -6,6 +6,7 @@
#include <kapi/system.hpp>
#include <kstd/memory.hpp>
+#include <kstd/result.hpp>
#include <kstd/string.hpp>
#include <cstddef>
@@ -29,6 +30,41 @@ namespace kernel::filesystem
}
}
+ auto mount::attach(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<filesystem> const & fs,
+ kstd::shared_ptr<inode> const & root_inode, kstd::shared_ptr<mount> const & parent_mount,
+ kstd::shared_ptr<mount> const & source_mount) -> kstd::shared_ptr<mount>
+ {
+ auto root_dentry = mount_dentry
+ ? kstd::make_shared<dentry>(mount_dentry->parent(), root_inode, mount_dentry->name())
+ : kstd::make_shared<dentry>(nullptr, root_inode, "/");
+
+ auto instance = kstd::shared_ptr<mount>{
+ new mount{mount_dentry, root_dentry, fs, parent_mount, source_mount}
+ };
+
+ root_inode->set_owning_mount(instance);
+
+ return instance;
+ }
+
+ auto mount::create(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<filesystem> const & fs,
+ kstd::shared_ptr<mount> const & parent_mount, kstd::shared_ptr<mount> const & source_mount,
+ kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<mount>>
+ {
+ if (!fs)
+ {
+ kapi::system::panic("[OS:FS] Tried to mount a null filesystem!");
+ }
+
+ auto root_inode = fs->mount(backing_inode);
+ if (!root_inode)
+ {
+ return kstd::failure(root_inode.error());
+ }
+
+ return attach(mount_dentry, fs, *root_inode, parent_mount, source_mount);
+ }
+
auto mount::mount_dentry() const -> kstd::shared_ptr<dentry> const &
{
return m_mount_dentry;
diff --git a/kernel/kernel/filesystem/mount.hpp b/kernel/kernel/filesystem/mount.hpp
index b906def5..c07de071 100644
--- a/kernel/kernel/filesystem/mount.hpp
+++ b/kernel/kernel/filesystem/mount.hpp
@@ -5,6 +5,7 @@
#include <kernel/filesystem/filesystem.hpp>
#include <kstd/memory.hpp>
+#include <kstd/result.hpp>
#include <kstd/string.hpp>
#include <atomic>
@@ -12,19 +13,32 @@
namespace kernel::filesystem
{
+ struct inode;
+
//! A mounted filesystem
struct mount
{
+ //! Attach a mounted filesystem with a known root inode
+ //!
+ //! @param mount_dentry The directory entry where the filesystem is mounted.
+ //! @param fs The filesystem instance being mounted.
+ //! @param root_inode The backing inode for the filesystem, must not be null.
+ //! @param parent_mount The parent mount which contains the mount_dentry.
+ //! @param source_mount The mount that the filesystem originates from.
+ auto static attach(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<filesystem> const & fs,
+ kstd::shared_ptr<inode> const & root_inode, kstd::shared_ptr<mount> const & parent_mount,
+ kstd::shared_ptr<mount> const & source_mount) -> kstd::shared_ptr<mount>;
+
//! Create a new mount with the given parameters.
//!
//! @param mount_dentry The directory entry where the filesystem is mounted.
- //! @param root_dentry The root directory entry of the mounted filesystem.
//! @param fs The filesystem instance being mounted.
//! @param parent_mount The parent mount which contains the mount_dentry.
//! @param source_mount The mount that the filesystem originates from.
- mount(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<dentry> const & root_dentry,
- kstd::shared_ptr<filesystem> const & fs, kstd::shared_ptr<mount> const & parent_mount,
- kstd::shared_ptr<mount> const & source_mount);
+ //! @param backing_inode The backing inode for the filesystem, if any.
+ auto static create(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<filesystem> const & fs,
+ kstd::shared_ptr<mount> const & parent_mount, kstd::shared_ptr<mount> const & source_mount,
+ kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<mount>>;
//! Get the directory entry where the filesystem is mounted.
[[nodiscard]] auto mount_dentry() const -> kstd::shared_ptr<dentry> const &;
@@ -63,6 +77,17 @@ namespace kernel::filesystem
[[nodiscard]] auto ref_count() const -> size_t;
private:
+ //! Create a new mount with the given parameters.
+ //!
+ //! @param mount_dentry The directory entry where the filesystem is mounted.
+ //! @param root_dentry The root directory entry of the mounted filesystem.
+ //! @param fs The filesystem instance being mounted.
+ //! @param parent_mount The parent mount which contains the mount_dentry.
+ //! @param source_mount The mount that the filesystem originates from.
+ mount(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<dentry> const & root_dentry,
+ kstd::shared_ptr<filesystem> const & fs, kstd::shared_ptr<mount> const & parent_mount,
+ kstd::shared_ptr<mount> const & source_mount);
+
kstd::shared_ptr<dentry> m_mount_dentry{};
kstd::shared_ptr<dentry> m_root_dentry{};
kstd::shared_ptr<filesystem> m_filesystem{};
diff --git a/kernel/kernel/filesystem/mount.tests.cpp b/kernel/kernel/filesystem/mount.tests.cpp
index 800a0cfc..3337a172 100644
--- a/kernel/kernel/filesystem/mount.tests.cpp
+++ b/kernel/kernel/filesystem/mount.tests.cpp
@@ -15,29 +15,29 @@
SCENARIO("Mount construction", "[filesystem][mount]")
{
- GIVEN("a filesystem and a root dentry")
+ GIVEN("a filesystem and a root inode")
{
auto fs = kstd::make_shared<kernel::tests::filesystem::filesystem>();
auto root_inode = kstd::make_shared<kernel::tests::filesystem::inode>();
- auto root_dentry = kstd::make_shared<kernel::filesystem::dentry>(nullptr, root_inode, "/");
- WHEN("constructing a mount with the filesystem and root dentry")
+ WHEN("attaching a mount with no mount point")
{
- auto mount = kernel::filesystem::mount{root_dentry, root_dentry, fs, nullptr, nullptr};
+ auto mount = kernel::filesystem::mount::attach(nullptr, fs, root_inode, nullptr, nullptr);
THEN("the mount has the correct filesystem, root dentry, mount dentry, and mount path")
{
- REQUIRE(mount.get_filesystem() == fs);
- REQUIRE(mount.root_dentry() == root_dentry);
- REQUIRE(mount.mount_dentry() == root_dentry);
- REQUIRE(mount.mount_path() == "/");
- REQUIRE(mount.is_ready_to_unmount());
+ REQUIRE(mount->get_filesystem() == fs);
+ REQUIRE(mount->root_dentry()->get_inode() == root_inode);
+ REQUIRE(mount->root_dentry()->name() == "/");
+ REQUIRE(mount->mount_dentry() == nullptr);
+ REQUIRE(mount->mount_path() == "/");
+ REQUIRE(mount->is_ready_to_unmount());
}
THEN("the mount has no parent mount and no source mount")
{
- REQUIRE(mount.parent_mount() == nullptr);
- REQUIRE(mount.source_mount() == nullptr);
+ REQUIRE(mount->parent_mount() == nullptr);
+ REQUIRE(mount->source_mount() == nullptr);
}
}
@@ -45,7 +45,7 @@ SCENARIO("Mount construction", "[filesystem][mount]")
{
THEN("the constructor panics")
{
- REQUIRE_THROWS_AS((kernel::filesystem::mount{root_dentry, root_dentry, nullptr, nullptr, nullptr}),
+ REQUIRE_THROWS_AS((kernel::filesystem::mount::create(nullptr, nullptr, nullptr, nullptr, nullptr)),
kernel::tests::cpu::halt);
}
}
@@ -63,32 +63,33 @@ SCENARIO("Mount reference counting", "[filesystem][mount]")
THEN("reference count can be incremented and decremented, the mount is ready to unmount when the reference "
"count == 0")
{
- auto mount = kernel::filesystem::mount{root_dentry, root_dentry, fs, nullptr, nullptr};
+ auto mount = kernel::filesystem::mount::create(root_dentry, fs, nullptr, nullptr, nullptr);
+ REQUIRE(mount);
- mount.increment_ref_count();
- REQUIRE(mount.ref_count() == 1);
- REQUIRE_FALSE(mount.is_ready_to_unmount());
+ (*mount)->increment_ref_count();
+ REQUIRE((*mount)->ref_count() == 1);
+ REQUIRE_FALSE((*mount)->is_ready_to_unmount());
- mount.increment_ref_count();
- REQUIRE(mount.ref_count() == 2);
- REQUIRE_FALSE(mount.is_ready_to_unmount());
+ (*mount)->increment_ref_count();
+ REQUIRE((*mount)->ref_count() == 2);
+ REQUIRE_FALSE((*mount)->is_ready_to_unmount());
- mount.decrement_ref_count();
- REQUIRE(mount.ref_count() == 1);
- REQUIRE_FALSE(mount.is_ready_to_unmount());
+ (*mount)->decrement_ref_count();
+ REQUIRE((*mount)->ref_count() == 1);
+ REQUIRE_FALSE((*mount)->is_ready_to_unmount());
- mount.decrement_ref_count();
- REQUIRE(mount.ref_count() == 0);
- REQUIRE(mount.is_ready_to_unmount());
+ (*mount)->decrement_ref_count();
+ REQUIRE((*mount)->ref_count() == 0);
+ REQUIRE((*mount)->is_ready_to_unmount());
}
THEN("decrementing reference count when it is already zero does not decrement it below zero")
{
- auto mount = kernel::filesystem::mount{root_dentry, root_dentry, fs, nullptr, nullptr};
+ auto mount = kernel::filesystem::mount::create(root_dentry, fs, nullptr, nullptr, nullptr);
- REQUIRE_THROWS_AS(mount.decrement_ref_count(), std::runtime_error);
- REQUIRE(mount.ref_count() == 0);
- REQUIRE(mount.is_ready_to_unmount());
+ REQUIRE_THROWS_AS((*mount)->decrement_ref_count(), std::runtime_error);
+ REQUIRE((*mount)->ref_count() == 0);
+ REQUIRE((*mount)->is_ready_to_unmount());
}
}
} \ No newline at end of file
diff --git a/kernel/kernel/filesystem/mount_table.tests.cpp b/kernel/kernel/filesystem/mount_table.tests.cpp
index 39ad6b01..bed6cd9d 100644
--- a/kernel/kernel/filesystem/mount_table.tests.cpp
+++ b/kernel/kernel/filesystem/mount_table.tests.cpp
@@ -38,17 +38,17 @@ SCENARIO("Adding, finding and removing mounts in the mount table", "[filesystem]
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
- auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr);
+ auto mount1 = kernel::filesystem::mount::create(mount_dentry1, fs1, nullptr, nullptr, nullptr);
auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>();
auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/mnt");
- auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, nullptr, nullptr);
+ auto mount2 = kernel::filesystem::mount::create(mount_dentry2, fs2, nullptr, nullptr, nullptr);
- table.add_mount(mount1);
- table.add_mount(mount2);
+ table.add_mount(*mount1);
+ table.add_mount(*mount2);
THEN("dentry flags are set correctly for mounted dentries")
{
@@ -89,17 +89,17 @@ SCENARIO("Adding, finding and removing mounts in the mount table", "[filesystem]
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
- auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr);
+ auto mount1 = kernel::filesystem::mount::create(mount_dentry1, fs1, nullptr, nullptr, nullptr);
auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>();
auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
- auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, nullptr, nullptr);
+ auto mount2 = kernel::filesystem::mount::create(mount_dentry2, fs2, nullptr, nullptr, nullptr);
- table.add_mount(mount1);
- table.add_mount(mount2);
+ table.add_mount(*mount1);
+ table.add_mount(*mount2);
THEN("finding mounts by exact valid path returns the correct mount")
{
@@ -122,25 +122,25 @@ SCENARIO("Adding, finding and removing mounts in the mount table", "[filesystem]
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry1 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
- auto mount1 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry1, root_dentry1, fs1, nullptr, nullptr);
+ auto mount1 = kernel::filesystem::mount::create(mount_dentry1, fs1, nullptr, nullptr, nullptr);
auto fs2 = kstd::make_shared<kernel::tests::filesystem::filesystem>();
auto root_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry2 = kstd::make_shared<kernel::filesystem::dentry>(
mount_dentry1, kstd::make_shared<kernel::tests::filesystem::inode>(), "mnt");
- auto mount2 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry2, root_dentry2, fs2, mount1, nullptr);
+ auto mount2 = kernel::filesystem::mount::create(mount_dentry2, fs2, *mount1, nullptr, nullptr);
auto fs3 = kstd::make_shared<kernel::tests::filesystem::filesystem>();
auto root_dentry3 = kstd::make_shared<kernel::filesystem::dentry>(
nullptr, kstd::make_shared<kernel::tests::filesystem::inode>(), "/");
auto mount_dentry3 = kstd::make_shared<kernel::filesystem::dentry>(
mount_dentry2, kstd::make_shared<kernel::tests::filesystem::inode>(), "submnt");
- auto mount3 = kstd::make_shared<kernel::filesystem::mount>(mount_dentry3, root_dentry3, fs3, mount2, nullptr);
+ auto mount3 = kernel::filesystem::mount::create(mount_dentry3, fs3, *mount2, nullptr, nullptr);
- table.add_mount(mount1);
- table.add_mount(mount2);
- table.add_mount(mount3);
+ table.add_mount(*mount1);
+ table.add_mount(*mount2);
+ table.add_mount(*mount3);
THEN("removing a mount with child mounts returns has_child_mounts")
{
@@ -166,19 +166,19 @@ SCENARIO("Mount reference counting", "[filesystem][mount_table]")
auto root_inode = kstd::make_shared<kernel::tests::filesystem::inode>();
auto root_dentry = kstd::make_shared<kernel::filesystem::dentry>(nullptr, root_inode, "/");
- auto source_mount = kstd::make_shared<kernel::filesystem::mount>(root_dentry, root_dentry, fs, nullptr, nullptr);
- auto mount = kstd::make_shared<kernel::filesystem::mount>(root_dentry, root_dentry, fs, nullptr, source_mount);
+ auto source_mount = kernel::filesystem::mount::create(root_dentry, fs, nullptr, nullptr, nullptr);
+ auto mount = kernel::filesystem::mount::create(root_dentry, fs, nullptr, *source_mount, nullptr);
THEN("reference count of source mount is incremented when a mount is added to the mount table and decremented when "
"the mount is removed")
{
- REQUIRE(source_mount->ref_count() == 0);
+ REQUIRE((*source_mount)->ref_count() == 0);
- table.add_mount(mount);
- REQUIRE(source_mount->ref_count() == 1);
+ table.add_mount(*mount);
+ REQUIRE((*source_mount)->ref_count() == 1);
REQUIRE(table.remove_mount("/") == kernel::filesystem::mount_table::operation_result::removed);
- REQUIRE(source_mount->ref_count() == 0);
+ REQUIRE((*source_mount)->ref_count() == 0);
}
}
}
diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp
index 57ae6c70..21ac3752 100644
--- a/kernel/kernel/filesystem/vfs.cpp
+++ b/kernel/kernel/filesystem/vfs.cpp
@@ -66,8 +66,7 @@ namespace kernel::filesystem
kapi::system::panic("[FILESYSTEM] failed to mount root FS", root_fs_root_inode.error());
}
- auto root_fs_root_dentry = kstd::make_shared<dentry>(nullptr, *root_fs_root_inode, "/");
- auto root_mount = kstd::make_shared<struct mount>(nullptr, root_fs_root_dentry, root_fs, nullptr, nullptr);
+ auto root_mount = mount::attach(nullptr, root_fs, *root_fs_root_inode, nullptr, nullptr);
m_mount_table.add_mount(root_mount);
// mount devfs at /dev (inside rootfs, temporary, will be shadowed)
@@ -90,13 +89,17 @@ namespace kernel::filesystem
resolve_path_internal("/dev/ram0").value_or(std::pair{nullptr, nullptr});
if (boot_device_dentry && boot_device_mount_context)
{
- if (auto result = kernel::filesystem::filesystem::probe_and_mount(boot_device_dentry->get_inode()))
+ if (auto result = kernel::filesystem::filesystem::probe(boot_device_dentry->get_inode()))
{
- auto [boot_root_fs, boot_root_fs_root_inode] = *result;
-
if (auto root_dentry = resolve_path("/"))
{
- do_mount_internal(*root_dentry, root_mount, boot_root_fs, boot_root_fs_root_inode, boot_device_mount_context);
+ auto mount = mount::create(*root_dentry, *result, root_mount, boot_device_mount_context,
+ boot_device_dentry->get_inode());
+ if (!mount)
+ {
+ 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_root_inode);
}
}
@@ -181,14 +184,20 @@ namespace kernel::filesystem
}
auto [source_dentry, source_mount_context] = *resolved_source;
- auto fs = kernel::filesystem::filesystem::probe_and_mount(source_dentry->get_inode());
+ auto fs = kernel::filesystem::filesystem::probe(source_dentry->get_inode());
if (!fs)
{
return kstd::failure(fs.error());
}
- auto [filesystem, root_inode] = *fs;
- do_mount_internal(mount_point_dentry, mount_context, filesystem, root_inode, source_mount_context);
+ auto mount =
+ mount::create(mount_point_dentry, *fs, mount_context, source_mount_context, source_dentry->get_inode());
+ if (!mount)
+ {
+ return kstd::failure(mount.error());
+ }
+ m_mount_table.add_mount(*mount);
+
return kstd::success();
}
@@ -299,14 +308,6 @@ namespace kernel::filesystem
return kstd::failure(vfs_errc::no_such_file_or_directory);
}
- auto vfs::do_mount_internal(dentry_ptr const & mount_point_dentry, mount_ptr const & parent_mount, fs_ptr const & fs,
- kstd::shared_ptr<inode> const & root_inode, mount_ptr const & source_mount) -> void
- {
- auto new_fs_root = kstd::make_shared<dentry>(mount_point_dentry->parent(), root_inode, mount_point_dentry->name());
- auto new_mount = kstd::make_shared<struct mount>(mount_point_dentry, new_fs_root, fs, parent_mount, source_mount);
- m_mount_table.add_mount(new_mount);
- }
-
auto vfs::graft_persistent_device_fs(kstd::shared_ptr<filesystem> const & device_fs,
kstd::shared_ptr<inode> const & root_inode) -> void
{
@@ -320,7 +321,8 @@ namespace kernel::filesystem
root_mount_point_dentry->add_child(dev_dentry);
}
- do_mount_internal(dev_dentry, root_mount, device_fs, root_inode);
+ auto new_mount = mount::attach(dev_dentry, device_fs, root_inode, 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 0f29608c..1975ac8a 100644
--- a/kernel/kernel/filesystem/vfs.hpp
+++ b/kernel/kernel/filesystem/vfs.hpp
@@ -111,10 +111,6 @@ namespace kernel::filesystem
[[nodiscard]] auto find_mount(std::string_view path) const -> kstd::result<mount_ptr>;
- auto do_mount_internal(dentry_ptr const & mount_point_dentry, mount_ptr const & parent_mount, fs_ptr const & fs,
- kstd::shared_ptr<inode> const & root_inode, mount_ptr const & source_mount = nullptr)
- -> void;
-
auto graft_persistent_device_fs(kstd::shared_ptr<filesystem> const & device_fs,
kstd::shared_ptr<inode> const & root_inode) -> void;