1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 18:15:07 +00:00

Kernel: Use ErrorOr in BlockBased and Ext2 filesystem raw read and write

These functions used to return booleans which withheld useful
error information for callers. Internally they would suppress
and convert Error objects. We now log or propagate these errors
up the stack.
This commit is contained in:
David Briggs 2022-01-22 19:53:02 -05:00 committed by Linus Groh
parent df6b9cdb0c
commit cf45370c47
5 changed files with 34 additions and 43 deletions

View file

@ -63,14 +63,12 @@ Ext2FS::~Ext2FS()
{
}
bool Ext2FS::flush_super_block()
ErrorOr<void> Ext2FS::flush_super_block()
{
MutexLocker locker(m_lock);
VERIFY((sizeof(ext2_super_block) % logical_block_size()) == 0);
auto super_block_buffer = UserOrKernelBuffer::for_kernel_buffer((u8*)&m_super_block);
bool success = raw_write_blocks(2, (sizeof(ext2_super_block) / logical_block_size()), super_block_buffer);
VERIFY(success);
return true;
return raw_write_blocks(2, (sizeof(ext2_super_block) / logical_block_size()), super_block_buffer);
}
const ext2_group_desc& Ext2FS::group_descriptor(GroupIndex group_index) const
@ -87,8 +85,7 @@ ErrorOr<void> Ext2FS::initialize()
VERIFY((sizeof(ext2_super_block) % logical_block_size()) == 0);
auto super_block_buffer = UserOrKernelBuffer::for_kernel_buffer((u8*)&m_super_block);
bool success = raw_read_blocks(2, (sizeof(ext2_super_block) / logical_block_size()), super_block_buffer);
VERIFY(success);
TRY(raw_read_blocks(2, (sizeof(ext2_super_block) / logical_block_size()), super_block_buffer));
auto const& super_block = this->super_block();
if constexpr (EXT2_DEBUG) {
@ -679,7 +676,12 @@ void Ext2FS::flush_writes()
{
MutexLocker locker(m_lock);
if (m_super_block_dirty) {
flush_super_block();
auto result = flush_super_block();
if (result.is_error()) {
dbgln("Ext2FS[{}]::flush_writes(): Failed to write superblock: {}", fsid(), result.error());
// FIXME: We should handle this error.
VERIFY_NOT_REACHED();
}
m_super_block_dirty = false;
}
if (m_block_group_descriptors_dirty) {