summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2022-01-25 20:27:35 +0200
committerIdan Horowitz <idan.horowitz@gmail.com>2022-01-25 22:41:17 +0200
commitd1ed554dc8d907d05b27f8c5f0bae03893728e3d (patch)
tree2e33026fa0e2d2cc82e1754dd7659a515632e9a5
parentb9cce82cf35a3da61da1c45c3d1c306515ee1870 (diff)
downloadserenity-d1ed554dc8d907d05b27f8c5f0bae03893728e3d.zip
Kernel: Use u64 instead of u32 and u16 in StorageDevice::{read, write}
This ensures offsets will not be truncated on large filesystems on i686
-rw-r--r--Kernel/Storage/StorageDevice.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/Kernel/Storage/StorageDevice.cpp b/Kernel/Storage/StorageDevice.cpp
index 54e7defa53..c277498136 100644
--- a/Kernel/Storage/StorageDevice.cpp
+++ b/Kernel/Storage/StorageDevice.cpp
@@ -28,11 +28,11 @@ StringView StorageDevice::class_name() const
ErrorOr<size_t> StorageDevice::read(OpenFileDescription&, u64 offset, UserOrKernelBuffer& outbuf, size_t len)
{
- unsigned index = offset / block_size();
- u16 whole_blocks = len / block_size();
+ u64 index = offset / block_size();
+ size_t whole_blocks = len / block_size();
size_t remaining = len % block_size();
- unsigned blocks_per_page = PAGE_SIZE / block_size();
+ size_t blocks_per_page = PAGE_SIZE / block_size();
// PATAChannel will chuck a wobbly if we try to read more than PAGE_SIZE
// at a time, because it uses a single page for its DMA buffer.
@@ -85,18 +85,18 @@ ErrorOr<size_t> StorageDevice::read(OpenFileDescription&, u64 offset, UserOrKern
return pos + remaining;
}
-bool StorageDevice::can_read(const OpenFileDescription&, size_t offset) const
+bool StorageDevice::can_read(const OpenFileDescription&, u64 offset) const
{
return offset < (max_addressable_block() * block_size());
}
ErrorOr<size_t> StorageDevice::write(OpenFileDescription&, u64 offset, const UserOrKernelBuffer& inbuf, size_t len)
{
- unsigned index = offset / block_size();
- u16 whole_blocks = len / block_size();
+ u64 index = offset / block_size();
+ size_t whole_blocks = len / block_size();
size_t remaining = len % block_size();
- unsigned blocks_per_page = PAGE_SIZE / block_size();
+ size_t blocks_per_page = PAGE_SIZE / block_size();
// PATAChannel will chuck a wobbly if we try to write more than PAGE_SIZE
// at a time, because it uses a single page for its DMA buffer.