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();