diff options
Diffstat (limited to 'kernel/kernel/filesystem/ext2/inode.cpp')
| -rw-r--r-- | kernel/kernel/filesystem/ext2/inode.cpp | 52 |
1 files changed, 16 insertions, 36 deletions
diff --git a/kernel/kernel/filesystem/ext2/inode.cpp b/kernel/kernel/filesystem/ext2/inode.cpp index 561bf9de..8c7d0ec0 100644 --- a/kernel/kernel/filesystem/ext2/inode.cpp +++ b/kernel/kernel/filesystem/ext2/inode.cpp @@ -52,9 +52,14 @@ namespace kernel::filesystem::ext2 { return kstd::failure(driver_data.error()); } - auto state = static_pointer_cast<mount_state const>(*driver_data); + auto backing_inode = state->backing_inode; + if (!state->backing_inode) + { + return kstd::failure(vfs_errc::not_mounted); + } + auto block_size = (*filesystem)->block_size(*state); auto block_index = offset / block_size; auto in_block_offset = offset % block_size; @@ -78,16 +83,11 @@ namespace kernel::filesystem::ext2 } else { - auto inode = backing_inode(); - if (!inode) - { - return kstd::failure(inode.error()); - } - auto const block_start_offset = block_number.value() * block_size; auto const read_offset = block_start_offset + in_block_offset; - auto const read_result = (*inode)->read(buffer.subspan(bytes_read.value, bytes_to_read.value), read_offset); + auto const read_result = + backing_inode->read(buffer.subspan(bytes_read.value, bytes_to_read.value), read_offset); if (!read_result) { return kstd::failure(read_result.error()); @@ -126,8 +126,14 @@ namespace kernel::filesystem::ext2 { return kstd::failure(driver_data.error()); } - auto state = static_pointer_cast<mount_state>(*driver_data); + + auto backing_inode = state->backing_inode; + if (!state->backing_inode) + { + return kstd::failure(vfs_errc::not_mounted); + } + auto block_size = (*filesystem)->block_size(*state); auto const current_block_count = (*filesystem)->inode_block_count(m_data, *state); @@ -165,14 +171,8 @@ namespace kernel::filesystem::ext2 auto const block_start_offset = block_number.value() * block_size; auto const write_offset = block_start_offset + in_block_offset; - auto inode = backing_inode(); - if (!inode) - { - return kstd::failure(inode.error()); - } - auto const write_result = - (*inode)->write(buffer.subspan(bytes_written.value, bytes_to_write.value), write_offset); + backing_inode->write(buffer.subspan(bytes_written.value, bytes_to_write.value), write_offset); if (!write_result) { return kstd::failure(write_result.error()); @@ -373,26 +373,6 @@ namespace kernel::filesystem::ext2 return kstd::failure(vfs_errc::not_mounted); } - auto inode::backing_inode() -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> - { - if (auto mount = owning_mount().lock()) - { - return mount->backing_inode(); - } - - return kstd::failure(vfs_errc::not_mounted); - } - - auto inode::backing_inode() const -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode const>> - { - if (auto mount = owning_mount().lock()) - { - return mount->backing_inode(); - } - - return kstd::failure(vfs_errc::not_mounted); - } - auto inode::get_driver_data() -> kstd::result<kstd::shared_ptr<void>> { if (auto mount = owning_mount().lock()) |
