aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-scsi.c
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2008-10-22 03:34:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-23 19:05:26 -0400
commit2fca5ccf97d2c28bcfce44f5b07d85e74e3cd18e (patch)
tree483dedd08d6ccbb56959eeb127e82ab8f84edf2e /drivers/ata/libata-scsi.c
parent332edc2f7fa58b818dfed1cede60272eecc27c0a (diff)
libata: switch to using block layer tagging support
libata currently has a pretty dumb ATA_MAX_QUEUE loop for finding a free tag to use. Instead of fixing that up, convert libata to using block layer tagging - gets rid of code in libata, and is also much faster. Signed-off-by: Jens Axboe <jens.axboe@oracle.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/ata/libata-scsi.c')
-rw-r--r--drivers/ata/libata-scsi.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 5d312dc9be9f..d5b9b7266c8b 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -708,7 +708,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
708{ 708{
709 struct ata_queued_cmd *qc; 709 struct ata_queued_cmd *qc;
710 710
711 qc = ata_qc_new_init(dev); 711 qc = ata_qc_new_init(dev, cmd->request->tag);
712 if (qc) { 712 if (qc) {
713 qc->scsicmd = cmd; 713 qc->scsicmd = cmd;
714 qc->scsidone = done; 714 qc->scsidone = done;
@@ -1103,7 +1103,8 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
1103 1103
1104 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id)); 1104 depth = min(sdev->host->can_queue, ata_id_queue_depth(dev->id));
1105 depth = min(ATA_MAX_QUEUE - 1, depth); 1105 depth = min(ATA_MAX_QUEUE - 1, depth);
1106 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth); 1106 scsi_set_tag_type(sdev, MSG_SIMPLE_TAG);
1107 scsi_activate_tcq(sdev, depth);
1107 } 1108 }
1108 1109
1109 return 0; 1110 return 0;
@@ -1943,6 +1944,11 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
1943 hdr[1] |= (1 << 7); 1944 hdr[1] |= (1 << 7);
1944 1945
1945 memcpy(rbuf, hdr, sizeof(hdr)); 1946 memcpy(rbuf, hdr, sizeof(hdr));
1947
1948 /* if ncq, set tags supported */
1949 if (ata_id_has_ncq(args->id))
1950 rbuf[7] |= (1 << 1);
1951
1946 memcpy(&rbuf[8], "ATA ", 8); 1952 memcpy(&rbuf[8], "ATA ", 8);
1947 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16); 1953 ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
1948 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4); 1954 ata_id_string(args->id, &rbuf[32], ATA_ID_FW_REV, 4);