Patent ID: 8725906

Claim:
A data processing system comprising: at least a first and a second Front End SAN controller (FE_SAN), including a data memory, each FE_SAN physically co-located with a host CPUs and interconnected via a host system bus to the co-located host CPU; at least a first and a second Back End SAN controller (BE_SAN), each BE_SAN interconnected via at least one back-end network to a plurality of storage devices; a network fabric interconnecting the FE_SAN controllers with the BE_SAN controllers; and SAN virtualization firmware executing on the FE_SAN controllers and the BE_SAN controllers configured to request data from a particular BE_SAN of the at least {a} first and {a} second BE_SANs when data is required by a host CPU wherein the SAN virtualization firmware of the FE_SAN requests a write lock from one of the at least first and second BE_SAN controllers on receiving a write command from the host, upon grant of write lock by the BE_SAN the FE_SAN writes data to the BE_SAN for writing to an appropriate storage device, and releases the write lock on completing writing of data to the BE_SAN and wherein the particular BE_SAN is configured to recognize writes to a failed storage device of the plurality of storage devices attached thereto, and to relay those writes through a different BE SAN controller to a second storage device attached to the different BE_SAN controller, wherein the BE_SAN includes access control firmware configured to restrict read or write access to specific locked logical block addresses (LBAs) during writes to prevent data corruption while allowing concurrent unrestricted access to other unlocked logical blocks; and wherein, whenever the first and second FE_SAN request simultaneous write lock to a same logical block address, the BE_SAN grants a lock request to the first FE_SAN when its buffer has sufficient space for the indicated amount of data of the first FE_SAN's write lock request or when the appropriate storage device is available for writing; and wherein the BE_SAN grants simultaneous write lock to the second FE_SAN when the BE_SAN has sufficient buffer space available both for the indicated amount of data of the first FE_SAN's write lock request and for an indicated amount of data of the second FE_SAN's write lock request.