aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp14
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.hpp14
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.hpp19
-rw-r--r--kernel/kernel/filesystem/filesystem.hpp15
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.cpp15
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.hpp12
6 files changed, 40 insertions, 49 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp
index 60d174fe..cc42a5bd 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.cpp
@@ -29,7 +29,7 @@ namespace kernel::filesystem::devfs
return "devfs";
}
- [[nodiscard]] auto probe(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) const noexcept
+ [[nodiscard]] auto probe(filesystem::inode_ptr const & backing_inode) const noexcept
-> kstd::result<std::uint32_t> override
{
if (backing_inode)
@@ -39,7 +39,7 @@ namespace kernel::filesystem::devfs
return 0;
}
- [[nodiscard]] auto make_instance() const -> kstd::shared_ptr<kernel::filesystem::filesystem> override
+ [[nodiscard]] auto make_instance() const -> filesystem::filesystem_ptr override
{
return kstd::make_shared<filesystem>();
}
@@ -48,7 +48,7 @@ namespace kernel::filesystem::devfs
[[gnu::used]]
constexpr auto registration = type_registration<type>{};
- auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result>
+ auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result>
{
m_root_inode = kstd::make_shared<inode>();
@@ -64,8 +64,7 @@ namespace kernel::filesystem::devfs
return mount_result{m_root_inode, nullptr};
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::lookup(inode_ptr const & parent, std::string_view name) const -> kstd::result<inode_ptr>
{
if (!parent)
{
@@ -91,9 +90,8 @@ namespace kernel::filesystem::devfs
return kstd::failure(vfs_errc::no_such_file_or_directory);
}
- auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view,
- kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::create_inode(inode_ptr const &, std::string_view, kapi::filesystem::file_type,
+ std::optional<kapi::filesystem::device_number>) -> kstd::result<inode_ptr>
{
return kstd::failure(vfs_errc::read_only_file_system);
}
diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp
index 875f3957..f176a367 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.hpp
@@ -30,24 +30,22 @@ namespace kernel::filesystem::devfs
kstd::enable_shared_from_this<filesystem>,
device_number_registry_observer
{
- auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<mount_result> override;
+ auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override;
- [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const
+ -> kstd::result<inode_ptr> override;
//! @copydoc kernel::filesystem::filesystem::create_inode
//! @return Always returns an error, as creating new inodes is not supported in devfs.
- [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name,
- kapi::filesystem::file_type type,
+ [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<inode_ptr> override;
private:
auto on_device_numbered(device_number_registry::entry const & numbered) -> void override;
auto on_device_unnumbered(device_number_registry::entry const & numbered) -> void override;
- kstd::shared_ptr<kernel::filesystem::inode> m_root_inode{};
+ inode_ptr m_root_inode{};
kstd::flat_map<kstd::string, kstd::shared_ptr<device_inode>> m_inodes{};
};
} // namespace kernel::filesystem::devfs
diff --git a/kernel/kernel/filesystem/ext2/filesystem.hpp b/kernel/kernel/filesystem/ext2/filesystem.hpp
index fd304c00..1f7fe8af 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.hpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.hpp
@@ -75,16 +75,14 @@ namespace kernel::filesystem::ext2
//! The Second Extended Filesystem (ext2)
struct filesystem final : kernel::filesystem::filesystem
{
- auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<mount_result> override;
+ auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override;
- [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const
+ -> kstd::result<inode_ptr> override;
- [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name,
- kapi::filesystem::file_type type,
+ [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<inode_ptr> override;
//! Get the size of a block in the filesystem.
//!
@@ -158,7 +156,7 @@ namespace kernel::filesystem::ext2
//! Get the backing inode of the file system.
//!
//! @return A reference to the backing inode.
- [[nodiscard]] auto backing_inode() const -> kstd::shared_ptr<kernel::filesystem::inode> const &;
+ [[nodiscard]] auto backing_inode() const -> inode_ptr const &;
private:
struct indirect_level
@@ -172,8 +170,7 @@ namespace kernel::filesystem::ext2
auto allocate_inode() -> kstd::result<uint32_t>;
auto add_directory_entry(inode * ext2_parent, std::string_view name, uint32_t child_inode_number, uint16_t mode)
-> kstd::result<void>;
- auto init_directory(kstd::shared_ptr<kernel::filesystem::ext2::inode> const & new_inode,
- kernel::filesystem::ext2::inode * parent_inode) -> kstd::result<void>;
+ auto init_directory(kstd::shared_ptr<inode> const & new_inode, inode * parent_inode) -> kstd::result<void>;
auto write_directory_entry_to_buffer(uint8_t * block_buffer, kstd::bytes offset, uint32_t child_inode_number,
std::string_view name, uint8_t file_type) -> void;
@@ -197,7 +194,7 @@ namespace kernel::filesystem::ext2
superblock m_superblock{};
kstd::vector<block_group_descriptor> m_block_group_descriptors;
- kstd::shared_ptr<kernel::filesystem::inode> m_backing_inode;
+ inode_ptr m_backing_inode;
};
} // namespace kernel::filesystem::ext2
diff --git a/kernel/kernel/filesystem/filesystem.hpp b/kernel/kernel/filesystem/filesystem.hpp
index 83f9b54d..f1b39bd4 100644
--- a/kernel/kernel/filesystem/filesystem.hpp
+++ b/kernel/kernel/filesystem/filesystem.hpp
@@ -22,7 +22,10 @@ namespace kernel::filesystem
//! Filesystem implementations must derive from this class.
struct filesystem
{
- using mount_result = std::pair<kstd::shared_ptr<inode>, kstd::shared_ptr<void>>;
+ using filesystem_ptr = kstd::shared_ptr<filesystem>;
+ using driver_data_ptr = kstd::shared_ptr<void>;
+ using inode_ptr = kstd::shared_ptr<inode>;
+ using mount_result = std::pair<inode_ptr, driver_data_ptr>;
//! Virtual destructor enabling polymorphic destruction.
virtual ~filesystem() = default;
@@ -31,7 +34,7 @@ namespace kernel::filesystem
//!
//! @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>>;
+ auto static probe(inode_ptr const & backing_inode) -> kstd::result<filesystem_ptr>;
//! Initializes the filesystem with the given inode.
//!
@@ -40,7 +43,7 @@ namespace kernel::filesystem
//!
//! @param backing_inode The inode to use as the backing inode for the filesystem.
//! @return The root inode of the mounted filesystem on success, and error otherwise.
- virtual auto mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<mount_result> = 0;
+ virtual auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> = 0;
//! Find a child inode below the given parent inode with the specified name.
//!
@@ -50,8 +53,8 @@ namespace kernel::filesystem
//! @param parent The parent inode.
//! @param name The name of the child inode to look up.
//! @return A pointer to the requested child inode on success, an error otherwise.
- [[nodiscard]] virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) const
- -> kstd::result<kstd::shared_ptr<inode>> = 0;
+ [[nodiscard]] virtual auto lookup(inode_ptr const & parent, std::string_view name) const
+ -> kstd::result<inode_ptr> = 0;
//! Create a new inode with the given name below a given parent inode.
//!
@@ -60,7 +63,7 @@ namespace kernel::filesystem
//! @param type The file type of inode to be created.
//! @param raw_device The device number the new inode should represent, if any.
//! @return A pointer to the created inode on success, an error otherwise.
- [[nodiscard]] virtual auto create_inode(kstd::shared_ptr<inode> const & parent, std::string_view name,
+ [[nodiscard]] virtual auto create_inode(inode_ptr const & parent, std::string_view name,
kapi::filesystem::file_type type,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt)
-> kstd::result<kstd::shared_ptr<inode>> = 0;
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.cpp b/kernel/kernel/filesystem/rootfs/filesystem.cpp
index 298e8c94..147d967a 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.cpp
@@ -2,7 +2,6 @@
#include <kernel/filesystem/error.hpp>
#include <kernel/filesystem/filesystem.hpp>
-#include <kernel/filesystem/inode.hpp>
#include <kernel/filesystem/rootfs/inode.hpp>
#include <kernel/filesystem/type.hpp>
@@ -25,7 +24,7 @@ namespace kernel::filesystem::rootfs
return "rootfs";
}
- [[nodiscard]] auto probe(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) const noexcept
+ [[nodiscard]] auto probe(filesystem::inode_ptr const & backing_inode) const noexcept
-> kstd::result<std::uint32_t> override
{
if (backing_inode)
@@ -36,7 +35,7 @@ namespace kernel::filesystem::rootfs
return 0;
}
- [[nodiscard]] auto make_instance() const -> kstd::shared_ptr<kernel::filesystem::filesystem> override
+ [[nodiscard]] auto make_instance() const -> filesystem::filesystem_ptr override
{
return kstd::make_shared<filesystem>();
}
@@ -45,21 +44,19 @@ namespace kernel::filesystem::rootfs
[[gnu::used]]
constexpr auto registration = type_registration<type>{};
- auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result>
+ auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result>
{
auto root = kstd::make_shared<inode>();
return mount_result{root, nullptr};
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::lookup(inode_ptr const &, std::string_view) const -> kstd::result<inode_ptr>
{
return kstd::failure(vfs_errc::no_such_file_or_directory);
}
- auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view,
- kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>>
+ auto filesystem::create_inode(inode_ptr const &, std::string_view, kapi::filesystem::file_type,
+ std::optional<kapi::filesystem::device_number>) -> kstd::result<inode_ptr>
{
return kstd::failure(vfs_errc::read_only_file_system);
}
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.hpp b/kernel/kernel/filesystem/rootfs/filesystem.hpp
index 9f609106..5a72ff42 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.hpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.hpp
@@ -25,20 +25,18 @@ namespace kernel::filesystem::rootfs
struct filesystem : kernel::filesystem::filesystem
{
//! @copydoc kernel::filesystem::filesystem::mount
- auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode)
- -> kstd::result<mount_result> override;
+ auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override;
//! @copydoc kernel::filesystem::filesystem::lookup.
//! @return Always returns an error, as rootfs is always empty.
- [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const
+ -> kstd::result<inode_ptr> override;
//! @copydoc kernel::filesystem::filesystem::create_inode.
//! @return Always returns an error, as creating new inodes is not supported in rootfs.
- [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name,
- kapi::filesystem::file_type type,
+ [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type,
std::optional<kapi::filesystem::device_number> raw_device = std::nullopt)
- -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override;
+ -> kstd::result<inode_ptr> override;
};
} // namespace kernel::filesystem::rootfs