Kernel: Remove storage devices after unplugging them

This commit is contained in:
2025-02-07 18:04:54 +02:00
parent 26d2a4420e
commit 267fdf9fa1
5 changed files with 38 additions and 14 deletions

View File

@@ -28,7 +28,7 @@ namespace Kernel
virtual BAN::ErrorOr<void> fsync_impl() final override { return BAN::Error::from_errno(EINVAL); }
};
class BlockDevice : public Device
class BlockDevice : public Device, public BAN::Weakable<BlockDevice>
{
public:
virtual BAN::ErrorOr<void> read_blocks(uint64_t first_block, size_t block_count, BAN::ByteSpan) = 0;

View File

@@ -13,9 +13,8 @@ namespace Kernel
const BAN::GUID& partition_type() const { return m_type; }
const BAN::GUID& partition_guid() const { return m_guid; }
const BAN::RefPtr<BlockDevice> device() const { return m_device; }
virtual blksize_t blksize() const override { return m_device->blksize(); }
virtual blksize_t blksize() const override { return m_block_size; }
BAN::ErrorOr<void> read_sectors(uint64_t first_block, size_t block_count, BAN::ByteSpan buffer) { return read_blocks(first_block, block_count, buffer); }
BAN::ErrorOr<void> write_sectors(uint64_t first_block, size_t block_count, BAN::ConstByteSpan buffer) { return write_blocks(first_block, block_count, buffer); }
@@ -32,7 +31,8 @@ namespace Kernel
Partition(BAN::RefPtr<BlockDevice>, const BAN::GUID&, const BAN::GUID&, uint64_t, uint64_t, uint64_t, const char*, uint32_t, BAN::StringView);
private:
BAN::RefPtr<BlockDevice> m_device;
mutable BAN::WeakPtr<BlockDevice> m_device;
const uint64_t m_block_size;
const BAN::GUID m_type;
const BAN::GUID m_guid;
const BAN::String m_guid_string;