aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel/filesystem/ext2/inode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel/filesystem/ext2/inode.cpp')
-rw-r--r--kernel/kernel/filesystem/ext2/inode.cpp52
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())