diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2008-10-22 03:34:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 19:05:26 -0400 |
commit | 2fca5ccf97d2c28bcfce44f5b07d85e74e3cd18e (patch) | |
tree | 483dedd08d6ccbb56959eeb127e82ab8f84edf2e /drivers/ata/libata-scsi.c | |
parent | 332edc2f7fa58b818dfed1cede60272eecc27c0a (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.c | 10 |
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); |