diff --git a/kernel/include/kernel/Device/Device.h b/kernel/include/kernel/Device/Device.h index 58f105b7f..e5c3d64df 100644 --- a/kernel/include/kernel/Device/Device.h +++ b/kernel/include/kernel/Device/Device.h @@ -1,11 +1,11 @@ #pragma once -#include +#include namespace Kernel { - class Device : public RamInode + class Device : public TmpInode { public: virtual ~Device() = default; diff --git a/kernel/include/kernel/FS/DevFS/FileSystem.h b/kernel/include/kernel/FS/DevFS/FileSystem.h index e8a56c51d..2eac5aae2 100644 --- a/kernel/include/kernel/FS/DevFS/FileSystem.h +++ b/kernel/include/kernel/FS/DevFS/FileSystem.h @@ -1,13 +1,13 @@ #pragma once #include -#include +#include #include namespace Kernel { - class DevFileSystem final : public RamFileSystem + class DevFileSystem final : public TmpFileSystem { public: static void initialize(); @@ -16,7 +16,7 @@ namespace Kernel void initialize_device_updater(); void add_device(BAN::RefPtr); - void add_inode(BAN::StringView path, BAN::RefPtr); + void add_inode(BAN::StringView path, BAN::RefPtr); void for_each_device(const BAN::Function& callback); dev_t get_next_dev() const; @@ -25,8 +25,8 @@ namespace Kernel void initiate_sync(bool should_block); private: - DevFileSystem(size_t size) - : RamFileSystem(size) + DevFileSystem() + : TmpFileSystem(-1) { } private: diff --git a/kernel/include/kernel/FS/TmpFS/Inode.h b/kernel/include/kernel/FS/TmpFS/Inode.h index 6bc8427db..e567aa27e 100644 --- a/kernel/include/kernel/FS/TmpFS/Inode.h +++ b/kernel/include/kernel/FS/TmpFS/Inode.h @@ -35,8 +35,8 @@ namespace Kernel virtual timespec ctime() const override final { return m_inode_info.ctime; } virtual blksize_t blksize() const override final { return PAGE_SIZE; } virtual blkcnt_t blocks() const override final { return m_inode_info.blocks; } - virtual dev_t dev() const override final { return 0; } // TODO - virtual dev_t rdev() const override final { return 0; } // TODO + virtual dev_t dev() const override { return 0; } // TODO + virtual dev_t rdev() const override { return 0; } // TODO public: static BAN::ErrorOr> create_from_existing(TmpFileSystem&, ino_t, const TmpInodeInfo&); diff --git a/kernel/include/kernel/Storage/StorageDevice.h b/kernel/include/kernel/Storage/StorageDevice.h index 4f433fb00..49f6a8aad 100644 --- a/kernel/include/kernel/Storage/StorageDevice.h +++ b/kernel/include/kernel/Storage/StorageDevice.h @@ -51,9 +51,6 @@ namespace Kernel public: virtual bool is_partition() const override { return true; } - virtual Mode mode() const override { return { Mode::IFBLK | Mode::IRUSR | Mode::IRGRP }; } - virtual uid_t uid() const override { return 0; } - virtual gid_t gid() const override { return 0; } virtual dev_t rdev() const override { return m_rdev; } protected: diff --git a/kernel/kernel/Device/Device.cpp b/kernel/kernel/Device/Device.cpp index 1971a1ded..e9a1835e8 100644 --- a/kernel/kernel/Device/Device.cpp +++ b/kernel/kernel/Device/Device.cpp @@ -5,7 +5,12 @@ namespace Kernel { Device::Device(mode_t mode, uid_t uid, gid_t gid) - : RamInode(DevFileSystem::get(), FullInodeInfo(DevFileSystem::get(), mode, uid, gid)) + // FIXME: what the fuck is this + : TmpInode( + DevFileSystem::get(), + MUST(DevFileSystem::get().allocate_inode(create_inode_info(mode, uid, gid))), + create_inode_info(mode, uid, gid) + ) { } } \ No newline at end of file diff --git a/kernel/kernel/FS/DevFS/FileSystem.cpp b/kernel/kernel/FS/DevFS/FileSystem.cpp index 2aaa6ead6..81ba39672 100644 --- a/kernel/kernel/FS/DevFS/FileSystem.cpp +++ b/kernel/kernel/FS/DevFS/FileSystem.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include #include @@ -16,12 +16,10 @@ namespace Kernel void DevFileSystem::initialize() { ASSERT(s_instance == nullptr); - s_instance = new DevFileSystem(1024 * 1024); + s_instance = new DevFileSystem(); ASSERT(s_instance); - auto root_inode = MUST(RamDirectoryInode::create(*s_instance, 0, 0755, 0, 0)); - MUST(s_instance->set_root_inode(root_inode)); - + MUST(s_instance->TmpFileSystem::initialize(0755, 0, 0)); s_instance->add_device(MUST(NullDevice::create(0666, 0, 0))); s_instance->add_device(MUST(ZeroDevice::create(0666, 0, 0))); } @@ -41,10 +39,10 @@ namespace Kernel { s_instance->m_device_lock.lock(); s_instance->for_each_inode( - [](BAN::RefPtr inode) + [](BAN::RefPtr inode) { if (inode->is_device()) - ((Device*)inode.ptr())->update(); + reinterpret_cast(inode.ptr())->update(); return BAN::Iteration::Continue; } ); @@ -74,11 +72,11 @@ namespace Kernel } s_instance->for_each_inode( - [](BAN::RefPtr inode) + [](BAN::RefPtr inode) { if (inode->is_device()) if (((Device*)inode.ptr())->is_storage_device()) - if (auto ret = ((StorageDevice*)inode.ptr())->sync_disk_cache(); ret.is_error()) + if (auto ret = reinterpret_cast(inode.ptr())->sync_disk_cache(); ret.is_error()) dwarnln("disk sync: {}", ret.error()); return BAN::Iteration::Continue; } @@ -120,24 +118,24 @@ namespace Kernel void DevFileSystem::add_device(BAN::RefPtr device) { ASSERT(!device->name().contains('/')); - MUST(reinterpret_cast(root_inode().ptr())->add_inode(device->name(), device)); + MUST(reinterpret_cast(root_inode().ptr())->link_inode(*device, device->name())); } - void DevFileSystem::add_inode(BAN::StringView path, BAN::RefPtr inode) + void DevFileSystem::add_inode(BAN::StringView path, BAN::RefPtr inode) { ASSERT(!path.contains('/')); - MUST(reinterpret_cast(root_inode().ptr())->add_inode(path, inode)); + MUST(reinterpret_cast(root_inode().ptr())->link_inode(*inode, path)); } void DevFileSystem::for_each_device(const BAN::Function& callback) { LockGuard _(m_device_lock); for_each_inode( - [&](BAN::RefPtr inode) + [&](BAN::RefPtr inode) { if (!inode->is_device()) return BAN::Iteration::Continue; - return callback((Device*)inode.ptr()); + return callback(reinterpret_cast(inode.ptr())); } ); } diff --git a/kernel/kernel/Terminal/TTY.cpp b/kernel/kernel/Terminal/TTY.cpp index 77024d24e..90bbeebc2 100644 --- a/kernel/kernel/Terminal/TTY.cpp +++ b/kernel/kernel/Terminal/TTY.cpp @@ -33,7 +33,7 @@ namespace Kernel if (inode_or_error.is_error()) { if (inode_or_error.error().get_error_code() == ENOENT) - DevFileSystem::get().add_inode("tty"sv, MUST(RamSymlinkInode::create(DevFileSystem::get(), s_tty->name(), 0666, 0, 0))); + DevFileSystem::get().add_inode("tty"sv, MUST(TmpSymlinkInode::create_new(DevFileSystem::get(), 0666, 0, 0, s_tty->name()))); else dwarnln("{}", inode_or_error.error()); return; @@ -41,7 +41,7 @@ namespace Kernel auto inode = inode_or_error.release_value(); if (inode->mode().iflnk()) - MUST(((RamSymlinkInode*)inode.ptr())->set_link_target(name())); + MUST(reinterpret_cast(inode.ptr())->set_link_target(name())); } BAN::ErrorOr TTY::tty_ctrl(int command, int flags)