diff options
author | Christoph Hellwig <hch@lst.de> | 2014-11-03 14:15:14 -0500 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-11-12 05:19:43 -0500 |
commit | c8b09f6fb67df7fc1b51ced1037fa9b677428149 (patch) | |
tree | 87527c3e17a7539c0ffa9f64fbd85ec2ad3dabf1 /drivers/scsi | |
parent | 2ecb204d07ac8debe3893c362415919bc78bebd6 (diff) |
scsi: don't set tagging state from scsi_adjust_queue_depth
Remove the tagged argument from scsi_adjust_queue_depth, and just let it
handle the queue depth. For most drivers those two are fairly separate,
given that most modern drivers don't care about the SCSI "tagged" status
of a command at all, and many old drivers allow queuing of multiple
untagged commands in the driver.
Instead we start out with the ->simple_tags flag set before calling
->slave_configure, which is how all drivers actually looking at
->simple_tags except for one worke anyway. The one other case looks
broken, but I've kept the behavior as-is for now.
Except for that we only change ->simple_tags from the ->change_queue_type,
and when rejecting a tag message in a single driver, so keeping this
churn out of scsi_adjust_queue_depth is a clear win.
Now that the usage of scsi_adjust_queue_depth is more obvious we can
also remove all the trivial instances in ->slave_alloc or ->slave_configure
that just set it to the cmd_per_lun default.
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: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
49 files changed, 105 insertions, 225 deletions
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 0a7325361d29..02021f5ca866 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
@@ -198,7 +198,7 @@ static int twa_change_queue_depth(struct scsi_device *sdev, int queue_depth, | |||
198 | 198 | ||
199 | if (queue_depth > TW_Q_LENGTH-2) | 199 | if (queue_depth > TW_Q_LENGTH-2) |
200 | queue_depth = TW_Q_LENGTH-2; | 200 | queue_depth = TW_Q_LENGTH-2; |
201 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); | 201 | scsi_adjust_queue_depth(sdev, queue_depth); |
202 | return queue_depth; | 202 | return queue_depth; |
203 | } /* End twa_change_queue_depth() */ | 203 | } /* End twa_change_queue_depth() */ |
204 | 204 | ||
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index 6da6cec9a651..ac0c2544a470 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c | |||
@@ -200,7 +200,7 @@ static int twl_change_queue_depth(struct scsi_device *sdev, int queue_depth, | |||
200 | 200 | ||
201 | if (queue_depth > TW_Q_LENGTH-2) | 201 | if (queue_depth > TW_Q_LENGTH-2) |
202 | queue_depth = TW_Q_LENGTH-2; | 202 | queue_depth = TW_Q_LENGTH-2; |
203 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); | 203 | scsi_adjust_queue_depth(sdev, queue_depth); |
204 | return queue_depth; | 204 | return queue_depth; |
205 | } /* End twl_change_queue_depth() */ | 205 | } /* End twl_change_queue_depth() */ |
206 | 206 | ||
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c index 752624e6bc00..1ec9ad92b6c3 100644 --- a/drivers/scsi/3w-xxxx.c +++ b/drivers/scsi/3w-xxxx.c | |||
@@ -532,7 +532,7 @@ static int tw_change_queue_depth(struct scsi_device *sdev, int queue_depth, | |||
532 | 532 | ||
533 | if (queue_depth > TW_Q_LENGTH-2) | 533 | if (queue_depth > TW_Q_LENGTH-2) |
534 | queue_depth = TW_Q_LENGTH-2; | 534 | queue_depth = TW_Q_LENGTH-2; |
535 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); | 535 | scsi_adjust_queue_depth(sdev, queue_depth); |
536 | return queue_depth; | 536 | return queue_depth; |
537 | } /* End tw_change_queue_depth() */ | 537 | } /* End tw_change_queue_depth() */ |
538 | 538 | ||
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c index 497cbb1efd4b..d7557b932113 100644 --- a/drivers/scsi/53c700.c +++ b/drivers/scsi/53c700.c | |||
@@ -902,8 +902,10 @@ process_message(struct Scsi_Host *host, struct NCR_700_Host_Parameters *hostdata | |||
902 | /* we're done negotiating */ | 902 | /* we're done negotiating */ |
903 | NCR_700_set_tag_neg_state(SCp->device, NCR_700_FINISHED_TAG_NEGOTIATION); | 903 | NCR_700_set_tag_neg_state(SCp->device, NCR_700_FINISHED_TAG_NEGOTIATION); |
904 | hostdata->tag_negotiated &= ~(1<<scmd_id(SCp)); | 904 | hostdata->tag_negotiated &= ~(1<<scmd_id(SCp)); |
905 | |||
905 | SCp->device->tagged_supported = 0; | 906 | SCp->device->tagged_supported = 0; |
906 | scsi_adjust_queue_depth(SCp->device, 0, host->cmd_per_lun); | 907 | scsi_adjust_queue_depth(SCp->device, host->cmd_per_lun); |
908 | scsi_set_tag_type(SCp->device, 0); | ||
907 | } else { | 909 | } else { |
908 | shost_printk(KERN_WARNING, host, | 910 | shost_printk(KERN_WARNING, host, |
909 | "(%d:%d) Unexpected REJECT Message %s\n", | 911 | "(%d:%d) Unexpected REJECT Message %s\n", |
@@ -2050,12 +2052,10 @@ NCR_700_slave_configure(struct scsi_device *SDp) | |||
2050 | 2052 | ||
2051 | /* to do here: allocate memory; build a queue_full list */ | 2053 | /* to do here: allocate memory; build a queue_full list */ |
2052 | if(SDp->tagged_supported) { | 2054 | if(SDp->tagged_supported) { |
2053 | scsi_adjust_queue_depth(SDp, MSG_ORDERED_TAG, NCR_700_DEFAULT_TAGS); | 2055 | scsi_adjust_queue_depth(SDp, NCR_700_DEFAULT_TAGS); |
2054 | NCR_700_set_tag_neg_state(SDp, NCR_700_START_TAG_NEGOTIATION); | 2056 | NCR_700_set_tag_neg_state(SDp, NCR_700_START_TAG_NEGOTIATION); |
2055 | } else { | ||
2056 | /* initialise to default depth */ | ||
2057 | scsi_adjust_queue_depth(SDp, 0, SDp->host->cmd_per_lun); | ||
2058 | } | 2057 | } |
2058 | |||
2059 | if(hostdata->fast) { | 2059 | if(hostdata->fast) { |
2060 | /* Find the correct offset and period via domain validation */ | 2060 | /* Find the correct offset and period via domain validation */ |
2061 | if (!spi_initial_dv(SDp->sdev_target)) | 2061 | if (!spi_initial_dv(SDp->sdev_target)) |
@@ -2083,7 +2083,7 @@ NCR_700_change_queue_depth(struct scsi_device *SDp, int depth, int reason) | |||
2083 | if (depth > NCR_700_MAX_TAGS) | 2083 | if (depth > NCR_700_MAX_TAGS) |
2084 | depth = NCR_700_MAX_TAGS; | 2084 | depth = NCR_700_MAX_TAGS; |
2085 | 2085 | ||
2086 | scsi_adjust_queue_depth(SDp, scsi_get_tag_type(SDp), depth); | 2086 | scsi_adjust_queue_depth(SDp, depth); |
2087 | return depth; | 2087 | return depth; |
2088 | } | 2088 | } |
2089 | 2089 | ||
@@ -2101,15 +2101,16 @@ static int NCR_700_change_queue_type(struct scsi_device *SDp, int tag_type) | |||
2101 | if (change_tag) | 2101 | if (change_tag) |
2102 | scsi_target_quiesce(SDp->sdev_target); | 2102 | scsi_target_quiesce(SDp->sdev_target); |
2103 | 2103 | ||
2104 | scsi_set_tag_type(SDp, tag_type); | ||
2104 | if (!tag_type) { | 2105 | if (!tag_type) { |
2105 | /* shift back to the default unqueued number of commands | 2106 | /* shift back to the default unqueued number of commands |
2106 | * (the user can still raise this) */ | 2107 | * (the user can still raise this) */ |
2107 | scsi_adjust_queue_depth(SDp, 0, SDp->host->cmd_per_lun); | 2108 | scsi_adjust_queue_depth(SDp, SDp->host->cmd_per_lun); |
2108 | hostdata->tag_negotiated &= ~(1 << sdev_id(SDp)); | 2109 | hostdata->tag_negotiated &= ~(1 << sdev_id(SDp)); |
2109 | } else { | 2110 | } else { |
2110 | /* Here, we cleared the negotiation flag above, so this | 2111 | /* Here, we cleared the negotiation flag above, so this |
2111 | * will force the driver to renegotiate */ | 2112 | * will force the driver to renegotiate */ |
2112 | scsi_adjust_queue_depth(SDp, tag_type, SDp->queue_depth); | 2113 | scsi_adjust_queue_depth(SDp, SDp->queue_depth); |
2113 | if (change_tag) | 2114 | if (change_tag) |
2114 | NCR_700_set_tag_neg_state(SDp, NCR_700_START_TAG_NEGOTIATION); | 2115 | NCR_700_set_tag_neg_state(SDp, NCR_700_START_TAG_NEGOTIATION); |
2115 | } | 2116 | } |
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c index 64c75143c89a..5aa476b6b8a8 100644 --- a/drivers/scsi/BusLogic.c +++ b/drivers/scsi/BusLogic.c | |||
@@ -2327,12 +2327,12 @@ static int blogic_slaveconfig(struct scsi_device *dev) | |||
2327 | if (qdepth == 0) | 2327 | if (qdepth == 0) |
2328 | qdepth = BLOGIC_MAX_AUTO_TAG_DEPTH; | 2328 | qdepth = BLOGIC_MAX_AUTO_TAG_DEPTH; |
2329 | adapter->qdepth[tgt_id] = qdepth; | 2329 | adapter->qdepth[tgt_id] = qdepth; |
2330 | scsi_adjust_queue_depth(dev, MSG_SIMPLE_TAG, qdepth); | 2330 | scsi_adjust_queue_depth(dev, qdepth); |
2331 | } else { | 2331 | } else { |
2332 | adapter->tagq_ok &= ~(1 << tgt_id); | 2332 | adapter->tagq_ok &= ~(1 << tgt_id); |
2333 | qdepth = adapter->untag_qdepth; | 2333 | qdepth = adapter->untag_qdepth; |
2334 | adapter->qdepth[tgt_id] = qdepth; | 2334 | adapter->qdepth[tgt_id] = qdepth; |
2335 | scsi_adjust_queue_depth(dev, 0, qdepth); | 2335 | scsi_adjust_queue_depth(dev, qdepth); |
2336 | } | 2336 | } |
2337 | qdepth = 0; | 2337 | qdepth = 0; |
2338 | for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) | 2338 | for (tgt_id = 0; tgt_id < adapter->maxdev; tgt_id++) |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index a759cb2d4b15..41b9c68bca67 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -462,9 +462,9 @@ static int aac_slave_configure(struct scsi_device *sdev) | |||
462 | depth = 256; | 462 | depth = 256; |
463 | else if (depth < 2) | 463 | else if (depth < 2) |
464 | depth = 2; | 464 | depth = 2; |
465 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth); | 465 | scsi_adjust_queue_depth(sdev, depth); |
466 | } else | 466 | } else |
467 | scsi_adjust_queue_depth(sdev, 0, 1); | 467 | scsi_adjust_queue_depth(sdev, 1); |
468 | 468 | ||
469 | return 0; | 469 | return 0; |
470 | } | 470 | } |
@@ -504,9 +504,9 @@ static int aac_change_queue_depth(struct scsi_device *sdev, int depth, | |||
504 | depth = 256; | 504 | depth = 256; |
505 | else if (depth < 2) | 505 | else if (depth < 2) |
506 | depth = 2; | 506 | depth = 2; |
507 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth); | 507 | scsi_adjust_queue_depth(sdev, depth); |
508 | } else | 508 | } else |
509 | scsi_adjust_queue_depth(sdev, 0, 1); | 509 | scsi_adjust_queue_depth(sdev, 1); |
510 | return sdev->queue_depth; | 510 | return sdev->queue_depth; |
511 | } | 511 | } |
512 | 512 | ||
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 43761c1c46f0..ae4840e4c1c5 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c | |||
@@ -7706,7 +7706,7 @@ advansys_narrow_slave_configure(struct scsi_device *sdev, ASC_DVC_VAR *asc_dvc) | |||
7706 | asc_dvc->cfg->can_tagged_qng |= tid_bit; | 7706 | asc_dvc->cfg->can_tagged_qng |= tid_bit; |
7707 | asc_dvc->use_tagged_qng |= tid_bit; | 7707 | asc_dvc->use_tagged_qng |= tid_bit; |
7708 | } | 7708 | } |
7709 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, | 7709 | scsi_adjust_queue_depth(sdev, |
7710 | asc_dvc->max_dvc_qng[sdev->id]); | 7710 | asc_dvc->max_dvc_qng[sdev->id]); |
7711 | } | 7711 | } |
7712 | } else { | 7712 | } else { |
@@ -7714,7 +7714,6 @@ advansys_narrow_slave_configure(struct scsi_device *sdev, ASC_DVC_VAR *asc_dvc) | |||
7714 | asc_dvc->cfg->can_tagged_qng &= ~tid_bit; | 7714 | asc_dvc->cfg->can_tagged_qng &= ~tid_bit; |
7715 | asc_dvc->use_tagged_qng &= ~tid_bit; | 7715 | asc_dvc->use_tagged_qng &= ~tid_bit; |
7716 | } | 7716 | } |
7717 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | ||
7718 | } | 7717 | } |
7719 | 7718 | ||
7720 | if ((sdev->lun == 0) && | 7719 | if ((sdev->lun == 0) && |
@@ -7849,10 +7848,8 @@ advansys_wide_slave_configure(struct scsi_device *sdev, ADV_DVC_VAR *adv_dvc) | |||
7849 | } | 7848 | } |
7850 | 7849 | ||
7851 | if ((adv_dvc->tagqng_able & tidmask) && sdev->tagged_supported) { | 7850 | if ((adv_dvc->tagqng_able & tidmask) && sdev->tagged_supported) { |
7852 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, | 7851 | scsi_adjust_queue_depth(sdev, |
7853 | adv_dvc->max_dvc_qng); | 7852 | adv_dvc->max_dvc_qng); |
7854 | } else { | ||
7855 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | ||
7856 | } | 7853 | } |
7857 | } | 7854 | } |
7858 | 7855 | ||
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c index 9fd6b5618b25..80cb4fd7caaa 100644 --- a/drivers/scsi/aic7xxx/aic79xx_osm.c +++ b/drivers/scsi/aic7xxx/aic79xx_osm.c | |||
@@ -1469,11 +1469,8 @@ ahd_platform_set_tags(struct ahd_softc *ahd, struct scsi_device *sdev, | |||
1469 | 1469 | ||
1470 | switch ((dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED))) { | 1470 | switch ((dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED))) { |
1471 | case AHD_DEV_Q_BASIC: | 1471 | case AHD_DEV_Q_BASIC: |
1472 | scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TASK, | ||
1473 | dev->openings + dev->active); | ||
1474 | break; | ||
1475 | case AHD_DEV_Q_TAGGED: | 1472 | case AHD_DEV_Q_TAGGED: |
1476 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TASK, | 1473 | scsi_adjust_queue_depth(sdev, |
1477 | dev->openings + dev->active); | 1474 | dev->openings + dev->active); |
1478 | break; | 1475 | break; |
1479 | default: | 1476 | default: |
@@ -1483,7 +1480,7 @@ ahd_platform_set_tags(struct ahd_softc *ahd, struct scsi_device *sdev, | |||
1483 | * serially on the controller/device. This should | 1480 | * serially on the controller/device. This should |
1484 | * remove some latency. | 1481 | * remove some latency. |
1485 | */ | 1482 | */ |
1486 | scsi_adjust_queue_depth(sdev, 0, 1); | 1483 | scsi_adjust_queue_depth(sdev, 1); |
1487 | break; | 1484 | break; |
1488 | } | 1485 | } |
1489 | } | 1486 | } |
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c index f18b6d69d3fb..a6a27d5398dd 100644 --- a/drivers/scsi/aic7xxx/aic7xxx_osm.c +++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c | |||
@@ -1335,13 +1335,9 @@ ahc_platform_set_tags(struct ahc_softc *ahc, struct scsi_device *sdev, | |||
1335 | } | 1335 | } |
1336 | switch ((dev->flags & (AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED))) { | 1336 | switch ((dev->flags & (AHC_DEV_Q_BASIC|AHC_DEV_Q_TAGGED))) { |
1337 | case AHC_DEV_Q_BASIC: | 1337 | case AHC_DEV_Q_BASIC: |
1338 | scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TASK, | ||
1339 | dev->openings + dev->active); | ||
1340 | break; | ||
1341 | case AHC_DEV_Q_TAGGED: | 1338 | case AHC_DEV_Q_TAGGED: |
1342 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TASK, | 1339 | scsi_adjust_queue_depth(sdev, |
1343 | dev->openings + dev->active); | 1340 | dev->openings + dev->active); |
1344 | break; | ||
1345 | default: | 1341 | default: |
1346 | /* | 1342 | /* |
1347 | * We allow the OS to queue 2 untagged transactions to | 1343 | * We allow the OS to queue 2 untagged transactions to |
@@ -1349,7 +1345,7 @@ ahc_platform_set_tags(struct ahc_softc *ahc, struct scsi_device *sdev, | |||
1349 | * serially on the controller/device. This should | 1345 | * serially on the controller/device. This should |
1350 | * remove some latency. | 1346 | * remove some latency. |
1351 | */ | 1347 | */ |
1352 | scsi_adjust_queue_depth(sdev, 0, 2); | 1348 | scsi_adjust_queue_depth(sdev, 2); |
1353 | break; | 1349 | break; |
1354 | } | 1350 | } |
1355 | } | 1351 | } |
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c index 0b44fb5ee485..209f77162d06 100644 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c | |||
@@ -122,7 +122,7 @@ static int arcmsr_adjust_disk_queue_depth(struct scsi_device *sdev, | |||
122 | 122 | ||
123 | if (queue_depth > ARCMSR_MAX_CMD_PERLUN) | 123 | if (queue_depth > ARCMSR_MAX_CMD_PERLUN) |
124 | queue_depth = ARCMSR_MAX_CMD_PERLUN; | 124 | queue_depth = ARCMSR_MAX_CMD_PERLUN; |
125 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); | 125 | scsi_adjust_queue_depth(sdev, queue_depth); |
126 | return queue_depth; | 126 | return queue_depth; |
127 | } | 127 | } |
128 | 128 | ||
diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c index d8e43c81d19b..87b09cd232cc 100644 --- a/drivers/scsi/bfa/bfad_im.c +++ b/drivers/scsi/bfa/bfad_im.c | |||
@@ -776,7 +776,7 @@ bfad_thread_workq(struct bfad_s *bfad) | |||
776 | static int | 776 | static int |
777 | bfad_im_slave_configure(struct scsi_device *sdev) | 777 | bfad_im_slave_configure(struct scsi_device *sdev) |
778 | { | 778 | { |
779 | scsi_adjust_queue_depth(sdev, 0, bfa_lun_queue_depth); | 779 | scsi_adjust_queue_depth(sdev, bfa_lun_queue_depth); |
780 | return 0; | 780 | return 0; |
781 | } | 781 | } |
782 | 782 | ||
@@ -867,7 +867,6 @@ bfad_ramp_up_qdepth(struct bfad_itnim_s *itnim, struct scsi_device *sdev) | |||
867 | if (tmp_sdev->id != sdev->id) | 867 | if (tmp_sdev->id != sdev->id) |
868 | continue; | 868 | continue; |
869 | scsi_adjust_queue_depth(tmp_sdev, | 869 | scsi_adjust_queue_depth(tmp_sdev, |
870 | MSG_SIMPLE_TAG, | ||
871 | tmp_sdev->queue_depth + 1); | 870 | tmp_sdev->queue_depth + 1); |
872 | 871 | ||
873 | itnim->last_ramp_up_time = jiffies; | 872 | itnim->last_ramp_up_time = jiffies; |
diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c index f73155db80a3..44a8cc51428f 100644 --- a/drivers/scsi/csiostor/csio_scsi.c +++ b/drivers/scsi/csiostor/csio_scsi.c | |||
@@ -2241,7 +2241,7 @@ csio_slave_alloc(struct scsi_device *sdev) | |||
2241 | static int | 2241 | static int |
2242 | csio_slave_configure(struct scsi_device *sdev) | 2242 | csio_slave_configure(struct scsi_device *sdev) |
2243 | { | 2243 | { |
2244 | scsi_adjust_queue_depth(sdev, 0, csio_lun_qdepth); | 2244 | scsi_adjust_queue_depth(sdev, csio_lun_qdepth); |
2245 | return 0; | 2245 | return 0; |
2246 | } | 2246 | } |
2247 | 2247 | ||
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index 072f0ec2851e..1af8d54bcded 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c | |||
@@ -415,10 +415,8 @@ static int adpt_slave_configure(struct scsi_device * device) | |||
415 | pHba = (adpt_hba *) host->hostdata[0]; | 415 | pHba = (adpt_hba *) host->hostdata[0]; |
416 | 416 | ||
417 | if (host->can_queue && device->tagged_supported) { | 417 | if (host->can_queue && device->tagged_supported) { |
418 | scsi_adjust_queue_depth(device, MSG_SIMPLE_TAG, | 418 | scsi_adjust_queue_depth(device, |
419 | host->can_queue - 1); | 419 | host->can_queue - 1); |
420 | } else { | ||
421 | scsi_adjust_queue_depth(device, 0, 1); | ||
422 | } | 420 | } |
423 | return 0; | 421 | return 0; |
424 | } | 422 | } |
diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c index 943ad3a19661..bc0f918f1729 100644 --- a/drivers/scsi/eata.c +++ b/drivers/scsi/eata.c | |||
@@ -946,20 +946,18 @@ static int eata2x_slave_configure(struct scsi_device *dev) | |||
946 | 946 | ||
947 | if (TLDEV(dev->type) && dev->tagged_supported) { | 947 | if (TLDEV(dev->type) && dev->tagged_supported) { |
948 | if (tag_mode == TAG_SIMPLE) { | 948 | if (tag_mode == TAG_SIMPLE) { |
949 | scsi_adjust_queue_depth(dev, MSG_SIMPLE_TAG, tqd); | ||
950 | tag_suffix = ", simple tags"; | 949 | tag_suffix = ", simple tags"; |
951 | } else if (tag_mode == TAG_ORDERED) { | 950 | } else if (tag_mode == TAG_ORDERED) { |
952 | scsi_adjust_queue_depth(dev, MSG_ORDERED_TAG, tqd); | ||
953 | tag_suffix = ", ordered tags"; | 951 | tag_suffix = ", ordered tags"; |
954 | } else { | 952 | } else { |
955 | scsi_adjust_queue_depth(dev, 0, tqd); | ||
956 | tag_suffix = ", no tags"; | 953 | tag_suffix = ", no tags"; |
957 | } | 954 | } |
955 | scsi_adjust_queue_depth(dev, tqd); | ||
958 | } else if (TLDEV(dev->type) && linked_comm) { | 956 | } else if (TLDEV(dev->type) && linked_comm) { |
959 | scsi_adjust_queue_depth(dev, 0, tqd); | 957 | scsi_adjust_queue_depth(dev, tqd); |
960 | tag_suffix = ", untagged"; | 958 | tag_suffix = ", untagged"; |
961 | } else { | 959 | } else { |
962 | scsi_adjust_queue_depth(dev, 0, utqd); | 960 | scsi_adjust_queue_depth(dev, utqd); |
963 | tag_suffix = ""; | 961 | tag_suffix = ""; |
964 | } | 962 | } |
965 | 963 | ||
diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h index 20ab211983f2..1941d837f6f2 100644 --- a/drivers/scsi/esas2r/esas2r.h +++ b/drivers/scsi/esas2r/esas2r.h | |||
@@ -972,9 +972,6 @@ u8 handle_hba_ioctl(struct esas2r_adapter *a, | |||
972 | struct atto_ioctl *ioctl_hba); | 972 | struct atto_ioctl *ioctl_hba); |
973 | int esas2r_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd); | 973 | int esas2r_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd); |
974 | int esas2r_show_info(struct seq_file *m, struct Scsi_Host *sh); | 974 | int esas2r_show_info(struct seq_file *m, struct Scsi_Host *sh); |
975 | int esas2r_slave_alloc(struct scsi_device *dev); | ||
976 | int esas2r_slave_configure(struct scsi_device *dev); | ||
977 | void esas2r_slave_destroy(struct scsi_device *dev); | ||
978 | int esas2r_change_queue_depth(struct scsi_device *dev, int depth, int reason); | 975 | int esas2r_change_queue_depth(struct scsi_device *dev, int depth, int reason); |
979 | long esas2r_proc_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); | 976 | long esas2r_proc_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); |
980 | 977 | ||
diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r_main.c index a020b09ba347..30fce64faf75 100644 --- a/drivers/scsi/esas2r/esas2r_main.c +++ b/drivers/scsi/esas2r/esas2r_main.c | |||
@@ -254,9 +254,6 @@ static struct scsi_host_template driver_template = { | |||
254 | .use_clustering = ENABLE_CLUSTERING, | 254 | .use_clustering = ENABLE_CLUSTERING, |
255 | .emulated = 0, | 255 | .emulated = 0, |
256 | .proc_name = ESAS2R_DRVR_NAME, | 256 | .proc_name = ESAS2R_DRVR_NAME, |
257 | .slave_configure = esas2r_slave_configure, | ||
258 | .slave_alloc = esas2r_slave_alloc, | ||
259 | .slave_destroy = esas2r_slave_destroy, | ||
260 | .change_queue_depth = esas2r_change_queue_depth, | 257 | .change_queue_depth = esas2r_change_queue_depth, |
261 | .change_queue_type = scsi_change_queue_type, | 258 | .change_queue_type = scsi_change_queue_type, |
262 | .max_sectors = 0xFFFF, | 259 | .max_sectors = 0xFFFF, |
@@ -1264,35 +1261,11 @@ int esas2r_change_queue_depth(struct scsi_device *dev, int depth, int reason) | |||
1264 | { | 1261 | { |
1265 | esas2r_log(ESAS2R_LOG_INFO, "change_queue_depth %p, %d", dev, depth); | 1262 | esas2r_log(ESAS2R_LOG_INFO, "change_queue_depth %p, %d", dev, depth); |
1266 | 1263 | ||
1267 | scsi_adjust_queue_depth(dev, scsi_get_tag_type(dev), depth); | 1264 | scsi_adjust_queue_depth(dev, depth); |
1268 | 1265 | ||
1269 | return dev->queue_depth; | 1266 | return dev->queue_depth; |
1270 | } | 1267 | } |
1271 | 1268 | ||
1272 | int esas2r_slave_alloc(struct scsi_device *dev) | ||
1273 | { | ||
1274 | return 0; | ||
1275 | } | ||
1276 | |||
1277 | int esas2r_slave_configure(struct scsi_device *dev) | ||
1278 | { | ||
1279 | esas2r_log_dev(ESAS2R_LOG_INFO, &(dev->sdev_gendev), | ||
1280 | "esas2r_slave_configure()"); | ||
1281 | |||
1282 | if (dev->tagged_supported) | ||
1283 | scsi_adjust_queue_depth(dev, MSG_SIMPLE_TAG, cmd_per_lun); | ||
1284 | else | ||
1285 | scsi_adjust_queue_depth(dev, 0, cmd_per_lun); | ||
1286 | |||
1287 | return 0; | ||
1288 | } | ||
1289 | |||
1290 | void esas2r_slave_destroy(struct scsi_device *dev) | ||
1291 | { | ||
1292 | esas2r_log_dev(ESAS2R_LOG_INFO, &(dev->sdev_gendev), | ||
1293 | "esas2r_slave_destroy()"); | ||
1294 | } | ||
1295 | |||
1296 | void esas2r_log_request_failure(struct esas2r_adapter *a, | 1269 | void esas2r_log_request_failure(struct esas2r_adapter *a, |
1297 | struct esas2r_request *rq) | 1270 | struct esas2r_request *rq) |
1298 | { | 1271 | { |
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c index 66b6ce10b259..38c23e0b73af 100644 --- a/drivers/scsi/esp_scsi.c +++ b/drivers/scsi/esp_scsi.c | |||
@@ -2402,27 +2402,14 @@ static int esp_slave_configure(struct scsi_device *dev) | |||
2402 | { | 2402 | { |
2403 | struct esp *esp = shost_priv(dev->host); | 2403 | struct esp *esp = shost_priv(dev->host); |
2404 | struct esp_target_data *tp = &esp->target[dev->id]; | 2404 | struct esp_target_data *tp = &esp->target[dev->id]; |
2405 | int goal_tags, queue_depth; | ||
2406 | |||
2407 | goal_tags = 0; | ||
2408 | 2405 | ||
2409 | if (dev->tagged_supported) { | 2406 | if (dev->tagged_supported) { |
2410 | /* XXX make this configurable somehow XXX */ | 2407 | /* XXX make this configurable somehow XXX */ |
2411 | goal_tags = ESP_DEFAULT_TAGS; | 2408 | int goal_tags = min(ESP_DEFAULT_TAGS, ESP_MAX_TAG); |
2412 | 2409 | ||
2413 | if (goal_tags > ESP_MAX_TAG) | 2410 | scsi_adjust_queue_depth(dev, goal_tags); |
2414 | goal_tags = ESP_MAX_TAG; | ||
2415 | } | 2411 | } |
2416 | 2412 | ||
2417 | queue_depth = goal_tags; | ||
2418 | if (queue_depth < dev->host->cmd_per_lun) | ||
2419 | queue_depth = dev->host->cmd_per_lun; | ||
2420 | |||
2421 | if (goal_tags) { | ||
2422 | scsi_adjust_queue_depth(dev, MSG_ORDERED_TAG, queue_depth); | ||
2423 | } else { | ||
2424 | scsi_adjust_queue_depth(dev, 0, queue_depth); | ||
2425 | } | ||
2426 | tp->flags |= ESP_TGT_DISCONNECT; | 2413 | tp->flags |= ESP_TGT_DISCONNECT; |
2427 | 2414 | ||
2428 | if (!spi_initial_dv(dev->sdev_target)) | 2415 | if (!spi_initial_dv(dev->sdev_target)) |
diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c index 2a6c98b7d4db..0f29e3f89b26 100644 --- a/drivers/scsi/fnic/fnic_main.c +++ b/drivers/scsi/fnic/fnic_main.c | |||
@@ -100,7 +100,7 @@ static int fnic_slave_alloc(struct scsi_device *sdev) | |||
100 | if (!rport || fc_remote_port_chkready(rport)) | 100 | if (!rport || fc_remote_port_chkready(rport)) |
101 | return -ENXIO; | 101 | return -ENXIO; |
102 | 102 | ||
103 | scsi_adjust_queue_depth(sdev, 0, fnic_max_qdepth); | 103 | scsi_adjust_queue_depth(sdev, fnic_max_qdepth); |
104 | return 0; | 104 | return 0; |
105 | } | 105 | } |
106 | 106 | ||
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index 0f1ae13ce7c7..4ebbeae161e2 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c | |||
@@ -4661,7 +4661,6 @@ static void gdth_flush(gdth_ha_str *ha) | |||
4661 | /* configure lun */ | 4661 | /* configure lun */ |
4662 | static int gdth_slave_configure(struct scsi_device *sdev) | 4662 | static int gdth_slave_configure(struct scsi_device *sdev) |
4663 | { | 4663 | { |
4664 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | ||
4665 | sdev->skip_ms_page_3f = 1; | 4664 | sdev->skip_ms_page_3f = 1; |
4666 | sdev->skip_ms_page_8 = 1; | 4665 | sdev->skip_ms_page_8 = 1; |
4667 | return 0; | 4666 | return 0; |
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index cef5d49b59cd..18ea2e16e34f 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c | |||
@@ -4165,7 +4165,7 @@ static int hpsa_change_queue_depth(struct scsi_device *sdev, | |||
4165 | else | 4165 | else |
4166 | if (qdepth > h->nr_cmds) | 4166 | if (qdepth > h->nr_cmds) |
4167 | qdepth = h->nr_cmds; | 4167 | qdepth = h->nr_cmds; |
4168 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 4168 | scsi_adjust_queue_depth(sdev, qdepth); |
4169 | return sdev->queue_depth; | 4169 | return sdev->queue_depth; |
4170 | } | 4170 | } |
4171 | 4171 | ||
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index dedb62c21b29..151893148abd 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c | |||
@@ -1127,7 +1127,7 @@ static int hptiop_adjust_disk_queue_depth(struct scsi_device *sdev, | |||
1127 | 1127 | ||
1128 | if (queue_depth > hba->max_requests) | 1128 | if (queue_depth > hba->max_requests) |
1129 | queue_depth = hba->max_requests; | 1129 | queue_depth = hba->max_requests; |
1130 | scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth); | 1130 | scsi_adjust_queue_depth(sdev, queue_depth); |
1131 | return queue_depth; | 1131 | return queue_depth; |
1132 | } | 1132 | } |
1133 | 1133 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index 4723d89df5ac..147b80e07b00 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
@@ -2887,12 +2887,6 @@ static int ibmvfc_slave_configure(struct scsi_device *sdev) | |||
2887 | spin_lock_irqsave(shost->host_lock, flags); | 2887 | spin_lock_irqsave(shost->host_lock, flags); |
2888 | if (sdev->type == TYPE_DISK) | 2888 | if (sdev->type == TYPE_DISK) |
2889 | sdev->allow_restart = 1; | 2889 | sdev->allow_restart = 1; |
2890 | |||
2891 | if (sdev->tagged_supported) | ||
2892 | scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, | ||
2893 | sdev->queue_depth); | ||
2894 | else | ||
2895 | scsi_adjust_queue_depth(sdev, 0, sdev->queue_depth); | ||
2896 | spin_unlock_irqrestore(shost->host_lock, flags); | 2890 | spin_unlock_irqrestore(shost->host_lock, flags); |
2897 | return 0; | 2891 | return 0; |
2898 | } | 2892 | } |
@@ -2915,7 +2909,7 @@ static int ibmvfc_change_queue_depth(struct scsi_device *sdev, int qdepth, | |||
2915 | if (qdepth > IBMVFC_MAX_CMDS_PER_LUN) | 2909 | if (qdepth > IBMVFC_MAX_CMDS_PER_LUN) |
2916 | qdepth = IBMVFC_MAX_CMDS_PER_LUN; | 2910 | qdepth = IBMVFC_MAX_CMDS_PER_LUN; |
2917 | 2911 | ||
2918 | scsi_adjust_queue_depth(sdev, 0, qdepth); | 2912 | scsi_adjust_queue_depth(sdev, qdepth); |
2919 | return sdev->queue_depth; | 2913 | return sdev->queue_depth; |
2920 | } | 2914 | } |
2921 | 2915 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 7b23f21f22f1..e8c3cdf0d03b 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
@@ -1929,7 +1929,6 @@ static int ibmvscsi_slave_configure(struct scsi_device *sdev) | |||
1929 | blk_queue_rq_timeout(sdev->request_queue, 120 * HZ); | 1929 | blk_queue_rq_timeout(sdev->request_queue, 120 * HZ); |
1930 | } | 1930 | } |
1931 | spin_unlock_irqrestore(shost->host_lock, lock_flags); | 1931 | spin_unlock_irqrestore(shost->host_lock, lock_flags); |
1932 | scsi_adjust_queue_depth(sdev, 0, shost->cmd_per_lun); | ||
1933 | return 0; | 1932 | return 0; |
1934 | } | 1933 | } |
1935 | 1934 | ||
@@ -1951,7 +1950,7 @@ static int ibmvscsi_change_queue_depth(struct scsi_device *sdev, int qdepth, | |||
1951 | if (qdepth > IBMVSCSI_MAX_CMDS_PER_LUN) | 1950 | if (qdepth > IBMVSCSI_MAX_CMDS_PER_LUN) |
1952 | qdepth = IBMVSCSI_MAX_CMDS_PER_LUN; | 1951 | qdepth = IBMVSCSI_MAX_CMDS_PER_LUN; |
1953 | 1952 | ||
1954 | scsi_adjust_queue_depth(sdev, 0, qdepth); | 1953 | scsi_adjust_queue_depth(sdev, qdepth); |
1955 | return sdev->queue_depth; | 1954 | return sdev->queue_depth; |
1956 | } | 1955 | } |
1957 | 1956 | ||
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index f84fcb9a6ed7..256ef98f5c29 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -4344,7 +4344,7 @@ static int ipr_change_queue_depth(struct scsi_device *sdev, int qdepth, | |||
4344 | qdepth = IPR_MAX_CMD_PER_ATA_LUN; | 4344 | qdepth = IPR_MAX_CMD_PER_ATA_LUN; |
4345 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 4345 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
4346 | 4346 | ||
4347 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 4347 | scsi_adjust_queue_depth(sdev, qdepth); |
4348 | return sdev->queue_depth; | 4348 | return sdev->queue_depth; |
4349 | } | 4349 | } |
4350 | 4350 | ||
@@ -4751,10 +4751,10 @@ static int ipr_slave_configure(struct scsi_device *sdev) | |||
4751 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 4751 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
4752 | 4752 | ||
4753 | if (ap) { | 4753 | if (ap) { |
4754 | scsi_adjust_queue_depth(sdev, 0, IPR_MAX_CMD_PER_ATA_LUN); | 4754 | scsi_adjust_queue_depth(sdev, IPR_MAX_CMD_PER_ATA_LUN); |
4755 | ata_sas_slave_configure(sdev, ap); | 4755 | ata_sas_slave_configure(sdev, ap); |
4756 | } else | 4756 | } |
4757 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | 4757 | |
4758 | if (ioa_cfg->sis64) | 4758 | if (ioa_cfg->sis64) |
4759 | sdev_printk(KERN_INFO, sdev, "Resource path: %s\n", | 4759 | sdev_printk(KERN_INFO, sdev, "Resource path: %s\n", |
4760 | ipr_format_res_path(ioa_cfg, | 4760 | ipr_format_res_path(ioa_cfg, |
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index e5afc3884d74..454741a8da45 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c | |||
@@ -1210,7 +1210,7 @@ ips_slave_configure(struct scsi_device * SDptr) | |||
1210 | min = ha->max_cmds / 2; | 1210 | min = ha->max_cmds / 2; |
1211 | if (ha->enq->ucLogDriveCount <= 2) | 1211 | if (ha->enq->ucLogDriveCount <= 2) |
1212 | min = ha->max_cmds - 1; | 1212 | min = ha->max_cmds - 1; |
1213 | scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, min); | 1213 | scsi_adjust_queue_depth(SDptr, min); |
1214 | } | 1214 | } |
1215 | 1215 | ||
1216 | SDptr->skip_ms_page_8 = 1; | 1216 | SDptr->skip_ms_page_8 = 1; |
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c index d4bb642f2681..bf954ee050f8 100644 --- a/drivers/scsi/libfc/fc_fcp.c +++ b/drivers/scsi/libfc/fc_fcp.c | |||
@@ -2160,7 +2160,7 @@ int fc_slave_alloc(struct scsi_device *sdev) | |||
2160 | if (!rport || fc_remote_port_chkready(rport)) | 2160 | if (!rport || fc_remote_port_chkready(rport)) |
2161 | return -ENXIO; | 2161 | return -ENXIO; |
2162 | 2162 | ||
2163 | scsi_adjust_queue_depth(sdev, 0, FC_FCP_DFLT_QUEUE_DEPTH); | 2163 | scsi_adjust_queue_depth(sdev, FC_FCP_DFLT_QUEUE_DEPTH); |
2164 | return 0; | 2164 | return 0; |
2165 | } | 2165 | } |
2166 | EXPORT_SYMBOL(fc_slave_alloc); | 2166 | EXPORT_SYMBOL(fc_slave_alloc); |
@@ -2175,13 +2175,13 @@ int fc_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason) | |||
2175 | { | 2175 | { |
2176 | switch (reason) { | 2176 | switch (reason) { |
2177 | case SCSI_QDEPTH_DEFAULT: | 2177 | case SCSI_QDEPTH_DEFAULT: |
2178 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 2178 | scsi_adjust_queue_depth(sdev, qdepth); |
2179 | break; | 2179 | break; |
2180 | case SCSI_QDEPTH_QFULL: | 2180 | case SCSI_QDEPTH_QFULL: |
2181 | scsi_track_queue_full(sdev, qdepth); | 2181 | scsi_track_queue_full(sdev, qdepth); |
2182 | break; | 2182 | break; |
2183 | case SCSI_QDEPTH_RAMP_UP: | 2183 | case SCSI_QDEPTH_RAMP_UP: |
2184 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 2184 | scsi_adjust_queue_depth(sdev, qdepth); |
2185 | break; | 2185 | break; |
2186 | default: | 2186 | default: |
2187 | return -EOPNOTSUPP; | 2187 | return -EOPNOTSUPP; |
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 0d8bc6c66650..d521624dedfb 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -1775,13 +1775,13 @@ int iscsi_change_queue_depth(struct scsi_device *sdev, int depth, int reason) | |||
1775 | { | 1775 | { |
1776 | switch (reason) { | 1776 | switch (reason) { |
1777 | case SCSI_QDEPTH_DEFAULT: | 1777 | case SCSI_QDEPTH_DEFAULT: |
1778 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth); | 1778 | scsi_adjust_queue_depth(sdev, depth); |
1779 | break; | 1779 | break; |
1780 | case SCSI_QDEPTH_QFULL: | 1780 | case SCSI_QDEPTH_QFULL: |
1781 | scsi_track_queue_full(sdev, depth); | 1781 | scsi_track_queue_full(sdev, depth); |
1782 | break; | 1782 | break; |
1783 | case SCSI_QDEPTH_RAMP_UP: | 1783 | case SCSI_QDEPTH_RAMP_UP: |
1784 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth); | 1784 | scsi_adjust_queue_depth(sdev, depth); |
1785 | break; | 1785 | break; |
1786 | default: | 1786 | default: |
1787 | return -EOPNOTSUPP; | 1787 | return -EOPNOTSUPP; |
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c index eee21a060d93..56d698af073d 100644 --- a/drivers/scsi/libsas/sas_scsi_host.c +++ b/drivers/scsi/libsas/sas_scsi_host.c | |||
@@ -940,13 +940,13 @@ int sas_slave_configure(struct scsi_device *scsi_dev) | |||
940 | sas_read_port_mode_page(scsi_dev); | 940 | sas_read_port_mode_page(scsi_dev); |
941 | 941 | ||
942 | if (scsi_dev->tagged_supported) { | 942 | if (scsi_dev->tagged_supported) { |
943 | scsi_adjust_queue_depth(scsi_dev, MSG_SIMPLE_TAG, SAS_DEF_QD); | 943 | scsi_adjust_queue_depth(scsi_dev, SAS_DEF_QD); |
944 | } else { | 944 | } else { |
945 | SAS_DPRINTK("device %llx, LUN %llx doesn't support " | 945 | SAS_DPRINTK("device %llx, LUN %llx doesn't support " |
946 | "TCQ\n", SAS_ADDR(dev->sas_addr), | 946 | "TCQ\n", SAS_ADDR(dev->sas_addr), |
947 | scsi_dev->lun); | 947 | scsi_dev->lun); |
948 | scsi_dev->tagged_supported = 0; | 948 | scsi_dev->tagged_supported = 0; |
949 | scsi_adjust_queue_depth(scsi_dev, 0, 1); | 949 | scsi_adjust_queue_depth(scsi_dev, 1); |
950 | } | 950 | } |
951 | 951 | ||
952 | scsi_dev->allow_restart = 1; | 952 | scsi_dev->allow_restart = 1; |
@@ -967,7 +967,7 @@ int sas_change_queue_depth(struct scsi_device *sdev, int depth, int reason) | |||
967 | case SCSI_QDEPTH_RAMP_UP: | 967 | case SCSI_QDEPTH_RAMP_UP: |
968 | if (!sdev->tagged_supported) | 968 | if (!sdev->tagged_supported) |
969 | depth = 1; | 969 | depth = 1; |
970 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth); | 970 | scsi_adjust_queue_depth(sdev, depth); |
971 | break; | 971 | break; |
972 | case SCSI_QDEPTH_QFULL: | 972 | case SCSI_QDEPTH_QFULL: |
973 | scsi_track_queue_full(sdev, depth); | 973 | scsi_track_queue_full(sdev, depth); |
@@ -979,19 +979,11 @@ int sas_change_queue_depth(struct scsi_device *sdev, int depth, int reason) | |||
979 | return depth; | 979 | return depth; |
980 | } | 980 | } |
981 | 981 | ||
982 | int sas_change_queue_type(struct scsi_device *scsi_dev, int qt) | 982 | int sas_change_queue_type(struct scsi_device *scsi_dev, int type) |
983 | { | 983 | { |
984 | struct domain_device *dev = sdev_to_domain_dev(scsi_dev); | 984 | if (dev_is_sata(sdev_to_domain_dev(scsi_dev))) |
985 | |||
986 | if (dev_is_sata(dev)) | ||
987 | return -EINVAL; | 985 | return -EINVAL; |
988 | 986 | return scsi_change_queue_type(scsi_dev, type); | |
989 | if (!scsi_dev->tagged_supported) | ||
990 | return 0; | ||
991 | |||
992 | scsi_adjust_queue_depth(scsi_dev, qt, scsi_dev->queue_depth); | ||
993 | |||
994 | return qt; | ||
995 | } | 987 | } |
996 | 988 | ||
997 | int sas_bios_param(struct scsi_device *scsi_dev, | 989 | int sas_bios_param(struct scsi_device *scsi_dev, |
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index a24106a70968..8533ee9b818d 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c | |||
@@ -320,7 +320,7 @@ lpfc_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason) | |||
320 | case SCSI_QDEPTH_DEFAULT: | 320 | case SCSI_QDEPTH_DEFAULT: |
321 | /* change request from sysfs, fall through */ | 321 | /* change request from sysfs, fall through */ |
322 | case SCSI_QDEPTH_RAMP_UP: | 322 | case SCSI_QDEPTH_RAMP_UP: |
323 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 323 | scsi_adjust_queue_depth(sdev, qdepth); |
324 | break; | 324 | break; |
325 | case SCSI_QDEPTH_QFULL: | 325 | case SCSI_QDEPTH_QFULL: |
326 | if (scsi_track_queue_full(sdev, qdepth) == 0) | 326 | if (scsi_track_queue_full(sdev, qdepth) == 0) |
@@ -5598,7 +5598,7 @@ lpfc_slave_configure(struct scsi_device *sdev) | |||
5598 | struct lpfc_vport *vport = (struct lpfc_vport *) sdev->host->hostdata; | 5598 | struct lpfc_vport *vport = (struct lpfc_vport *) sdev->host->hostdata; |
5599 | struct lpfc_hba *phba = vport->phba; | 5599 | struct lpfc_hba *phba = vport->phba; |
5600 | 5600 | ||
5601 | scsi_adjust_queue_depth(sdev, 0, vport->cfg_lun_queue_depth); | 5601 | scsi_adjust_queue_depth(sdev, vport->cfg_lun_queue_depth); |
5602 | 5602 | ||
5603 | if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) { | 5603 | if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) { |
5604 | lpfc_sli_handle_fast_ring_event(phba, | 5604 | lpfc_sli_handle_fast_ring_event(phba, |
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c index 531dce419c18..6b077d839f2b 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c | |||
@@ -349,7 +349,7 @@ static int megaraid_change_queue_depth(struct scsi_device *sdev, int qdepth, | |||
349 | 349 | ||
350 | if (qdepth > MBOX_MAX_SCSI_CMDS) | 350 | if (qdepth > MBOX_MAX_SCSI_CMDS) |
351 | qdepth = MBOX_MAX_SCSI_CMDS; | 351 | qdepth = MBOX_MAX_SCSI_CMDS; |
352 | scsi_adjust_queue_depth(sdev, 0, qdepth); | 352 | scsi_adjust_queue_depth(sdev, qdepth); |
353 | return sdev->queue_depth; | 353 | return sdev->queue_depth; |
354 | } | 354 | } |
355 | 355 | ||
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index 5640ad1c8214..107244cebd22 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c | |||
@@ -2594,8 +2594,7 @@ static int megasas_change_queue_depth(struct scsi_device *sdev, | |||
2594 | 2594 | ||
2595 | if (queue_depth > sdev->host->can_queue) | 2595 | if (queue_depth > sdev->host->can_queue) |
2596 | queue_depth = sdev->host->can_queue; | 2596 | queue_depth = sdev->host->can_queue; |
2597 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), | 2597 | scsi_adjust_queue_depth(sdev, queue_depth); |
2598 | queue_depth); | ||
2599 | 2598 | ||
2600 | return queue_depth; | 2599 | return queue_depth; |
2601 | } | 2600 | } |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 69dc166b52bc..42fef914d441 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c | |||
@@ -1222,7 +1222,7 @@ _scsih_adjust_queue_depth(struct scsi_device *sdev, int qdepth) | |||
1222 | max_depth = 1; | 1222 | max_depth = 1; |
1223 | if (qdepth > max_depth) | 1223 | if (qdepth > max_depth) |
1224 | qdepth = max_depth; | 1224 | qdepth = max_depth; |
1225 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 1225 | scsi_adjust_queue_depth(sdev, qdepth); |
1226 | } | 1226 | } |
1227 | 1227 | ||
1228 | /** | 1228 | /** |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index d3abf254341d..b23c2e7588e5 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c | |||
@@ -1090,7 +1090,7 @@ _scsih_adjust_queue_depth(struct scsi_device *sdev, int qdepth) | |||
1090 | max_depth = 1; | 1090 | max_depth = 1; |
1091 | if (qdepth > max_depth) | 1091 | if (qdepth > max_depth) |
1092 | qdepth = max_depth; | 1092 | qdepth = max_depth; |
1093 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 1093 | scsi_adjust_queue_depth(sdev, qdepth); |
1094 | } | 1094 | } |
1095 | 1095 | ||
1096 | /** | 1096 | /** |
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c index a7305ffc359d..9c331b7bfdcd 100644 --- a/drivers/scsi/ncr53c8xx.c +++ b/drivers/scsi/ncr53c8xx.c | |||
@@ -7997,10 +7997,7 @@ static int ncr53c8xx_slave_configure(struct scsi_device *device) | |||
7997 | if (depth_to_use > MAX_TAGS) | 7997 | if (depth_to_use > MAX_TAGS) |
7998 | depth_to_use = MAX_TAGS; | 7998 | depth_to_use = MAX_TAGS; |
7999 | 7999 | ||
8000 | scsi_adjust_queue_depth(device, | 8000 | scsi_adjust_queue_depth(device, depth_to_use); |
8001 | (device->tagged_supported ? | ||
8002 | MSG_SIMPLE_TAG : 0), | ||
8003 | depth_to_use); | ||
8004 | 8001 | ||
8005 | /* | 8002 | /* |
8006 | ** Since the queue depth is not tunable under Linux, | 8003 | ** Since the queue depth is not tunable under Linux, |
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index 71f9f59b13c6..d8b9ba251fbd 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c | |||
@@ -249,14 +249,11 @@ static int pmcraid_slave_configure(struct scsi_device *scsi_dev) | |||
249 | PMCRAID_VSET_MAX_SECTORS); | 249 | PMCRAID_VSET_MAX_SECTORS); |
250 | } | 250 | } |
251 | 251 | ||
252 | if (scsi_dev->tagged_supported && | 252 | /* |
253 | (RES_IS_GSCSI(res->cfg_entry) || RES_IS_VSET(res->cfg_entry))) { | 253 | * We never want to report TCQ support for these types of devices. |
254 | scsi_adjust_queue_depth(scsi_dev, MSG_SIMPLE_TAG, | 254 | */ |
255 | scsi_dev->host->cmd_per_lun); | 255 | if (!RES_IS_GSCSI(res->cfg_entry) && !RES_IS_VSET(res->cfg_entry)) |
256 | } else { | 256 | scsi_dev->tagged_supported = 0; |
257 | scsi_adjust_queue_depth(scsi_dev, 0, | ||
258 | scsi_dev->host->cmd_per_lun); | ||
259 | } | ||
260 | 257 | ||
261 | return 0; | 258 | return 0; |
262 | } | 259 | } |
@@ -302,35 +299,12 @@ static int pmcraid_change_queue_depth(struct scsi_device *scsi_dev, int depth, | |||
302 | if (depth > PMCRAID_MAX_CMD_PER_LUN) | 299 | if (depth > PMCRAID_MAX_CMD_PER_LUN) |
303 | depth = PMCRAID_MAX_CMD_PER_LUN; | 300 | depth = PMCRAID_MAX_CMD_PER_LUN; |
304 | 301 | ||
305 | scsi_adjust_queue_depth(scsi_dev, scsi_get_tag_type(scsi_dev), depth); | 302 | scsi_adjust_queue_depth(scsi_dev, depth); |
306 | 303 | ||
307 | return scsi_dev->queue_depth; | 304 | return scsi_dev->queue_depth; |
308 | } | 305 | } |
309 | 306 | ||
310 | /** | 307 | /** |
311 | * pmcraid_change_queue_type - Change the device's queue type | ||
312 | * @scsi_dev: scsi device struct | ||
313 | * @tag: type of tags to use | ||
314 | * | ||
315 | * Return value: | ||
316 | * actual queue type set | ||
317 | */ | ||
318 | static int pmcraid_change_queue_type(struct scsi_device *scsi_dev, int tag) | ||
319 | { | ||
320 | struct pmcraid_resource_entry *res; | ||
321 | |||
322 | res = (struct pmcraid_resource_entry *)scsi_dev->hostdata; | ||
323 | if (res && scsi_dev->tagged_supported && | ||
324 | (RES_IS_GSCSI(res->cfg_entry) || RES_IS_VSET(res->cfg_entry))) | ||
325 | tag = scsi_change_queue_type(scsi_dev, tag); | ||
326 | else | ||
327 | tag = 0; | ||
328 | |||
329 | return tag; | ||
330 | } | ||
331 | |||
332 | |||
333 | /** | ||
334 | * pmcraid_init_cmdblk - initializes a command block | 308 | * pmcraid_init_cmdblk - initializes a command block |
335 | * | 309 | * |
336 | * @cmd: pointer to struct pmcraid_cmd to be initialized | 310 | * @cmd: pointer to struct pmcraid_cmd to be initialized |
@@ -4285,7 +4259,7 @@ static struct scsi_host_template pmcraid_host_template = { | |||
4285 | .slave_configure = pmcraid_slave_configure, | 4259 | .slave_configure = pmcraid_slave_configure, |
4286 | .slave_destroy = pmcraid_slave_destroy, | 4260 | .slave_destroy = pmcraid_slave_destroy, |
4287 | .change_queue_depth = pmcraid_change_queue_depth, | 4261 | .change_queue_depth = pmcraid_change_queue_depth, |
4288 | .change_queue_type = pmcraid_change_queue_type, | 4262 | .change_queue_type = scsi_change_queue_type, |
4289 | .can_queue = PMCRAID_MAX_IO_CMD, | 4263 | .can_queue = PMCRAID_MAX_IO_CMD, |
4290 | .this_id = -1, | 4264 | .this_id = -1, |
4291 | .sg_tablesize = PMCRAID_MAX_IOADLS, | 4265 | .sg_tablesize = PMCRAID_MAX_IOADLS, |
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c index 158020522dfb..adedb6ef8eec 100644 --- a/drivers/scsi/qla1280.c +++ b/drivers/scsi/qla1280.c | |||
@@ -1224,10 +1224,9 @@ qla1280_slave_configure(struct scsi_device *device) | |||
1224 | 1224 | ||
1225 | if (device->tagged_supported && | 1225 | if (device->tagged_supported && |
1226 | (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { | 1226 | (ha->bus_settings[bus].qtag_enables & (BIT_0 << target))) { |
1227 | scsi_adjust_queue_depth(device, MSG_ORDERED_TAG, | 1227 | scsi_adjust_queue_depth(device, ha->bus_settings[bus].hiwat); |
1228 | ha->bus_settings[bus].hiwat); | ||
1229 | } else { | 1228 | } else { |
1230 | scsi_adjust_queue_depth(device, 0, default_depth); | 1229 | scsi_adjust_queue_depth(device, default_depth); |
1231 | } | 1230 | } |
1232 | 1231 | ||
1233 | nv->bus[bus].target[target].parameter.enable_sync = device->sdtr; | 1232 | nv->bus[bus].target[target].parameter.enable_sync = device->sdtr; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index eb0465305f8d..33166ebec7d8 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1405,7 +1405,7 @@ qla2xxx_slave_configure(struct scsi_device *sdev) | |||
1405 | if (IS_T10_PI_CAPABLE(vha->hw)) | 1405 | if (IS_T10_PI_CAPABLE(vha->hw)) |
1406 | blk_queue_update_dma_alignment(sdev->request_queue, 0x7); | 1406 | blk_queue_update_dma_alignment(sdev->request_queue, 0x7); |
1407 | 1407 | ||
1408 | scsi_adjust_queue_depth(sdev, 0, req->max_q_depth); | 1408 | scsi_adjust_queue_depth(sdev, req->max_q_depth); |
1409 | return 0; | 1409 | return 0; |
1410 | } | 1410 | } |
1411 | 1411 | ||
@@ -1440,7 +1440,7 @@ static void qla2x00_adjust_sdev_qdepth_up(struct scsi_device *sdev, int qdepth) | |||
1440 | if (req->max_q_depth <= sdev->queue_depth || req->max_q_depth < qdepth) | 1440 | if (req->max_q_depth <= sdev->queue_depth || req->max_q_depth < qdepth) |
1441 | return; | 1441 | return; |
1442 | 1442 | ||
1443 | scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, qdepth); | 1443 | scsi_adjust_queue_depth(sdev, qdepth); |
1444 | 1444 | ||
1445 | ql_dbg(ql_dbg_io, vha, 0x302a, | 1445 | ql_dbg(ql_dbg_io, vha, 0x302a, |
1446 | "Queue depth adjusted-up to %d for nexus=%ld:%d:%llu.\n", | 1446 | "Queue depth adjusted-up to %d for nexus=%ld:%d:%llu.\n", |
@@ -1452,7 +1452,7 @@ qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason) | |||
1452 | { | 1452 | { |
1453 | switch (reason) { | 1453 | switch (reason) { |
1454 | case SCSI_QDEPTH_DEFAULT: | 1454 | case SCSI_QDEPTH_DEFAULT: |
1455 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 1455 | scsi_adjust_queue_depth(sdev, qdepth); |
1456 | break; | 1456 | break; |
1457 | case SCSI_QDEPTH_QFULL: | 1457 | case SCSI_QDEPTH_QFULL: |
1458 | qla2x00_handle_queue_full(sdev, qdepth); | 1458 | qla2x00_handle_queue_full(sdev, qdepth); |
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index f3119c144e29..784f59e55510 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c | |||
@@ -9064,7 +9064,7 @@ static int qla4xxx_slave_alloc(struct scsi_device *sdev) | |||
9064 | if (ql4xmaxqdepth != 0 && ql4xmaxqdepth <= 0xffffU) | 9064 | if (ql4xmaxqdepth != 0 && ql4xmaxqdepth <= 0xffffU) |
9065 | queue_depth = ql4xmaxqdepth; | 9065 | queue_depth = ql4xmaxqdepth; |
9066 | 9066 | ||
9067 | scsi_adjust_queue_depth(sdev, 0, queue_depth); | 9067 | scsi_adjust_queue_depth(sdev, queue_depth); |
9068 | return 0; | 9068 | return 0; |
9069 | } | 9069 | } |
9070 | 9070 | ||
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index a3426f1bf0dd..106fa2f886d2 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c | |||
@@ -744,8 +744,6 @@ void scsi_finish_command(struct scsi_cmnd *cmd) | |||
744 | /** | 744 | /** |
745 | * scsi_adjust_queue_depth - Let low level drivers change a device's queue depth | 745 | * scsi_adjust_queue_depth - Let low level drivers change a device's queue depth |
746 | * @sdev: SCSI Device in question | 746 | * @sdev: SCSI Device in question |
747 | * @tagged: Do we use tagged queueing (non-0) or do we treat | ||
748 | * this device as an untagged device (0) | ||
749 | * @tags: Number of tags allowed if tagged queueing enabled, | 747 | * @tags: Number of tags allowed if tagged queueing enabled, |
750 | * or number of commands the low level driver can | 748 | * or number of commands the low level driver can |
751 | * queue up in non-tagged mode (as per cmd_per_lun). | 749 | * queue up in non-tagged mode (as per cmd_per_lun). |
@@ -759,7 +757,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd) | |||
759 | * currently active and whether or not it even has the | 757 | * currently active and whether or not it even has the |
760 | * command blocks built yet. | 758 | * command blocks built yet. |
761 | */ | 759 | */ |
762 | void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags) | 760 | void scsi_adjust_queue_depth(struct scsi_device *sdev, int tags) |
763 | { | 761 | { |
764 | unsigned long flags; | 762 | unsigned long flags; |
765 | 763 | ||
@@ -787,20 +785,6 @@ void scsi_adjust_queue_depth(struct scsi_device *sdev, int tagged, int tags) | |||
787 | } | 785 | } |
788 | 786 | ||
789 | sdev->queue_depth = tags; | 787 | sdev->queue_depth = tags; |
790 | switch (tagged) { | ||
791 | case 0: | ||
792 | sdev->simple_tags = 0; | ||
793 | break; | ||
794 | case MSG_ORDERED_TAG: | ||
795 | case MSG_SIMPLE_TAG: | ||
796 | sdev->simple_tags = 1; | ||
797 | break; | ||
798 | default: | ||
799 | sdev->simple_tags = 0; | ||
800 | sdev_printk(KERN_WARNING, sdev, | ||
801 | "scsi_adjust_queue_depth, bad queue type, " | ||
802 | "disabled\n"); | ||
803 | } | ||
804 | out: | 788 | out: |
805 | spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags); | 789 | spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags); |
806 | } | 790 | } |
@@ -848,11 +832,12 @@ int scsi_track_queue_full(struct scsi_device *sdev, int depth) | |||
848 | return 0; | 832 | return 0; |
849 | if (sdev->last_queue_full_depth < 8) { | 833 | if (sdev->last_queue_full_depth < 8) { |
850 | /* Drop back to untagged */ | 834 | /* Drop back to untagged */ |
851 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | 835 | scsi_set_tag_type(sdev, 0); |
836 | scsi_adjust_queue_depth(sdev, sdev->host->cmd_per_lun); | ||
852 | return -1; | 837 | return -1; |
853 | } | 838 | } |
854 | 839 | ||
855 | scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth); | 840 | scsi_adjust_queue_depth(sdev, depth); |
856 | return depth; | 841 | return depth; |
857 | } | 842 | } |
858 | EXPORT_SYMBOL(scsi_track_queue_full); | 843 | EXPORT_SYMBOL(scsi_track_queue_full); |
@@ -867,7 +852,7 @@ int scsi_change_queue_type(struct scsi_device *sdev, int tag_type) | |||
867 | if (!sdev->tagged_supported) | 852 | if (!sdev->tagged_supported) |
868 | return 0; | 853 | return 0; |
869 | 854 | ||
870 | scsi_adjust_queue_depth(sdev, tag_type, sdev->queue_depth); | 855 | scsi_set_tag_type(sdev, tag_type); |
871 | return tag_type; | 856 | return tag_type; |
872 | 857 | ||
873 | } | 858 | } |
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 7bcace2cdd53..fce4e47becc7 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c | |||
@@ -2700,11 +2700,8 @@ static int scsi_debug_slave_configure(struct scsi_device *sdp) | |||
2700 | devip = devInfoReg(sdp); | 2700 | devip = devInfoReg(sdp); |
2701 | if (NULL == devip) | 2701 | if (NULL == devip) |
2702 | return 1; /* no resources, will be marked offline */ | 2702 | return 1; /* no resources, will be marked offline */ |
2703 | sdp->hostdata = devip; | ||
2704 | sdp->tagged_supported = 1; | 2703 | sdp->tagged_supported = 1; |
2705 | if (sdp->host->cmd_per_lun) | 2704 | sdp->hostdata = devip; |
2706 | scsi_adjust_queue_depth(sdp, DEF_TAGGED_QUEUING, | ||
2707 | DEF_CMD_PER_LUN); | ||
2708 | blk_queue_max_segment_size(sdp->request_queue, -1U); | 2705 | blk_queue_max_segment_size(sdp->request_queue, -1U); |
2709 | if (scsi_debug_no_uld) | 2706 | if (scsi_debug_no_uld) |
2710 | sdp->no_uld_attach = 1; | 2707 | sdp->no_uld_attach = 1; |
@@ -4494,7 +4491,7 @@ sdebug_change_qdepth(struct scsi_device *sdev, int qdepth, int reason) | |||
4494 | /* allow to exceed max host queued_arr elements for testing */ | 4491 | /* allow to exceed max host queued_arr elements for testing */ |
4495 | if (qdepth > SCSI_DEBUG_CANQUEUE + 10) | 4492 | if (qdepth > SCSI_DEBUG_CANQUEUE + 10) |
4496 | qdepth = SCSI_DEBUG_CANQUEUE + 10; | 4493 | qdepth = SCSI_DEBUG_CANQUEUE + 10; |
4497 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 4494 | scsi_adjust_queue_depth(sdev, qdepth); |
4498 | } else if (reason == SCSI_QDEPTH_QFULL) | 4495 | } else if (reason == SCSI_QDEPTH_QFULL) |
4499 | scsi_track_queue_full(sdev, qdepth); | 4496 | scsi_track_queue_full(sdev, qdepth); |
4500 | else | 4497 | else |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 408891cb14ff..d97597e6337e 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -292,7 +292,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
292 | blk_queue_init_tags(sdev->request_queue, | 292 | blk_queue_init_tags(sdev->request_queue, |
293 | sdev->host->cmd_per_lun, shost->bqt); | 293 | sdev->host->cmd_per_lun, shost->bqt); |
294 | } | 294 | } |
295 | scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun); | 295 | scsi_adjust_queue_depth(sdev, sdev->host->cmd_per_lun); |
296 | 296 | ||
297 | scsi_sysfs_device_initialize(sdev); | 297 | scsi_sysfs_device_initialize(sdev); |
298 | 298 | ||
@@ -880,8 +880,10 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, | |||
880 | (inq_result[3] & 0x0f) == 1 ? " CCS" : ""); | 880 | (inq_result[3] & 0x0f) == 1 ? " CCS" : ""); |
881 | 881 | ||
882 | if ((sdev->scsi_level >= SCSI_2) && (inq_result[7] & 2) && | 882 | if ((sdev->scsi_level >= SCSI_2) && (inq_result[7] & 2) && |
883 | !(*bflags & BLIST_NOTQ)) | 883 | !(*bflags & BLIST_NOTQ)) { |
884 | sdev->tagged_supported = 1; | 884 | sdev->tagged_supported = 1; |
885 | sdev->simple_tags = 1; | ||
886 | } | ||
885 | 887 | ||
886 | /* | 888 | /* |
887 | * Some devices (Texel CD ROM drives) have handshaking problems | 889 | * Some devices (Texel CD ROM drives) have handshaking problems |
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c index b5eae4f6ba46..2bb8a9e74dac 100644 --- a/drivers/scsi/stex.c +++ b/drivers/scsi/stex.c | |||
@@ -549,8 +549,6 @@ stex_slave_alloc(struct scsi_device *sdev) | |||
549 | /* Cheat: usually extracted from Inquiry data */ | 549 | /* Cheat: usually extracted from Inquiry data */ |
550 | sdev->tagged_supported = 1; | 550 | sdev->tagged_supported = 1; |
551 | 551 | ||
552 | scsi_adjust_queue_depth(sdev, 0, sdev->host->can_queue); | ||
553 | |||
554 | return 0; | 552 | return 0; |
555 | } | 553 | } |
556 | 554 | ||
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index 37f5fd8ed765..ff8befbdf17c 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c | |||
@@ -1429,8 +1429,7 @@ static void storvsc_device_destroy(struct scsi_device *sdevice) | |||
1429 | 1429 | ||
1430 | static int storvsc_device_configure(struct scsi_device *sdevice) | 1430 | static int storvsc_device_configure(struct scsi_device *sdevice) |
1431 | { | 1431 | { |
1432 | scsi_adjust_queue_depth(sdevice, MSG_SIMPLE_TAG, | 1432 | scsi_adjust_queue_depth(sdevice, STORVSC_MAX_IO_REQUESTS); |
1433 | STORVSC_MAX_IO_REQUESTS); | ||
1434 | 1433 | ||
1435 | blk_queue_max_segment_size(sdevice->request_queue, PAGE_SIZE); | 1434 | blk_queue_max_segment_size(sdevice->request_queue, PAGE_SIZE); |
1436 | 1435 | ||
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c index e59e6f96b725..3557b385251a 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c | |||
@@ -820,9 +820,7 @@ static int sym53c8xx_slave_configure(struct scsi_device *sdev) | |||
820 | if (reqtags > SYM_CONF_MAX_TAG) | 820 | if (reqtags > SYM_CONF_MAX_TAG) |
821 | reqtags = SYM_CONF_MAX_TAG; | 821 | reqtags = SYM_CONF_MAX_TAG; |
822 | depth_to_use = reqtags ? reqtags : 1; | 822 | depth_to_use = reqtags ? reqtags : 1; |
823 | scsi_adjust_queue_depth(sdev, | 823 | scsi_adjust_queue_depth(sdev, depth_to_use); |
824 | sdev->tagged_supported ? MSG_SIMPLE_TAG : 0, | ||
825 | depth_to_use); | ||
826 | lp->s.scdev_depth = depth_to_use; | 824 | lp->s.scdev_depth = depth_to_use; |
827 | sym_tune_dev_queuing(tp, sdev->lun, reqtags); | 825 | sym_tune_dev_queuing(tp, sdev->lun, reqtags); |
828 | 826 | ||
diff --git a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c index 6369f9a282f1..844c9a048c00 100644 --- a/drivers/scsi/tmscsim.c +++ b/drivers/scsi/tmscsim.c | |||
@@ -2185,9 +2185,16 @@ static int dc390_slave_configure(struct scsi_device *sdev) | |||
2185 | struct dc390_dcb *dcb = (struct dc390_dcb *)sdev->hostdata; | 2185 | struct dc390_dcb *dcb = (struct dc390_dcb *)sdev->hostdata; |
2186 | 2186 | ||
2187 | acb->scan_devices = 0; | 2187 | acb->scan_devices = 0; |
2188 | |||
2189 | /* | ||
2190 | * XXX: Note that while this driver used to called scsi_activate_tcq, | ||
2191 | * it never actually set a tag type, so emulate the old behavior. | ||
2192 | */ | ||
2193 | scsi_set_tag_type(sdev, 0); | ||
2194 | |||
2188 | if (sdev->tagged_supported && (dcb->DevMode & TAG_QUEUEING_)) { | 2195 | if (sdev->tagged_supported && (dcb->DevMode & TAG_QUEUEING_)) { |
2189 | dcb->SyncMode |= EN_TAG_QUEUEING; | 2196 | dcb->SyncMode |= EN_TAG_QUEUEING; |
2190 | scsi_adjust_queue_depth(sdev, 0, acb->TagMaxNum); | 2197 | scsi_adjust_queue_depth(sdev, acb->TagMaxNum); |
2191 | } | 2198 | } |
2192 | 2199 | ||
2193 | return 0; | 2200 | return 0; |
diff --git a/drivers/scsi/u14-34f.c b/drivers/scsi/u14-34f.c index d8dcf36aed11..aa0f4035afaf 100644 --- a/drivers/scsi/u14-34f.c +++ b/drivers/scsi/u14-34f.c | |||
@@ -696,25 +696,25 @@ static int u14_34f_slave_configure(struct scsi_device *dev) { | |||
696 | if (TLDEV(dev->type) && dev->tagged_supported) | 696 | if (TLDEV(dev->type) && dev->tagged_supported) |
697 | 697 | ||
698 | if (tag_mode == TAG_SIMPLE) { | 698 | if (tag_mode == TAG_SIMPLE) { |
699 | scsi_adjust_queue_depth(dev, MSG_SIMPLE_TAG, tqd); | 699 | scsi_adjust_queue_depth(dev, tqd); |
700 | tag_suffix = ", simple tags"; | 700 | tag_suffix = ", simple tags"; |
701 | } | 701 | } |
702 | else if (tag_mode == TAG_ORDERED) { | 702 | else if (tag_mode == TAG_ORDERED) { |
703 | scsi_adjust_queue_depth(dev, MSG_ORDERED_TAG, tqd); | 703 | scsi_adjust_queue_depth(dev, tqd); |
704 | tag_suffix = ", ordered tags"; | 704 | tag_suffix = ", ordered tags"; |
705 | } | 705 | } |
706 | else { | 706 | else { |
707 | scsi_adjust_queue_depth(dev, 0, tqd); | 707 | scsi_adjust_queue_depth(dev, tqd); |
708 | tag_suffix = ", no tags"; | 708 | tag_suffix = ", no tags"; |
709 | } | 709 | } |
710 | 710 | ||
711 | else if (TLDEV(dev->type) && linked_comm) { | 711 | else if (TLDEV(dev->type) && linked_comm) { |
712 | scsi_adjust_queue_depth(dev, 0, tqd); | 712 | scsi_adjust_queue_depth(dev, tqd); |
713 | tag_suffix = ", untagged"; | 713 | tag_suffix = ", untagged"; |
714 | } | 714 | } |
715 | 715 | ||
716 | else { | 716 | else { |
717 | scsi_adjust_queue_depth(dev, 0, utqd); | 717 | scsi_adjust_queue_depth(dev, utqd); |
718 | tag_suffix = ""; | 718 | tag_suffix = ""; |
719 | } | 719 | } |
720 | 720 | ||
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 48c7f9e8f256..5eb4931e2adc 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c | |||
@@ -2696,7 +2696,7 @@ static void ufshcd_set_queue_depth(struct scsi_device *sdev) | |||
2696 | dev_dbg(hba->dev, "%s: activate tcq with queue depth %d\n", | 2696 | dev_dbg(hba->dev, "%s: activate tcq with queue depth %d\n", |
2697 | __func__, lun_qdepth); | 2697 | __func__, lun_qdepth); |
2698 | if (sdev->tagged_supported) | 2698 | if (sdev->tagged_supported) |
2699 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), lun_qdepth); | 2699 | scsi_adjust_queue_depth(sdev, lun_qdepth); |
2700 | } | 2700 | } |
2701 | 2701 | ||
2702 | /* | 2702 | /* |
@@ -2808,7 +2808,7 @@ static int ufshcd_change_queue_depth(struct scsi_device *sdev, | |||
2808 | case SCSI_QDEPTH_RAMP_UP: | 2808 | case SCSI_QDEPTH_RAMP_UP: |
2809 | if (!sdev->tagged_supported) | 2809 | if (!sdev->tagged_supported) |
2810 | depth = 1; | 2810 | depth = 1; |
2811 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), depth); | 2811 | scsi_adjust_queue_depth(sdev, depth); |
2812 | break; | 2812 | break; |
2813 | case SCSI_QDEPTH_QFULL: | 2813 | case SCSI_QDEPTH_QFULL: |
2814 | scsi_track_queue_full(sdev, depth); | 2814 | scsi_track_queue_full(sdev, depth); |
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c index b83846fc7859..355afbc7fde1 100644 --- a/drivers/scsi/virtio_scsi.c +++ b/drivers/scsi/virtio_scsi.c | |||
@@ -683,9 +683,7 @@ static int virtscsi_change_queue_depth(struct scsi_device *sdev, | |||
683 | break; | 683 | break; |
684 | case SCSI_QDEPTH_RAMP_UP: /* Raise qdepth after BUSY state resolved */ | 684 | case SCSI_QDEPTH_RAMP_UP: /* Raise qdepth after BUSY state resolved */ |
685 | case SCSI_QDEPTH_DEFAULT: /* Manual change via sysfs */ | 685 | case SCSI_QDEPTH_DEFAULT: /* Manual change via sysfs */ |
686 | scsi_adjust_queue_depth(sdev, | 686 | scsi_adjust_queue_depth(sdev, min(max_depth, qdepth)); |
687 | scsi_get_tag_type(sdev), | ||
688 | min(max_depth, qdepth)); | ||
689 | break; | 687 | break; |
690 | default: | 688 | default: |
691 | return -EOPNOTSUPP; | 689 | return -EOPNOTSUPP; |
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c index 53a3eb6c0634..c3b4f8b3a3a5 100644 --- a/drivers/scsi/vmw_pvscsi.c +++ b/drivers/scsi/vmw_pvscsi.c | |||
@@ -522,7 +522,7 @@ static int pvscsi_change_queue_depth(struct scsi_device *sdev, | |||
522 | max_depth = 1; | 522 | max_depth = 1; |
523 | if (qdepth > max_depth) | 523 | if (qdepth > max_depth) |
524 | qdepth = max_depth; | 524 | qdepth = max_depth; |
525 | scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); | 525 | scsi_adjust_queue_depth(sdev, qdepth); |
526 | 526 | ||
527 | if (sdev->inquiry_len > 7) | 527 | if (sdev->inquiry_len > 7) |
528 | sdev_printk(KERN_INFO, sdev, | 528 | sdev_printk(KERN_INFO, sdev, |