From 98b6633ea8e961f8668259dbd4970330494408d5 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Thu, 19 Mar 2026 21:32:38 +0100 Subject: prepare files for new inode structure --- kernel/include/kernel/filesystem/device_inode.hpp | 14 ++++++++++++++ kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 kernel/include/kernel/filesystem/device_inode.hpp create mode 100644 kernel/include/kernel/filesystem/ext2/ext2_inode.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp new file mode 100644 index 0000000..a99e5d1 --- /dev/null +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -0,0 +1,14 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP + +#include "kernel/filesystem/inode.hpp" + +namespace filesystem +{ + struct device_inode : inode + { + // TODO BA-FS26 + }; +} // namespace filesystem + +#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp new file mode 100644 index 0000000..7cd6f8f --- /dev/null +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -0,0 +1,14 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP + +#include "kernel/filesystem/inode.hpp" + +namespace filesystem::ext2 +{ + struct ext2_inode : inode + { + // TODO BA-FS26 + }; +} // namespace filesystem::ext2 + +#endif \ No newline at end of file -- cgit v1.2.3 From 8d3471f1d160d301f9d990455bd8c63450df1cf3 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Thu, 19 Mar 2026 21:59:31 +0100 Subject: remove inode metadata --- kernel/include/kernel/filesystem/device_inode.hpp | 15 +++++++++++++- kernel/include/kernel/filesystem/filesystem.hpp | 4 ++-- kernel/include/kernel/filesystem/inode.hpp | 23 +++++++++------------ .../include/kernel/filesystem/inode_metadata.hpp | 24 ---------------------- 4 files changed, 26 insertions(+), 40 deletions(-) delete mode 100644 kernel/include/kernel/filesystem/inode_metadata.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index a99e5d1..0287875 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -1,13 +1,26 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP +#include "kernel/devices/device.hpp" #include "kernel/filesystem/inode.hpp" +#include + +#include + namespace filesystem { struct device_inode : inode { - // TODO BA-FS26 + explicit device_inode(kstd::shared_ptr const & device); + + [[nodiscard]] auto backing_device() const -> kstd::shared_ptr const &; + + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + + private: + kstd::shared_ptr m_device{}; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp index 23924c4..035f49d 100644 --- a/kernel/include/kernel/filesystem/filesystem.hpp +++ b/kernel/include/kernel/filesystem/filesystem.hpp @@ -17,10 +17,10 @@ namespace filesystem virtual auto mount(kstd::shared_ptr const & device) -> int = 0; virtual auto lookup(inode const & parent, std::string_view name) -> inode * = 0; - [[nodiscard]] auto root_inode() const -> inode const &; + [[nodiscard]] auto root_inode() const -> kstd::shared_ptr const &; protected: - inode m_root_inode{}; // TODO BA-FS26 set during mount? + kstd::shared_ptr m_root_inode{}; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index a2955f9..dcf83b9 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -1,9 +1,6 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP -#include "kernel/devices/device.hpp" -#include "kernel/filesystem/inode_metadata.hpp" - #include #include @@ -12,26 +9,26 @@ namespace filesystem { struct inode { - inode() = default; + enum class inode_kind + { + regular, + directory, + device + }; + explicit inode(inode_kind kind); - explicit inode(kstd::shared_ptr const & device); - [[nodiscard]] auto metadata() const -> inode_metadata; + virtual ~inode() = default; [[nodiscard]] auto is_directory() const -> bool; [[nodiscard]] auto is_regular() const -> bool; [[nodiscard]] auto is_device() const -> bool; - [[nodiscard]] auto is_block_device() const -> bool; - [[nodiscard]] auto major_device() const -> size_t; - [[nodiscard]] auto minor_device() const -> size_t; - [[nodiscard]] auto backing_device() const -> kstd::shared_ptr const &; - auto read(void * buffer, size_t offset, size_t size) const -> size_t; - auto write(void const * buffer, size_t offset, size_t size) -> size_t; + virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; + virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; private: inode_kind m_kind{inode_kind::regular}; - kstd::shared_ptr m_device{}; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/inode_metadata.hpp b/kernel/include/kernel/filesystem/inode_metadata.hpp deleted file mode 100644 index ed5a09d..0000000 --- a/kernel/include/kernel/filesystem/inode_metadata.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP - -#include -#include - -namespace filesystem -{ - enum class inode_kind - { - regular, - directory, - device - }; - - struct inode_metadata - { - inode_kind kind{inode_kind::regular}; - std::optional major{}; - std::optional minor{}; - }; -} // namespace filesystem - -#endif // TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP \ No newline at end of file -- cgit v1.2.3 From 09e3d0cb2272e7eabd79a320c17c58124515d427 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Thu, 19 Mar 2026 22:58:31 +0100 Subject: first try to simplify the architecture (remove redundant inode_file and open() methods), add ext2_file placeholder struct --- kernel/include/kernel/filesystem/device_file.hpp | 2 -- kernel/include/kernel/filesystem/device_inode.hpp | 8 ++----- .../include/kernel/filesystem/ext2/ext2_file.hpp | 17 ++++++++++++++ .../include/kernel/filesystem/ext2/ext2_inode.hpp | 10 +++++++- kernel/include/kernel/filesystem/file.hpp | 2 -- kernel/include/kernel/filesystem/inode.hpp | 7 +++--- kernel/include/kernel/filesystem/inode_file.hpp | 27 ---------------------- 7 files changed, 31 insertions(+), 42 deletions(-) create mode 100644 kernel/include/kernel/filesystem/ext2/ext2_file.hpp delete mode 100644 kernel/include/kernel/filesystem/inode_file.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp index 06aa9b2..ff803f8 100644 --- a/kernel/include/kernel/filesystem/device_file.hpp +++ b/kernel/include/kernel/filesystem/device_file.hpp @@ -15,8 +15,6 @@ namespace filesystem { explicit device_file(kstd::shared_ptr const & device); - auto open() -> void override; - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index 0287875..c38c75b 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -2,22 +2,18 @@ #define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP #include "kernel/devices/device.hpp" +#include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" #include -#include - namespace filesystem { struct device_inode : inode { explicit device_inode(kstd::shared_ptr const & device); - [[nodiscard]] auto backing_device() const -> kstd::shared_ptr const &; - - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + [[nodiscard]] auto open_file() const -> kstd::shared_ptr override; private: kstd::shared_ptr m_device{}; diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp new file mode 100644 index 0000000..b5708d8 --- /dev/null +++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp @@ -0,0 +1,17 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP + +#include "kernel/filesystem/file.hpp" + +#include + +namespace filesystem::ext2 +{ + struct ext2_file : file + { + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + }; +} // namespace filesystem::ext2 + +#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index 7cd6f8f..f103877 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,13 +1,21 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP +#include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" +#include + namespace filesystem::ext2 { struct ext2_inode : inode { - // TODO BA-FS26 + ext2_inode(); + + [[nodiscard]] auto open_file() const -> kstd::shared_ptr override; + + private: + // TODO BA-FS26 add ext2-specific inode metadata here (e.g. block pointers, size, permissions, etc.) }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp index e7e1b12..5a41fab 100644 --- a/kernel/include/kernel/filesystem/file.hpp +++ b/kernel/include/kernel/filesystem/file.hpp @@ -9,8 +9,6 @@ namespace filesystem { virtual ~file() = default; - virtual auto open() -> void = 0; - virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; }; diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index dcf83b9..79cbcf9 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -1,9 +1,9 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP -#include +#include "kernel/filesystem/file.hpp" -#include +#include namespace filesystem { @@ -24,8 +24,7 @@ namespace filesystem [[nodiscard]] auto is_regular() const -> bool; [[nodiscard]] auto is_device() const -> bool; - virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; - virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; + [[nodiscard]] virtual auto open_file() const -> kstd::shared_ptr = 0; private: inode_kind m_kind{inode_kind::regular}; diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp deleted file mode 100644 index ee84eee..0000000 --- a/kernel/include/kernel/filesystem/inode_file.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP - -#include "kernel/filesystem/file.hpp" -#include "kernel/filesystem/inode.hpp" - -#include - -#include - -namespace filesystem -{ - struct inode_file : file - { - explicit inode_file(kstd::shared_ptr const & inode); - - auto open() -> void override; - - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; - - private: - kstd::shared_ptr m_inode; - }; -} // namespace filesystem - -#endif \ No newline at end of file -- cgit v1.2.3 From f669454966c9fa8cbdbbefb1d9cfdd61026849f9 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Fri, 20 Mar 2026 21:47:58 +0100 Subject: improve architecture again -> use same architecture for devices and ext2_files --- kernel/include/kernel/filesystem/disk_file.hpp | 19 ++++++++++++++++ .../include/kernel/filesystem/ext2/ext2_file.hpp | 4 ++-- .../include/kernel/filesystem/ext2/ext2_inode.hpp | 5 +++-- kernel/include/kernel/filesystem/inode_file.hpp | 25 ++++++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 kernel/include/kernel/filesystem/disk_file.hpp create mode 100644 kernel/include/kernel/filesystem/inode_file.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/disk_file.hpp b/kernel/include/kernel/filesystem/disk_file.hpp new file mode 100644 index 0000000..c6a7655 --- /dev/null +++ b/kernel/include/kernel/filesystem/disk_file.hpp @@ -0,0 +1,19 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP + +#include + +#include + +namespace filesystem +{ + struct disk_file + { + virtual ~disk_file() = default; + + virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; + virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; + }; +} // namespace filesystem + +#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp index b5708d8..371507d 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp @@ -1,13 +1,13 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP -#include "kernel/filesystem/file.hpp" +#include "kernel/filesystem/disk_file.hpp" #include namespace filesystem::ext2 { - struct ext2_file : file + struct ext2_file : disk_file { auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index f103877..7b5ff3f 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,6 +1,7 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP +#include "kernel/filesystem/disk_file.hpp" #include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" @@ -10,12 +11,12 @@ namespace filesystem::ext2 { struct ext2_inode : inode { - ext2_inode(); + explicit ext2_inode(kstd::shared_ptr const & disk_file); [[nodiscard]] auto open_file() const -> kstd::shared_ptr override; private: - // TODO BA-FS26 add ext2-specific inode metadata here (e.g. block pointers, size, permissions, etc.) + kstd::shared_ptr m_disk_file{}; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp new file mode 100644 index 0000000..3e2b954 --- /dev/null +++ b/kernel/include/kernel/filesystem/inode_file.hpp @@ -0,0 +1,25 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP + +#include "kernel/filesystem/disk_file.hpp" +#include "kernel/filesystem/file.hpp" + +#include + +#include + +namespace filesystem +{ + struct inode_file : file + { + explicit inode_file(kstd::shared_ptr const & disk_file); + + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + + private: + kstd::shared_ptr m_disk_file; + }; +} // namespace filesystem + +#endif \ No newline at end of file -- cgit v1.2.3 From a396b71827a24f9d6c8010fd85b9afd9d86b6e2a Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Fri, 20 Mar 2026 22:13:36 +0100 Subject: implement first draft of a do_mount function --- kernel/include/kernel/filesystem/vfs.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index a2894a6..2ad570b 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -3,7 +3,7 @@ #include "kernel/devices/device.hpp" #include "kernel/filesystem/custody.hpp" -#include "kernel/filesystem/ext2/ext2_filesystem.hpp" +#include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/inode.hpp" #include "kernel/filesystem/mount.hpp" #include "kernel/filesystem/open_file_description.hpp" @@ -24,22 +24,24 @@ namespace filesystem ~vfs() = default; auto open(std::string_view path) -> std::optional; + auto do_mount(std::string_view path, kstd::shared_ptr const & filesystem) -> int; private: + // TODO BA-FS26 remove again and use devtempfs struct device_node_entry { std::string_view name; kstd::shared_ptr node; }; + kstd::vector> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs vfs() = default; auto make_device_node(kstd::shared_ptr const & device) -> void; [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; - kstd::shared_ptr m_root_fs; + kstd::shared_ptr m_root_fs; std::optional m_root_mount; - // kstd::vector m_mounts; // TODO BA-FS26 really needed? - kstd::vector> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs + kstd::vector m_mounts; }; } // namespace filesystem -- cgit v1.2.3 From be44d4b778bb7c3a947af4cae610ecc3b8851672 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Fri, 20 Mar 2026 22:27:26 +0100 Subject: use kstd::shared_ptr instead of std::optional for open_file_descriptions --- kernel/include/kernel/filesystem/file_descriptor_table.hpp | 10 ++++------ kernel/include/kernel/filesystem/vfs.hpp | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/file_descriptor_table.hpp b/kernel/include/kernel/filesystem/file_descriptor_table.hpp index 6d78532..bc6fb24 100644 --- a/kernel/include/kernel/filesystem/file_descriptor_table.hpp +++ b/kernel/include/kernel/filesystem/file_descriptor_table.hpp @@ -3,10 +3,9 @@ #include "open_file_description.hpp" +#include #include -#include - namespace filesystem { struct file_descriptor_table @@ -16,15 +15,14 @@ namespace filesystem ~file_descriptor_table() = default; - auto add_file(open_file_description & f) -> int; - [[nodiscard]] auto get_file(int fd) const -> std::optional; + auto add_file(kstd::shared_ptr const & f) -> int; + [[nodiscard]] auto get_file(int fd) const -> kstd::shared_ptr; auto remove_file(int fd) -> void; private: file_descriptor_table() = default; - // TODO BA-FS26 use kstd::shared_ptr when available - kstd::vector> m_open_files{}; + kstd::vector> m_open_files{}; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index 2ad570b..ca51d90 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -23,7 +23,7 @@ namespace filesystem ~vfs() = default; - auto open(std::string_view path) -> std::optional; + auto open(std::string_view path) -> kstd::shared_ptr; auto do_mount(std::string_view path, kstd::shared_ptr const & filesystem) -> int; private: -- cgit v1.2.3 From ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 21 Mar 2026 00:28:17 +0100 Subject: refactor file and inode architecture again --- kernel/include/kernel/filesystem/device_file.hpp | 6 ++++-- kernel/include/kernel/filesystem/device_inode.hpp | 7 +++++-- kernel/include/kernel/filesystem/disk_file.hpp | 19 ------------------- kernel/include/kernel/filesystem/ext2/ext2_file.hpp | 8 +++----- kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 9 +++++---- kernel/include/kernel/filesystem/file.hpp | 8 ++++++++ kernel/include/kernel/filesystem/inode.hpp | 8 ++++---- kernel/include/kernel/filesystem/inode_file.hpp | 9 ++++----- 8 files changed, 33 insertions(+), 41 deletions(-) delete mode 100644 kernel/include/kernel/filesystem/disk_file.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp index ff803f8..22ddb49 100644 --- a/kernel/include/kernel/filesystem/device_file.hpp +++ b/kernel/include/kernel/filesystem/device_file.hpp @@ -11,9 +11,11 @@ namespace filesystem { + struct inode; + struct device_file : file { - explicit device_file(kstd::shared_ptr const & device); + explicit device_file(kstd::shared_ptr const & inode); auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; @@ -23,7 +25,7 @@ namespace filesystem std::byte * scratch, void * buffer); auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t; - kstd::shared_ptr m_device; + [[nodiscard]] auto device() const -> kstd::shared_ptr const &; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index c38c75b..af2a51b 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -2,18 +2,21 @@ #define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP #include "kernel/devices/device.hpp" -#include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" #include namespace filesystem { + struct file; + struct device_inode : inode { explicit device_inode(kstd::shared_ptr const & device); - [[nodiscard]] auto open_file() const -> kstd::shared_ptr override; + [[nodiscard]] auto open_file(kstd::shared_ptr const & self) const -> kstd::shared_ptr override; + + [[nodiscard]] auto device() const -> kstd::shared_ptr const &; private: kstd::shared_ptr m_device{}; diff --git a/kernel/include/kernel/filesystem/disk_file.hpp b/kernel/include/kernel/filesystem/disk_file.hpp deleted file mode 100644 index c6a7655..0000000 --- a/kernel/include/kernel/filesystem/disk_file.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP - -#include - -#include - -namespace filesystem -{ - struct disk_file - { - virtual ~disk_file() = default; - - virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; - virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; - }; -} // namespace filesystem - -#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp index 371507d..e5357e3 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp @@ -1,16 +1,14 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP -#include "kernel/filesystem/disk_file.hpp" - #include namespace filesystem::ext2 { - struct ext2_file : disk_file + struct ext2_file { - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + auto read(void * buffer, size_t offset, size_t size) const -> size_t; + auto write(void const * buffer, size_t offset, size_t size) -> size_t; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index 7b5ff3f..b57d267 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,7 +1,7 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP -#include "kernel/filesystem/disk_file.hpp" +#include "kernel/filesystem/ext2/ext2_file.hpp" #include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" @@ -11,12 +11,13 @@ namespace filesystem::ext2 { struct ext2_inode : inode { - explicit ext2_inode(kstd::shared_ptr const & disk_file); + explicit ext2_inode(); - [[nodiscard]] auto open_file() const -> kstd::shared_ptr override; + [[nodiscard]] auto open_file(kstd::shared_ptr const & self) const + -> kstd::shared_ptr override; private: - kstd::shared_ptr m_disk_file{}; + kstd::shared_ptr m_file{}; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp index 5a41fab..522f078 100644 --- a/kernel/include/kernel/filesystem/file.hpp +++ b/kernel/include/kernel/filesystem/file.hpp @@ -1,16 +1,24 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP +#include + #include namespace filesystem { + struct inode; + struct file { + explicit file(kstd::shared_ptr const & inode); virtual ~file() = default; virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; + + protected: + kstd::shared_ptr m_inode; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index 79cbcf9..8c9f75e 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -1,12 +1,12 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP -#include "kernel/filesystem/file.hpp" - #include namespace filesystem { + struct file; + struct inode { enum class inode_kind @@ -20,12 +20,12 @@ namespace filesystem virtual ~inode() = default; + [[nodiscard]] virtual auto open_file(kstd::shared_ptr const & self) const -> kstd::shared_ptr = 0; + [[nodiscard]] auto is_directory() const -> bool; [[nodiscard]] auto is_regular() const -> bool; [[nodiscard]] auto is_device() const -> bool; - [[nodiscard]] virtual auto open_file() const -> kstd::shared_ptr = 0; - private: inode_kind m_kind{inode_kind::regular}; }; diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp index 3e2b954..f87b77c 100644 --- a/kernel/include/kernel/filesystem/inode_file.hpp +++ b/kernel/include/kernel/filesystem/inode_file.hpp @@ -1,8 +1,8 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP -#include "kernel/filesystem/disk_file.hpp" #include "kernel/filesystem/file.hpp" +#include "kernel/filesystem/inode.hpp" #include @@ -10,15 +10,14 @@ namespace filesystem { + struct inode; + struct inode_file : file { - explicit inode_file(kstd::shared_ptr const & disk_file); + explicit inode_file(kstd::shared_ptr const & inode); auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; - - private: - kstd::shared_ptr m_disk_file; }; } // namespace filesystem -- cgit v1.2.3 From ffb2accb09a013d8da16acd824c846bc1acfd8e4 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 21 Mar 2026 10:52:46 +0100 Subject: use enable_shared_from_this instead of self invocation method --- kernel/include/kernel/filesystem/device_inode.hpp | 4 ++-- kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 5 ++--- kernel/include/kernel/filesystem/inode.hpp | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index af2a51b..10e40b3 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -14,12 +14,12 @@ namespace filesystem { explicit device_inode(kstd::shared_ptr const & device); - [[nodiscard]] auto open_file(kstd::shared_ptr const & self) const -> kstd::shared_ptr override; + [[nodiscard]] auto open_file() -> kstd::shared_ptr override; [[nodiscard]] auto device() const -> kstd::shared_ptr const &; private: - kstd::shared_ptr m_device{}; + kstd::shared_ptr m_device; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index b57d267..e6e8e99 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -13,11 +13,10 @@ namespace filesystem::ext2 { explicit ext2_inode(); - [[nodiscard]] auto open_file(kstd::shared_ptr const & self) const - -> kstd::shared_ptr override; + [[nodiscard]] auto open_file() -> kstd::shared_ptr override; private: - kstd::shared_ptr m_file{}; + kstd::shared_ptr m_file; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index 8c9f75e..1083d13 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -7,7 +7,7 @@ namespace filesystem { struct file; - struct inode + struct inode : kstd::enable_shared_from_this { enum class inode_kind { @@ -20,7 +20,7 @@ namespace filesystem virtual ~inode() = default; - [[nodiscard]] virtual auto open_file(kstd::shared_ptr const & self) const -> kstd::shared_ptr = 0; + [[nodiscard]] virtual auto open_file() -> kstd::shared_ptr = 0; [[nodiscard]] auto is_directory() const -> bool; [[nodiscard]] auto is_regular() const -> bool; -- cgit v1.2.3 From 6c172389b562a08a6540574d6fbdf6a5bdce37b8 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 21 Mar 2026 16:22:23 +0100 Subject: simplify architecture again --- kernel/include/kernel/filesystem/device_file.hpp | 32 ---------------------- kernel/include/kernel/filesystem/device_inode.hpp | 14 ++++++---- .../include/kernel/filesystem/ext2/ext2_inode.hpp | 6 ++-- kernel/include/kernel/filesystem/file.hpp | 25 ----------------- kernel/include/kernel/filesystem/inode.hpp | 7 +++-- kernel/include/kernel/filesystem/inode_file.hpp | 24 ---------------- .../kernel/filesystem/open_file_description.hpp | 6 ++-- 7 files changed, 20 insertions(+), 94 deletions(-) delete mode 100644 kernel/include/kernel/filesystem/device_file.hpp delete mode 100644 kernel/include/kernel/filesystem/file.hpp delete mode 100644 kernel/include/kernel/filesystem/inode_file.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp deleted file mode 100644 index 22ddb49..0000000 --- a/kernel/include/kernel/filesystem/device_file.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP - -#include "kernel/devices/block_device.hpp" -#include "kernel/devices/device.hpp" -#include "kernel/filesystem/file.hpp" - -#include - -#include - -namespace filesystem -{ - struct inode; - - struct device_file : file - { - explicit device_file(kstd::shared_ptr const & inode); - - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; - - private: - using block_op = void (*)(size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, - std::byte * scratch, void * buffer); - auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t; - - [[nodiscard]] auto device() const -> kstd::shared_ptr const &; - }; -} // namespace filesystem - -#endif diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index 10e40b3..ce0f91c 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -1,24 +1,28 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP +#include "kernel/devices/block_device.hpp" #include "kernel/devices/device.hpp" #include "kernel/filesystem/inode.hpp" #include +#include + namespace filesystem { - struct file; - struct device_inode : inode { explicit device_inode(kstd::shared_ptr const & device); - [[nodiscard]] auto open_file() -> kstd::shared_ptr override; - - [[nodiscard]] auto device() const -> kstd::shared_ptr const &; + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; private: + using block_op = void (*)(size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, + std::byte * scratch, void * buffer); + auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t; + kstd::shared_ptr m_device; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index e6e8e99..5f4d16a 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -2,18 +2,20 @@ #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #include "kernel/filesystem/ext2/ext2_file.hpp" -#include "kernel/filesystem/file.hpp" #include "kernel/filesystem/inode.hpp" #include +#include + namespace filesystem::ext2 { struct ext2_inode : inode { explicit ext2_inode(); - [[nodiscard]] auto open_file() -> kstd::shared_ptr override; + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; private: kstd::shared_ptr m_file; diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp deleted file mode 100644 index 522f078..0000000 --- a/kernel/include/kernel/filesystem/file.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP - -#include - -#include - -namespace filesystem -{ - struct inode; - - struct file - { - explicit file(kstd::shared_ptr const & inode); - virtual ~file() = default; - - virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; - virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; - - protected: - kstd::shared_ptr m_inode; - }; -} // namespace filesystem - -#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index 1083d13..94ccd89 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -3,10 +3,10 @@ #include +#include + namespace filesystem { - struct file; - struct inode : kstd::enable_shared_from_this { enum class inode_kind @@ -20,7 +20,8 @@ namespace filesystem virtual ~inode() = default; - [[nodiscard]] virtual auto open_file() -> kstd::shared_ptr = 0; + virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0; + virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0; [[nodiscard]] auto is_directory() const -> bool; [[nodiscard]] auto is_regular() const -> bool; diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp deleted file mode 100644 index f87b77c..0000000 --- a/kernel/include/kernel/filesystem/inode_file.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP - -#include "kernel/filesystem/file.hpp" -#include "kernel/filesystem/inode.hpp" - -#include - -#include - -namespace filesystem -{ - struct inode; - - struct inode_file : file - { - explicit inode_file(kstd::shared_ptr const & inode); - - auto read(void * buffer, size_t offset, size_t size) const -> size_t override; - auto write(void const * buffer, size_t offset, size_t size) -> size_t override; - }; -} // namespace filesystem - -#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/open_file_description.hpp b/kernel/include/kernel/filesystem/open_file_description.hpp index 5ff094d..3c97d50 100644 --- a/kernel/include/kernel/filesystem/open_file_description.hpp +++ b/kernel/include/kernel/filesystem/open_file_description.hpp @@ -1,7 +1,7 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP #define TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP -#include "file.hpp" +#include "kernel/filesystem/inode.hpp" #include @@ -11,7 +11,7 @@ namespace filesystem { struct open_file_description { - open_file_description(kstd::shared_ptr const & file); + open_file_description(kstd::shared_ptr const & inode); ~open_file_description() = default; @@ -19,7 +19,7 @@ namespace filesystem auto write(void const * buffer, size_t size) -> size_t; private: - kstd::shared_ptr m_file; + kstd::shared_ptr m_inode; size_t m_offset; }; -- cgit v1.2.3 From ac3510bb9f696869f059ecd4ece2c6970fa63b6c Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 21 Mar 2026 23:57:49 +0100 Subject: implement device names with kstd::string --- kernel/include/kernel/devices/block_device.hpp | 5 +++-- kernel/include/kernel/devices/device.hpp | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/devices/block_device.hpp b/kernel/include/kernel/devices/block_device.hpp index fb7d104..e2026dd 100644 --- a/kernel/include/kernel/devices/block_device.hpp +++ b/kernel/include/kernel/devices/block_device.hpp @@ -3,8 +3,9 @@ #include "kernel/devices/device.hpp" +#include + #include -#include namespace devices { @@ -20,7 +21,7 @@ namespace devices * @param name Device name. * @param block_size Size of one logical block in bytes. */ - block_device(size_t major, size_t minor, std::string_view name, size_t block_size); + block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size); /** * @brief Read data from the block at @p block_index into @p buffer. diff --git a/kernel/include/kernel/devices/device.hpp b/kernel/include/kernel/devices/device.hpp index d6f520f..66cb7f8 100644 --- a/kernel/include/kernel/devices/device.hpp +++ b/kernel/include/kernel/devices/device.hpp @@ -1,8 +1,9 @@ #ifndef TEACH_OS_KERNEL_DEVICES_DEVICE_HPP #define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP +#include + #include -#include namespace devices { @@ -17,7 +18,7 @@ namespace devices * @param minor Device minor number. * @param name Device name. */ - device(size_t major, size_t minor, std::string_view name); + device(size_t major, size_t minor, kstd::string const & name); /** * @brief Virtual destructor for device. @@ -40,7 +41,7 @@ namespace devices * @brief Returns the name of the device. * @return Device name. */ - [[nodiscard]] auto name() const -> std::string_view; + [[nodiscard]] auto name() const -> kstd::string const &; /** * @brief Check if the device is a block device. @@ -54,7 +55,7 @@ namespace devices private: size_t m_major; size_t m_minor; - std::string_view m_name; + kstd::string m_name; }; } // namespace devices -- cgit v1.2.3 From 840c7fec926e7fa8a9d9b64b23167f269096b59b Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 22 Mar 2026 15:08:42 +0100 Subject: Remove unneeded enable_shared_from_this in inode --- kernel/include/kernel/filesystem/inode.hpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp index 94ccd89..6d8f0d4 100644 --- a/kernel/include/kernel/filesystem/inode.hpp +++ b/kernel/include/kernel/filesystem/inode.hpp @@ -1,13 +1,11 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP -#include - #include namespace filesystem { - struct inode : kstd::enable_shared_from_this + struct inode { enum class inode_kind { -- cgit v1.2.3 From f90cbdaa91b1b7a4752db3f159ce2524696cff9f Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 09:03:27 +0100 Subject: Rename custody to dentry and add children --- kernel/include/kernel/filesystem/custody.hpp | 23 ----------------------- kernel/include/kernel/filesystem/dentry.hpp | 25 +++++++++++++++++++++++++ kernel/include/kernel/filesystem/vfs.hpp | 6 +++--- 3 files changed, 28 insertions(+), 26 deletions(-) delete mode 100644 kernel/include/kernel/filesystem/custody.hpp create mode 100644 kernel/include/kernel/filesystem/dentry.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/custody.hpp b/kernel/include/kernel/filesystem/custody.hpp deleted file mode 100644 index 8a0e09a..0000000 --- a/kernel/include/kernel/filesystem/custody.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef TEACH_OS_KERNEL_CUSTODY_HPP -#define TEACH_OS_KERNEL_CUSTODY_HPP - -#include "kernel/filesystem/inode.hpp" - -#include - -namespace filesystem -{ - struct custody - { - custody(kstd::shared_ptr const & parent, kstd::shared_ptr const & node); - - [[nodiscard]] auto get_inode() const -> kstd::shared_ptr const &; - [[nodiscard]] auto get_parent() const -> kstd::shared_ptr const &; - - private: - kstd::shared_ptr m_parent; - kstd::shared_ptr m_inode; - }; -} // namespace filesystem - -#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp new file mode 100644 index 0000000..1532880 --- /dev/null +++ b/kernel/include/kernel/filesystem/dentry.hpp @@ -0,0 +1,25 @@ +#ifndef TEACH_OS_KERNEL_DENTRY_HPP +#define TEACH_OS_KERNEL_DENTRY_HPP + +#include "kernel/filesystem/inode.hpp" + +#include +#include + +namespace filesystem +{ + struct dentry + { + dentry(kstd::shared_ptr const & parent, kstd::shared_ptr const & node); + + [[nodiscard]] auto get_inode() const -> kstd::shared_ptr const &; + [[nodiscard]] auto get_parent() const -> kstd::shared_ptr const &; + + private: + kstd::shared_ptr m_parent; + kstd::vector> m_children; + kstd::shared_ptr m_inode; + }; +} // namespace filesystem + +#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index ca51d90..bcf06f7 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -2,7 +2,7 @@ #define TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP #include "kernel/devices/device.hpp" -#include "kernel/filesystem/custody.hpp" +#include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/inode.hpp" #include "kernel/filesystem/mount.hpp" @@ -37,11 +37,11 @@ namespace filesystem vfs() = default; auto make_device_node(kstd::shared_ptr const & device) -> void; - [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; + [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; kstd::shared_ptr m_root_fs; std::optional m_root_mount; - kstd::vector m_mounts; + kstd::vector m_mount_table; }; } // namespace filesystem -- cgit v1.2.3 From d70e2df0885a844d47b6498bf2c710fb9730b364 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 09:49:10 +0100 Subject: Add dentry structure --- kernel/include/kernel/filesystem/dentry.hpp | 14 ++++++++++++++ kernel/include/kernel/filesystem/vfs.hpp | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp index 1532880..db15b48 100644 --- a/kernel/include/kernel/filesystem/dentry.hpp +++ b/kernel/include/kernel/filesystem/dentry.hpp @@ -4,21 +4,35 @@ #include "kernel/filesystem/inode.hpp" #include +#include #include +#include + namespace filesystem { struct dentry { + enum class dentry_flags : uint32_t + { + dcache_mounted = 1 << 15 + }; + dentry(kstd::shared_ptr const & parent, kstd::shared_ptr const & node); [[nodiscard]] auto get_inode() const -> kstd::shared_ptr const &; [[nodiscard]] auto get_parent() const -> kstd::shared_ptr const &; + auto set_flag(dentry_flags flag) -> void; + auto unset_flag(dentry_flags flag) -> void; + [[nodiscard]] auto has_flag(dentry_flags flag) const -> bool; + private: + kstd::string m_name; kstd::shared_ptr m_parent; kstd::vector> m_children; kstd::shared_ptr m_inode; + uint32_t m_flags{0}; }; } // namespace filesystem diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index bcf06f7..01cd2ea 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -40,7 +40,7 @@ namespace filesystem [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; kstd::shared_ptr m_root_fs; - std::optional m_root_mount; + kstd::shared_ptr m_root_dentry; kstd::vector m_mount_table; }; } // namespace filesystem -- cgit v1.2.3 From bcb4f8a76dea2443c1597716e27b7c2d268bfc44 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 09:49:32 +0100 Subject: Refactor filesystem --- kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp | 1 - kernel/include/kernel/filesystem/filesystem.hpp | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp index d6f69c8..92e05c8 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp @@ -17,7 +17,6 @@ namespace filesystem::ext2 auto lookup(inode const & parent, std::string_view name) -> inode * override; private: - kstd::shared_ptr m_device{}; }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp index 035f49d..733c51a 100644 --- a/kernel/include/kernel/filesystem/filesystem.hpp +++ b/kernel/include/kernel/filesystem/filesystem.hpp @@ -5,6 +5,7 @@ #include "kernel/filesystem/inode.hpp" #include +#include #include @@ -14,13 +15,15 @@ namespace filesystem { virtual ~filesystem() = default; - virtual auto mount(kstd::shared_ptr const & device) -> int = 0; + virtual auto mount(kstd::shared_ptr const & device) -> int; virtual auto lookup(inode const & parent, std::string_view name) -> inode * = 0; [[nodiscard]] auto root_inode() const -> kstd::shared_ptr const &; protected: kstd::shared_ptr m_root_inode{}; + kstd::shared_ptr m_device{}; + kstd::vector> m_inodes{}; }; } // namespace filesystem -- cgit v1.2.3 From fdcf1c7d2b47d418916e311cea8b87affaf63f90 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 20:12:29 +0100 Subject: Small refactoring use shared pointer --- kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp | 2 +- kernel/include/kernel/filesystem/filesystem.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp index 92e05c8..1445e5a 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp @@ -14,7 +14,7 @@ namespace filesystem::ext2 struct ext2_filesystem : filesystem { auto mount(kstd::shared_ptr const & device) -> int override; - auto lookup(inode const & parent, std::string_view name) -> inode * override; + auto lookup(kstd::shared_ptr const & parent, std::string_view name) -> kstd::shared_ptr override; private: }; diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp index 733c51a..e069ced 100644 --- a/kernel/include/kernel/filesystem/filesystem.hpp +++ b/kernel/include/kernel/filesystem/filesystem.hpp @@ -16,7 +16,7 @@ namespace filesystem virtual ~filesystem() = default; virtual auto mount(kstd::shared_ptr const & device) -> int; - virtual auto lookup(inode const & parent, std::string_view name) -> inode * = 0; + virtual auto lookup(kstd::shared_ptr const & parent, std::string_view name) -> kstd::shared_ptr = 0; [[nodiscard]] auto root_inode() const -> kstd::shared_ptr const &; -- cgit v1.2.3 From 7173e5ba354dccc4b5d5fea119b946f28bc5b08f Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 20:22:43 +0100 Subject: Refactor move init logic into member function --- kernel/include/kernel/filesystem/vfs.hpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index 01cd2ea..b6d4c4c 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -36,6 +36,8 @@ namespace filesystem kstd::vector> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs vfs() = default; + auto init_internal() -> void; + auto make_device_node(kstd::shared_ptr const & device) -> void; [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; -- cgit v1.2.3 From fbb4eefce7bf825b0406f6fa63de318153a3b95a Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 23 Mar 2026 21:41:37 +0100 Subject: Implement resolve_path --- kernel/include/kernel/filesystem/dentry.hpp | 6 +++++- kernel/include/kernel/filesystem/open_file_description.hpp | 2 +- kernel/include/kernel/filesystem/vfs.hpp | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp index db15b48..ca7ca95 100644 --- a/kernel/include/kernel/filesystem/dentry.hpp +++ b/kernel/include/kernel/filesystem/dentry.hpp @@ -8,6 +8,7 @@ #include #include +#include namespace filesystem { @@ -18,11 +19,14 @@ namespace filesystem dcache_mounted = 1 << 15 }; - dentry(kstd::shared_ptr const & parent, kstd::shared_ptr const & node); + dentry(kstd::shared_ptr const & parent, kstd::shared_ptr const & node, std::string_view name = {}); [[nodiscard]] auto get_inode() const -> kstd::shared_ptr const &; [[nodiscard]] auto get_parent() const -> kstd::shared_ptr const &; + auto add_child(kstd::shared_ptr const & child) -> void; + [[nodiscard]] auto find_child(std::string_view name) const -> kstd::shared_ptr; + auto set_flag(dentry_flags flag) -> void; auto unset_flag(dentry_flags flag) -> void; [[nodiscard]] auto has_flag(dentry_flags flag) const -> bool; diff --git a/kernel/include/kernel/filesystem/open_file_description.hpp b/kernel/include/kernel/filesystem/open_file_description.hpp index 3c97d50..e17f9fe 100644 --- a/kernel/include/kernel/filesystem/open_file_description.hpp +++ b/kernel/include/kernel/filesystem/open_file_description.hpp @@ -11,7 +11,7 @@ namespace filesystem { struct open_file_description { - open_file_description(kstd::shared_ptr const & inode); + explicit open_file_description(kstd::shared_ptr const & inode); ~open_file_description() = default; diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index b6d4c4c..317f2d1 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -39,7 +39,7 @@ namespace filesystem auto init_internal() -> void; auto make_device_node(kstd::shared_ptr const & device) -> void; - [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional; + [[nodiscard]] auto resolve_path(std::string_view path) -> kstd::shared_ptr; kstd::shared_ptr m_root_fs; kstd::shared_ptr m_root_dentry; -- cgit v1.2.3 From 444810121f9c89285da1ec118828640f0445b2a7 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Tue, 24 Mar 2026 16:50:27 +0100 Subject: Add mount_table --- kernel/include/kernel/filesystem/mount_table.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 kernel/include/kernel/filesystem/mount_table.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/mount_table.hpp b/kernel/include/kernel/filesystem/mount_table.hpp new file mode 100644 index 0000000..14d6d08 --- /dev/null +++ b/kernel/include/kernel/filesystem/mount_table.hpp @@ -0,0 +1,23 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_TABLE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_MOUNT_TABLE_HPP + +#include "kernel/filesystem/dentry.hpp" +#include "kernel/filesystem/mount.hpp" + +#include +#include + +namespace filesystem +{ + struct mount_table + { + public: + void add_mount(kstd::shared_ptr); + auto find_mount_by_dentry(kstd::shared_ptr const & dentry) -> kstd::shared_ptr; + + private: + kstd::vector> m_mounts; + }; +} // namespace filesystem + +#endif -- cgit v1.2.3 From 6110774495a10d1dd8766f8fa8597fb3bdc4aabd Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Tue, 24 Mar 2026 16:51:28 +0100 Subject: Fix dentry header guards --- kernel/include/kernel/filesystem/dentry.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp index ca7ca95..c28246f 100644 --- a/kernel/include/kernel/filesystem/dentry.hpp +++ b/kernel/include/kernel/filesystem/dentry.hpp @@ -1,5 +1,5 @@ -#ifndef TEACH_OS_KERNEL_DENTRY_HPP -#define TEACH_OS_KERNEL_DENTRY_HPP +#ifndef TEACH_OS_KERNEL_FILESYSTEM_DENTRY_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_DENTRY_HPP #include "kernel/filesystem/inode.hpp" -- cgit v1.2.3 From b742349ba039d1a864462332bb7ae5a071afdec1 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Tue, 24 Mar 2026 16:53:21 +0100 Subject: Refactor mount_table entry (mount) to use dentry as key instead of path --- kernel/include/kernel/filesystem/mount.hpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/mount.hpp b/kernel/include/kernel/filesystem/mount.hpp index 232a9be..dd47ce7 100644 --- a/kernel/include/kernel/filesystem/mount.hpp +++ b/kernel/include/kernel/filesystem/mount.hpp @@ -1,23 +1,22 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP #define TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP +#include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/filesystem.hpp" #include -#include - namespace filesystem { struct mount { - mount(std::string_view const & path, kstd::shared_ptr const & fs); + mount(kstd::shared_ptr const & mount_dentry, kstd::shared_ptr const & fs); - [[nodiscard]] auto path() const -> std::string_view; + [[nodiscard]] auto get_dentry() const -> kstd::shared_ptr; [[nodiscard]] auto get_filesystem() const -> kstd::shared_ptr const &; private: - std::string_view m_path; + kstd::shared_ptr m_dentry; kstd::shared_ptr m_filesystem{}; }; } // namespace filesystem -- cgit v1.2.3 From 70229b88ad195a6e945b4cc75e1248685cda0951 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Tue, 24 Mar 2026 17:05:57 +0100 Subject: Add root_dentry to filesystem --- kernel/include/kernel/filesystem/filesystem.hpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp index e069ced..362242f 100644 --- a/kernel/include/kernel/filesystem/filesystem.hpp +++ b/kernel/include/kernel/filesystem/filesystem.hpp @@ -2,6 +2,7 @@ #define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP #include "kernel/devices/device.hpp" +#include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/inode.hpp" #include @@ -19,11 +20,15 @@ namespace filesystem virtual auto lookup(kstd::shared_ptr const & parent, std::string_view name) -> kstd::shared_ptr = 0; [[nodiscard]] auto root_inode() const -> kstd::shared_ptr const &; + [[nodiscard]] auto root_dentry() const -> kstd::shared_ptr const &; + + auto set_root_dentry(kstd::shared_ptr dentry) -> void; protected: kstd::shared_ptr m_root_inode{}; kstd::shared_ptr m_device{}; kstd::vector> m_inodes{}; + kstd::shared_ptr m_root_dentry; }; } // namespace filesystem -- cgit v1.2.3 From a2ac8770937a28d0d4c674e25c9b3c77802a5c9e Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Tue, 24 Mar 2026 17:22:55 +0100 Subject: Refactor mounting of new filesystems and path resolving in vfs --- kernel/include/kernel/filesystem/vfs.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index 317f2d1..55bf6a4 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -6,6 +6,7 @@ #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/inode.hpp" #include "kernel/filesystem/mount.hpp" +#include "kernel/filesystem/mount_table.hpp" #include "kernel/filesystem/open_file_description.hpp" #include @@ -43,7 +44,7 @@ namespace filesystem kstd::shared_ptr m_root_fs; kstd::shared_ptr m_root_dentry; - kstd::vector m_mount_table; + mount_table m_mount_table; }; } // namespace filesystem -- cgit v1.2.3 From 76de81de1e12694bf6bec1edd3e3409092a92d09 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 24 Mar 2026 20:41:32 +0100 Subject: refactoring, add root_mount into the root_table --- kernel/include/kernel/filesystem/mount_table.hpp | 2 ++ kernel/include/kernel/filesystem/vfs.hpp | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/mount_table.hpp b/kernel/include/kernel/filesystem/mount_table.hpp index 14d6d08..cf523c1 100644 --- a/kernel/include/kernel/filesystem/mount_table.hpp +++ b/kernel/include/kernel/filesystem/mount_table.hpp @@ -13,6 +13,8 @@ namespace filesystem { public: void add_mount(kstd::shared_ptr); + + [[nodiscard]] auto get_root_mount() const -> kstd::shared_ptr; auto find_mount_by_dentry(kstd::shared_ptr const & dentry) -> kstd::shared_ptr; private: diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index 55bf6a4..cf268a3 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -5,7 +5,6 @@ #include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/inode.hpp" -#include "kernel/filesystem/mount.hpp" #include "kernel/filesystem/mount_table.hpp" #include "kernel/filesystem/open_file_description.hpp" @@ -42,8 +4