From 8c0488fb8df8742740eb8464a7ad51d71a24e416 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sun, 29 Mar 2026 13:29:23 +0200 Subject: remove redundant ext2_file class --- kernel/include/kernel/filesystem/ext2/ext2_file.hpp | 15 --------------- kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 4 ---- 2 files changed, 19 deletions(-) delete mode 100644 kernel/include/kernel/filesystem/ext2/ext2_file.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp deleted file mode 100644 index e5357e3..0000000 --- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP -#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP - -#include - -namespace filesystem::ext2 -{ - struct ext2_file - { - 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 - -#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 5f4d16a..b697c93 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -1,7 +1,6 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP -#include "kernel/filesystem/ext2/ext2_file.hpp" #include "kernel/filesystem/inode.hpp" #include @@ -16,9 +15,6 @@ namespace filesystem::ext2 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; }; } // namespace filesystem::ext2 -- cgit v1.2.3 From fd6e5899f6e0dc238a7944772e35d0ec6b738a38 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 29 Mar 2026 16:56:30 +0200 Subject: Refactor --- kernel/include/kernel/filesystem/ext2/ext2_inode.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp index b697c93..3f6a3b0 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -11,7 +11,7 @@ namespace filesystem::ext2 { struct ext2_inode : inode { - explicit ext2_inode(); + ext2_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; -- cgit v1.2.3 From a64b9daefeee0f91fe74d6df394944b71ecc7d80 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 29 Mar 2026 16:57:19 +0200 Subject: Add ext2_superblock definiton --- .../kernel/filesystem/ext2/ext2_superblock.hpp | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 kernel/include/kernel/filesystem/ext2/ext2_superblock.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_superblock.hpp b/kernel/include/kernel/filesystem/ext2/ext2_superblock.hpp new file mode 100644 index 0000000..cd77cd4 --- /dev/null +++ b/kernel/include/kernel/filesystem/ext2/ext2_superblock.hpp @@ -0,0 +1,76 @@ +#ifndef EXT2_SUPERBLOCK_HPP +#define EXT2_SUPERBLOCK_HPP + +#include +#include + +namespace filesystem::ext2 +{ + struct ext2_superblock + { + uint32_t inodes_count; + uint32_t blocks_count; + uint32_t reserved_blocks_count; + uint32_t free_blocks_count; + uint32_t free_inodes_count; + uint32_t first_data_block; + uint32_t log_block_size; + uint32_t log_frag_size; + uint32_t blocks_per_group; + uint32_t frags_per_group; + uint32_t inodes_per_group; + uint32_t mtime; + uint32_t wtime; + uint16_t mnt_count; + uint16_t max_mnt_count; + uint16_t magic; + uint16_t state; + uint16_t errors; + uint16_t minor_rev_level; + uint32_t lastcheck; + uint32_t checkinterval; + uint32_t creator_os; + uint32_t rev_level; + uint16_t def_resuid; + uint16_t def_resgid; + + // EXT2_DYNAMIC_REV superblock only + uint32_t first_ino; + uint16_t inode_size; + uint16_t block_group_nr; + uint32_t feature_compat; + uint32_t feature_incompat; + uint32_t feature_ro_compat; + // uint8_t uuid[16]; // TODO BA-FS26 really correct? + std::array uuid; + // uint8_t volume_name[16]; // TODO BA-FS26 really correct? + std::array volume_name; + // uint8_t last_mounted[64]; // TODO BA-FS26 really correct? + std::array last_mounted; + uint32_t algorithm_usage_bitmap; + + // Performance Hints + uint8_t prealloc_blocks; + uint8_t prealloc_dir_blocks; + uint16_t padding1; + + // Journaling Support + // uint8_t journal_uuid[16]; // TODO BA-FS26 really correct? + std::array journal_uuid; + uint32_t journal_inum; + uint32_t journal_dev; + uint32_t last_orphan; + + // Directory Indexing Support + // uint32_t hash_seed[4]; // TODO BA-FS26 really correct? + std::array hash_seed; + uint8_t def_hash_version; + std::array padding2; + + // Other options + uint32_t default_mount_options; + uint32_t first_meta_bg; + std::array unused; // NOLINT(readability-magic-numbers) + }; +} // namespace filesystem::ext2 +#endif \ No newline at end of file -- cgit v1.2.3 From b03b6b851082d91ca374fed3e8a070d278eb93ab Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 29 Mar 2026 17:22:55 +0200 Subject: Add ext2 block_group_descriptor, inode and linked_directory_entry definitions --- .../ext2/ext2_block_group_descriptor.hpp | 21 ++++++++++++++++++++ .../include/kernel/filesystem/ext2/ext2_inode.hpp | 23 ++++++++++++++++++++++ .../ext2/ext2_linked_directory_entry.hpp | 20 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 kernel/include/kernel/filesystem/ext2/ext2_block_group_descriptor.hpp create mode 100644 kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_block_group_descriptor.hpp b/kernel/include/kernel/filesystem/ext2/ext2_block_group_descriptor.hpp new file mode 100644 index 0000000..b0966da --- /dev/null +++ b/kernel/include/kernel/filesystem/ext2/ext2_block_group_descriptor.hpp @@ -0,0 +1,21 @@ +#ifndef EXT2_BLOCK_GROUP_DESCRIPTOR_HPP +#define EXT2_BLOCK_GROUP_DESCRIPTOR_HPP + +#include +#include + +namespace filesystem::ext2 +{ + struct ext2_block_group_descriptor + { + uint32_t block_bitmap; + uint32_t inode_bitmap; + uint32_t inode_table; + uint16_t free_blocks_count; + uint16_t free_inodes_count; + uint16_t used_dirs_count; + std::array padding; + std::array reserved; // NOLINT(readability-magic-numbers) + }; +} // namespace filesystem::ext2 +#endif // EXT2_BLOCK_GROUP_DESCRIPTOR_HPP \ 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 3f6a3b0..c35f84c 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp @@ -5,7 +5,9 @@ #include +#include #include +#include namespace filesystem::ext2 { @@ -15,6 +17,27 @@ namespace filesystem::ext2 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; + + uint16_t mode; + uint16_t uid; + uint32_t size; + uint32_t atime; + uint32_t ctime; + uint32_t mtime; + uint32_t dtime; + uint16_t gid; + uint16_t links_count; + uint32_t blocks; + uint32_t flags; + uint32_t osd1; + // uint32_t block[15]; // TODO BA-FS26 really correct? + std::array block; // NOLINT(readability-magic-numbers) + uint32_t generation; + uint32_t file_acl; + uint32_t dir_acl; + uint32_t faddr; + // uint8_t osd2[12]; // TODO BA-FS26 really correct? + std::array osd2; // NOLINT(readability-magic-numbers) }; } // namespace filesystem::ext2 diff --git a/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp b/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp new file mode 100644 index 0000000..2a8872b --- /dev/null +++ b/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp @@ -0,0 +1,20 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_LINKED_DIRECTORY_ENTRY_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_LINKED_DIRECTORY_ENTRY_HPP + +#include +#include + +namespace filesystem::ext2 +{ + struct ext2_linked_directory_entry + { + uint32_t inode; + uint16_t rec_len; + uint8_t name_len; + uint8_t file_type; + uint8_t pad; + std::array name; + }; +} // namespace filesystem::ext2 + +#endif \ No newline at end of file -- cgit v1.2.3 From 3888a9f90301003780fc02ce317fde29e1c20c1f Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 29 Mar 2026 18:36:53 +0200 Subject: Fix name length --- kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/include') diff --git a/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp b/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp index 2a8872b..3128617 100644 --- a/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp +++ b/kernel/include/kernel/filesystem/ext2/ext2_linked_directory_entry.hpp @@ -13,7 +13,7 @@ namespace filesystem::ext2 uint8_t name_len; uint8_t file_type; uint8_t pad; - std::array name; + std::array name; // NOLINT(readability-magic-numbers) }; } // namespace filesystem::ext2 -- cgit v1.2.3 From 9c602f2cf8fd87f55adc31c085e469e72b7cbbfa Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Sun, 29 Mar 2026 20:49:03 +0200 Subject: Move block device offset and size-to-blocks calculation to block_device_utils --- kernel/include/kernel/devices/block_device_utils.hpp | 17 +++++++++++++++++ kernel/include/kernel/filesystem/device_inode.hpp | 5 ----- 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 kernel/include/kernel/devices/block_device_utils.hpp (limited to 'kernel/include') diff --git a/kernel/include/kernel/devices/block_device_utils.hpp b/kernel/include/kernel/devices/block_device_utils.hpp new file mode 100644 index 0000000..5ec69d1 --- /dev/null +++ b/kernel/include/kernel/devices/block_device_utils.hpp @@ -0,0 +1,17 @@ +#ifndef TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_UTILS_HPP +#define TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_UTILS_HPP + +#include "kernel/devices/device.hpp" + +#include + +#include + +namespace devices::block_device_utils +{ + auto read(kstd::shared_ptr const & device, void * buffer, size_t offset, size_t size) -> size_t; + auto write(kstd::shared_ptr const & device, void const * buffer, size_t offset, size_t size) + -> size_t; +} // namespace devices::block_device_utils + +#endif \ No newline at end of file diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index 1cf08d4..0477969 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -1,7 +1,6 @@ #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" @@ -21,10 +20,6 @@ namespace filesystem [[nodiscard]] auto device() const -> kstd::shared_ptr const &; 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 -- cgit v1.2.3