diff options
author | Idan Horowitz <idan.horowitz@gmail.com> | 2022-01-25 20:27:35 +0200 |
---|---|---|
committer | Idan Horowitz <idan.horowitz@gmail.com> | 2022-01-25 22:41:17 +0200 |
commit | d1ed554dc8d907d05b27f8c5f0bae03893728e3d (patch) | |
tree | 2e33026fa0e2d2cc82e1754dd7659a515632e9a5 /Kernel/Storage/StorageDevice.cpp | |
parent | b9cce82cf35a3da61da1c45c3d1c306515ee1870 (diff) | |
download | serenity-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
Diffstat (limited to 'Kernel/Storage/StorageDevice.cpp')
-rw-r--r-- | Kernel/Storage/StorageDevice.cpp | 14 |
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. |