At present CH schedules as many read requests as available empty buffers.
That sometimes poses a problem for devices that resets themselves when too many requests are scheduled at once (e.g. some usb devices).
Implement limiting of concurrent reads/writes independent of the count of available buffers.
As an addition, also implement read-ahead limiting. For fast sources there is no point keeping too much data as destination can't process it fast enough and it only keeps memory occupied that could be used to allow processing of the next file.