From 6ff85aa19ad7642ea0a099ab8bfa161de95157ce Mon Sep 17 00:00:00 2001
From: Pankaj Raghav
Date: Tue, 14 Mar 2023 10:24:27 +0100
Subject: [PATCH] Kernel/Ramdisk: Propagate error during Ramdisk initialize
Use the same pattern for Ramdisk similar to other storage devices during
device initialization. This will propagate errors if the Ramdisk fails
to initialize.
---
Kernel/Storage/Ramdisk/Controller.cpp | 4 ++--
Kernel/Storage/Ramdisk/Controller.h | 2 +-
Kernel/Storage/StorageManagement.cpp | 7 ++++++-
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/Kernel/Storage/Ramdisk/Controller.cpp b/Kernel/Storage/Ramdisk/Controller.cpp
index 2893c737db7..d414b0ca28f 100644
--- a/Kernel/Storage/Ramdisk/Controller.cpp
+++ b/Kernel/Storage/Ramdisk/Controller.cpp
@@ -11,9 +11,9 @@
namespace Kernel {
-NonnullRefPtr RamdiskController::initialize()
+ErrorOr> RamdiskController::try_initialize()
{
- return adopt_ref(*new RamdiskController());
+ return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) RamdiskController()));
}
bool RamdiskController::reset()
diff --git a/Kernel/Storage/Ramdisk/Controller.h b/Kernel/Storage/Ramdisk/Controller.h
index 4a92dce5a4d..7f345990bf8 100644
--- a/Kernel/Storage/Ramdisk/Controller.h
+++ b/Kernel/Storage/Ramdisk/Controller.h
@@ -19,7 +19,7 @@ class AsyncBlockDeviceRequest;
class RamdiskController final : public StorageController {
public:
- static NonnullRefPtr initialize();
+ static ErrorOr> try_initialize();
virtual ~RamdiskController() override;
virtual LockRefPtr device(u32 index) const override;
diff --git a/Kernel/Storage/StorageManagement.cpp b/Kernel/Storage/StorageManagement.cpp
index 7fa774d8d2d..76dd7fd826f 100644
--- a/Kernel/Storage/StorageManagement.cpp
+++ b/Kernel/Storage/StorageManagement.cpp
@@ -444,7 +444,12 @@ UNMAP_AFTER_INIT void StorageManagement::initialize(StringView root_device, bool
}
// Note: Whether PCI bus is present on the system or not, always try to attach
// a given ramdisk.
- m_controllers.append(RamdiskController::initialize());
+ auto controller = RamdiskController::try_initialize();
+ if (controller.is_error()) {
+ dmesgln("Unable to initialize RAM controller: {}", controller.error());
+ } else {
+ m_controllers.append(controller.release_value());
+ }
enumerate_storage_devices();
enumerate_disk_partitions();