By correctly routing I/O WRITE requests and other I/O requests and commands that change the data state of data storage devices to a mirroring agent, and routing all other I/O requests and commands directly to data storage devices, the potential bottleneck otherwise represented by mirroring agents can be avoided.