A method for improving data reading performance of a data storage system comprising a plurality of storage devices (D5, D6, D7, D8), the method being processed by a controller and comprising: sending a first read request for reading first data stored in a target storage device; determining whether the first read request is completed in a first predetermined time period or not; if the first read request is not completed in the first predetermined time period, the method is characterized by further comprising: determining whether there is an uncompleted timeout read request existing in other storage devices which contain data related to the regeneration of the first data and needed to be read, wherein the uncompleted timeout read request is a read request which has been issued for over a predetermined time period and is not completed yet; and generating first redundant data identical to the first data after waiting until no uncompleted timeout read request exists in the other storage devices if there is an uncompleted timeout read request existing in the other storage devices, or generating the first redundant data identical to the first data without waiting if there is no uncompleted timeout read request existing in the other storage devices, the first redundant data being generated for being selectively returned to a request unit, wherein the step of generating the first redundant data identical to the first data comprises a step of acquiring data related to the generation of the first redundant data, whereby either the first data or the first redundant data, which is finished successfully and, as determined by the controller, firstly, is returned to said request unit. sending a first read request for reading first data stored in a target storage device; determining whether the first read request is completed in a first predetermined time period or not; if the first read request is not completed in the first predetermined time period, the method is characterized by further comprising: determining whether there is an uncompleted timeout read request existing in other storage devices which contain data related to the regeneration of the first data and needed to be read, wherein the uncompleted timeout read request is a read request which has been issued for over a predetermined time period and is not completed yet; and generating first redundant data identical to the first data after waiting until no uncompleted timeout read request exists in the other storage devices if there is an uncompleted timeout read request existing in the other storage devices, or generating the first redundant data identical to the first data without waiting if there is no uncompleted timeout read request existing in the other storage devices, the first redundant data being generated for being selectively returned to a request unit, wherein the step of generating the first redundant data identical to the first data comprises a step of acquiring data related to the generation of the first redundant data, whereby either the first data or the first redundant data, which is finished successfully and, as determined by the controller, firstly, is returned to said request unit. determining whether there is an uncompleted timeout read request existing in other storage devices which contain data related to the regeneration of the first data and needed to be read, wherein the uncompleted timeout read request is a read request which has been issued for over a predetermined time period and is not completed yet; and generating first redundant data identical to the first data after waiting until no uncompleted timeout read request exists in the other storage devices if there is an uncompleted timeout read request existing in the other storage devices, or generating the first redundant data identical to the first data without waiting if there is no uncompleted timeout read request existing in the other storage devices, the first redundant data being generated for being selectively returned to a request unit, wherein the step of generating the first redundant data identical to the first data comprises a step of acquiring data related to the generation of the first redundant data, whereby either the first data or the first redundant data, which is finished successfully and, as determined by the controller, firstly, is returned to said request unit.