aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2008-07-11 20:50:32 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-07-26 15:14:48 -0400
commit885ace9e2f120439043ffa1bb72a2fa1f3afc645 (patch)
tree809ba05d44d79387c8142fb8d3974801ca222508
parent786231af0a4ac6d78cef51fa7e9c3dd63f016195 (diff)
[SCSI] fix shared tag map setup
Currently qla4xxx and stex pass in their can_queue values into scsi_activate_tcq because they wanted the tag map that large. The problem with this is that it ends up also setting the queue depth to that large value. All we want to do this in this case is set the device queue depth and the other device settings. We do not need to touch the tag map sizing because the drivers had setup that map according to their can_queue limits when the shared map was created. The scsi mid layer in request_fn will then handle the case where we have more requests than available tags when it checks the host queue ready function. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r--drivers/scsi/scsi.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 36c92f961e15..5276e73c58fc 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -902,11 +902,20 @@ void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags)
902 902
903 spin_lock_irqsave(sdev->request_queue->queue_lock, flags); 903 spin_lock_irqsave(sdev->request_queue->queue_lock, flags);
904 904
905 /* Check to see if the queue is managed by the block layer. 905 /*
906 * If it is, and we fail to adjust the depth, exit. */ 906 * Check to see if the queue is managed by the block layer.
907 if (blk_queue_tagged(sdev->request_queue) && 907 * If it is, and we fail to adjust the depth, exit.
908 blk_queue_resize_tags(sdev->request_queue, tags) != 0) 908 *
909 goto out; 909 * Do not resize the tag map if it is a host wide share bqt,
910 * because the size should be the hosts's can_queue. If there
911 * is more IO than the LLD's can_queue (so there are not enuogh
912 * tags) request_fn's host queue ready check will handle it.
913 */
914 if (!sdev->host->bqt) {
915 if (blk_queue_tagged(sdev->request_queue) &&
916 blk_queue_resize_tags(sdev->request_queue, tags) != 0)
917 goto out;
918 }
910 919
911 sdev->queue_depth = tags; 920 sdev->queue_depth = tags;
912 switch (tagged) { 921 switch (tagged) {