scsi: avoid ->change_queue_depth indirection for queue full tracking

All drivers use the implementation for ramping the queue up and down, so
instead of overloading the change_queue_depth method call the
implementation diretly if the driver opts into it by setting the
track_queue_depth flag in the host template.

Note that a few drivers validated the new queue depth in their
change_queue_depth method, but as we never go over the queue depth
set during slave_configure or the sysfs file this isn't nessecary
and can safely be removed.

Signed-off-by: Christoph Hellwig <[email protected]>
Reviewed-by: Mike Christie <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Reviewed-by: Venkatesh Srinivas <[email protected]>
This commit is contained in:
Christoph Hellwig 2014-11-13 14:25:11 +01:00
commit c40ecc12cf
30 changed files with 73 additions and 244 deletions

View file

@ -119,19 +119,7 @@ static int tcm_loop_change_queue_depth(
int depth,
int reason)
{
switch (reason) {
case SCSI_QDEPTH_DEFAULT:
scsi_adjust_queue_depth(sdev, depth);
break;
case SCSI_QDEPTH_QFULL:
scsi_track_queue_full(sdev, depth);
break;
case SCSI_QDEPTH_RAMP_UP:
scsi_adjust_queue_depth(sdev, depth);
break;
default:
return -EOPNOTSUPP;
}
scsi_adjust_queue_depth(sdev, depth);
return sdev->queue_depth;
}
@ -423,6 +411,7 @@ static struct scsi_host_template tcm_loop_driver_template = {
.slave_alloc = tcm_loop_slave_alloc,
.module = THIS_MODULE,
.use_blk_tags = 1,
.track_queue_depth = 1,
};
static int tcm_loop_driver_probe(struct device *dev)