CPC G06F 3/0689 (2013.01) [G06F 3/0619 (2013.01); G06F 3/0659 (2013.01); G06F 11/1076 (2013.01); G06F 15/17331 (2013.01)] | 14 Claims |
1. A system, comprising;
a plurality of storage devices; and
a Redundant Array of Independent Disks (RAID) controller configured to:
receive a request to read data distributed among the plurality of storage devices;
identify a first subset of the plurality of storage devices to which data associated with the request was written based at least in part on a RAID mode implemented by the RAID controller;
cause the first subset of the plurality of storage devices to:
locally read the data associated with the request from the first subset of the plurality of storage devices; and
directly write the read data associated with the request to a memory that is remote to the RAID controller;
determine that a storage device in the first subset of the plurality of storage devices has become unavailable based on;
sending a read command to the storage device in the first subset of the plurality of storage devices, wherein the read command includes a respective designated location at the memory that is remote to the RAID controller at which the storage device is to write read data, wherein the respective designated location was prescribed within the request to read data that was received by the RAID controller; and
capturing a direct memory access (DMA) error from polling a completion queue associated with the storage device;
identify a second subset of the plurality of storage devices to which parity information was written based at least in part on the RAID mode; and
cause the second subset of the plurality of storage devices to:
locally read the parity information; and
directly write the parity information to the memory that is remote to the RAID controller.
|