summaryrefslogtreecommitdiff
path: root/Kernel/Storage/StorageDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Storage/StorageDevice.cpp')
-rw-r--r--Kernel/Storage/StorageDevice.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/Kernel/Storage/StorageDevice.cpp b/Kernel/Storage/StorageDevice.cpp
index 6ca9980d8f..abdfb33104 100644
--- a/Kernel/Storage/StorageDevice.cpp
+++ b/Kernel/Storage/StorageDevice.cpp
@@ -73,7 +73,10 @@ KResultOr<size_t> StorageDevice::read(FileDescription&, u64 offset, UserOrKernel
off_t pos = whole_blocks * block_size();
if (remaining > 0) {
- auto data = ByteBuffer::create_uninitialized(block_size());
+ auto data_result = ByteBuffer::create_uninitialized(block_size());
+ if (!data_result.has_value())
+ return ENOMEM;
+ auto data = data_result.release_value();
auto data_buffer = UserOrKernelBuffer::for_kernel_buffer(data.data());
auto read_request = make_request<AsyncBlockDeviceRequest>(AsyncBlockDeviceRequest::Read, index + whole_blocks, 1, data_buffer, block_size());
auto result = read_request->wait();
@@ -141,7 +144,8 @@ KResultOr<size_t> StorageDevice::write(FileDescription&, u64 offset, const UserO
// partial write, we have to read the block's content first, modify it,
// then write the whole block back to the disk.
if (remaining > 0) {
- auto data = ByteBuffer::create_zeroed(block_size());
+ // FIXME: Do something sensible with this OOM scenario.
+ auto data = ByteBuffer::create_zeroed(block_size()).release_value();
auto data_buffer = UserOrKernelBuffer::for_kernel_buffer(data.data());
{