Patent ID: 8650328
Filing Date: 2014-02-11
Classification: G06F

Abstract:
1. A computer-implemented method for providing bi-directional communication between storage modules executing on a first storage controller and a second storage controller, wherein the first and second storage controllers are connected via a point-to-point communication channel, the point-to-point communication channel being a Serial-Attached Small Computer System Interface (SCSI) channel, the first storage controller is operating in an initiator role with respect to the Serial-Attached SCSI channel, and the second storage controller is operating in a target role with respect to the Serial-Attached SCSI channel, the method comprising: registering a logical block address range associated with a remote storage module executing on the first storage controller for synchronizing communication between the storage modules executing on the first storage controller and the second storage controller, wherein the logical block address range comprises one or more logical block addresses between a start logical block address and an end logical block address; sending an anticipatory read command over the Serial-Attached SCSI channel from the first storage controller to the second storage controller, wherein the anticipatory read command comprises a SCSI READ BUFFER command that specifies the second storage controller as a target controller, wherein the first storage controller is configured to send one or more commands over the Serial-Attached SCSI channel to the second storage controller while the SCSI READ BUFFER command is pending; transmitting a first function call from a calling storage module executing on the first storage controller to a corresponding remote storage module executing on the second storage controller by issuing a write command from the first storage controller to the second storage controller over the Serial-Attached SCSI channel to initiate communication from the first storage controller acting in the initiator role, wherein the write command comprises a SCSI WRITE command, wherein the first storage controller acting in the initiator role initiates a storage module command to the second storage controller acting in the target role by issuing the SCSI WRITE command while the SCSI READ BUFFER command from the first storage controller is pending for the second storage controller; transmitting a second function call from a calling storage module executing on the second storage controller to a corresponding remote storage module executing on the first storage controller by issuing an acknowledgment to the SCSI READ BUFFER command from the second storage controller to the first storage controller over the Serial-Attached SCSI channel, wherein the acknowledgement to the SCSI READ BUFFER command comprises a logical block address, a length and an acknowledgment flag value specified by the calling storage module executing on the second storage controller, wherein the SCSI READ BUFFER command allows the second storage controller acting in the target role to initiate a storage module command to the first storage controller acting in the initiator role by issuing the acknowledgment to the SCSI READ BUFFER command; upon receiving the second function call on the first storage controller, determining whether the logical block address included in the acknowledgement to the SCSI READ BUFFER command is between the start logical block address and the end logical block address of the logical block address range associated with the remote storage module executing on the first storage controller for synchronizing communication; issuing a SCSI READ command, generated by the first storage controller, from the first storage controller to the second storage controller over the Serial-Attached SCSI channel to retrieve one or more of data and metadata associated with the second function call in response to the determination that the logical block address included in the acknowledgment to the SCSI READ BUFFER command is between the start logical block address and the end logical block address of the logical block address range associated with the remote storage module executing on the first storage controller for synchronizing communication, wherein the SCSI READ command specifies the second storage controller as the target controller; receiving an acknowledgment to the SCSI READ command from the second storage controller, wherein the acknowledgment to the SCSI READ command contains the one or more of data and metadata associated with the second function call; and transmitting a result code to the calling storage module executing on the second storage controller by issuing another SCSI WRITE command from the first storage controller to the second storage controller over the Serial-Attached SCSI channel.