• Paolo Bonzini's avatar
    scsi: core: add support for request batching · 8930a6c2
    Paolo Bonzini authored
    This allows a list of requests to be issued, with the LLD only writing the
    hardware doorbell when necessary, after the last request was prepared.
    This is more efficient if we have lists of requests to issue, particularly
    on virtualized hardware, where writing the doorbell is more expensive than
    on real hardware.
    
    The use case for this is plugged IO, where blk-mq flushes a batch of
    requests all at once.
    
    The API is the same as for blk-mq, just with blk-mq concepts tweaked to
    fit the SCSI subsystem API: the "last" flag in blk_mq_queue_data becomes a
    flag in scsi_cmnd, while the queue_num in the commit_rqs callback is
    extracted from the hctx and passed as a parameter.
    
    The only complication is that blk-mq uses different plugging heuristics
    depending on whether commit_rqs is present or not.  So we have two
    different sets of blk_mq_ops and pick one depending on whether the
    scsi_host template uses commit_rqs or not.
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    8930a6c2
scsi_cmnd.h 8.97 KB