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 <hch@lst.de> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Venkatesh Srinivas <venkateshs@google.com>
This commit is contained in:
@@ -4472,7 +4472,6 @@ static int
|
||||
sdebug_change_qdepth(struct scsi_device *sdev, int qdepth, int reason)
|
||||
{
|
||||
int num_in_q = 0;
|
||||
int bad = 0;
|
||||
unsigned long iflags;
|
||||
struct sdebug_dev_info *devip;
|
||||
|
||||
@@ -4484,43 +4483,18 @@ sdebug_change_qdepth(struct scsi_device *sdev, int qdepth, int reason)
|
||||
}
|
||||
num_in_q = atomic_read(&devip->num_in_q);
|
||||
spin_unlock_irqrestore(&queued_arr_lock, iflags);
|
||||
if (reason == SCSI_QDEPTH_DEFAULT || reason == SCSI_QDEPTH_RAMP_UP) {
|
||||
if (qdepth < 1)
|
||||
qdepth = 1;
|
||||
/* allow to exceed max host queued_arr elements for testing */
|
||||
if (qdepth > SCSI_DEBUG_CANQUEUE + 10)
|
||||
qdepth = SCSI_DEBUG_CANQUEUE + 10;
|
||||
scsi_adjust_queue_depth(sdev, qdepth);
|
||||
} else if (reason == SCSI_QDEPTH_QFULL)
|
||||
scsi_track_queue_full(sdev, qdepth);
|
||||
else
|
||||
bad = 1;
|
||||
if (bad)
|
||||
sdev_printk(KERN_WARNING, sdev,
|
||||
"%s: unknown reason=0x%x\n", __func__, reason);
|
||||
if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) {
|
||||
if (SCSI_QDEPTH_QFULL == reason)
|
||||
sdev_printk(KERN_INFO, sdev,
|
||||
"%s: -> %d, num_in_q=%d, reason: queue full\n",
|
||||
__func__, qdepth, num_in_q);
|
||||
else {
|
||||
const char *cp;
|
||||
|
||||
switch (reason) {
|
||||
case SCSI_QDEPTH_DEFAULT:
|
||||
cp = "default (sysfs ?)";
|
||||
break;
|
||||
case SCSI_QDEPTH_RAMP_UP:
|
||||
cp = "ramp up";
|
||||
break;
|
||||
default:
|
||||
cp = "unknown";
|
||||
break;
|
||||
}
|
||||
sdev_printk(KERN_INFO, sdev,
|
||||
"%s: qdepth=%d, num_in_q=%d, reason: %s\n",
|
||||
__func__, qdepth, num_in_q, cp);
|
||||
}
|
||||
if (qdepth < 1)
|
||||
qdepth = 1;
|
||||
/* allow to exceed max host queued_arr elements for testing */
|
||||
if (qdepth > SCSI_DEBUG_CANQUEUE + 10)
|
||||
qdepth = SCSI_DEBUG_CANQUEUE + 10;
|
||||
scsi_adjust_queue_depth(sdev, qdepth);
|
||||
|
||||
if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) {
|
||||
sdev_printk(KERN_INFO, sdev,
|
||||
"%s: qdepth=%d, num_in_q=%d\n",
|
||||
__func__, qdepth, num_in_q);
|
||||
}
|
||||
return sdev->queue_depth;
|
||||
}
|
||||
@@ -4576,6 +4550,7 @@ static struct scsi_host_template sdebug_driver_template = {
|
||||
.max_sectors = -1U,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.module = THIS_MODULE,
|
||||
.track_queue_depth = 1,
|
||||
};
|
||||
|
||||
static int sdebug_driver_probe(struct device * dev)
|
||||
|
Reference in New Issue
Block a user