summaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-atapi.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2017-01-31 10:57:30 -0500
committerJens Axboe <axboe@fb.com>2017-01-31 16:00:39 -0500
commit2f5a8e80f79dc82e00f4cca557dc9ceaf064b450 (patch)
treebc64c6e6f7e24d792742a3547018066568948fba /drivers/ide/ide-atapi.c
parent57292b58ddb58689e8c3b4c6eadbef10d9ca44dd (diff)
ide: don't abuse cmd_type
Currently the legacy ide driver defines several request types of it's own, which is in the way of removing that field entirely. Instead add a type field to struct ide_request and use that to distinguish the different types of IDE-internal requests. It's a bit of a mess, but so is the surrounding code.. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/ide/ide-atapi.c')
-rw-r--r--drivers/ide/ide-atapi.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c
index 7c826ecbd276..a8c650e8c92e 100644
--- a/drivers/ide/ide-atapi.c
+++ b/drivers/ide/ide-atapi.c
@@ -95,6 +95,7 @@ int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
95 rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM); 95 rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM);
96 scsi_req_init(rq); 96 scsi_req_init(rq);
97 rq->cmd_type = REQ_TYPE_DRV_PRIV; 97 rq->cmd_type = REQ_TYPE_DRV_PRIV;
98 ide_req(rq)->type = ATA_PRIV_MISC;
98 rq->special = (char *)pc; 99 rq->special = (char *)pc;
99 100
100 if (buf && bufflen) { 101 if (buf && bufflen) {
@@ -193,7 +194,7 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq)
193 194
194 BUG_ON(sense_len > sizeof(*sense)); 195 BUG_ON(sense_len > sizeof(*sense));
195 196
196 if (rq->cmd_type == REQ_TYPE_ATA_SENSE || drive->sense_rq_armed) 197 if (ata_sense_request(rq) || drive->sense_rq_armed)
197 return; 198 return;
198 199
199 memset(sense, 0, sizeof(*sense)); 200 memset(sense, 0, sizeof(*sense));
@@ -211,7 +212,8 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq)
211 } 212 }
212 213
213 sense_rq->rq_disk = rq->rq_disk; 214 sense_rq->rq_disk = rq->rq_disk;
214 sense_rq->cmd_type = REQ_TYPE_ATA_SENSE; 215 sense_rq->cmd_type = REQ_TYPE_DRV_PRIV;
216 ide_req(sense_rq)->type = ATA_PRIV_SENSE;
215 sense_rq->rq_flags |= RQF_PREEMPT; 217 sense_rq->rq_flags |= RQF_PREEMPT;
216 218
217 req->cmd[0] = GPCMD_REQUEST_SENSE; 219 req->cmd[0] = GPCMD_REQUEST_SENSE;
@@ -313,10 +315,14 @@ int ide_cd_get_xferlen(struct request *rq)
313 switch (rq->cmd_type) { 315 switch (rq->cmd_type) {
314 case REQ_TYPE_FS: 316 case REQ_TYPE_FS:
315 return 32768; 317 return 32768;
316 case REQ_TYPE_ATA_SENSE:
317 case REQ_TYPE_BLOCK_PC: 318 case REQ_TYPE_BLOCK_PC:
318 case REQ_TYPE_ATA_PC:
319 return blk_rq_bytes(rq); 319 return blk_rq_bytes(rq);
320 case REQ_TYPE_DRV_PRIV:
321 switch (ide_req(rq)->type) {
322 case ATA_PRIV_PC:
323 case ATA_PRIV_SENSE:
324 return blk_rq_bytes(rq);
325 }
320 default: 326 default:
321 return 0; 327 return 0;
322 } 328 }
@@ -377,7 +383,7 @@ int ide_check_ireason(ide_drive_t *drive, struct request *rq, int len,
377 drive->name, __func__, ireason); 383 drive->name, __func__, ireason);
378 } 384 }
379 385
380 if (dev_is_idecd(drive) && rq->cmd_type == REQ_TYPE_ATA_PC) 386 if (dev_is_idecd(drive) && ata_pc_request(rq))
381 rq->rq_flags |= RQF_FAILED; 387 rq->rq_flags |= RQF_FAILED;
382 388
383 return 1; 389 return 1;
@@ -480,7 +486,7 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
480 if (uptodate == 0) 486 if (uptodate == 0)
481 drive->failed_pc = NULL; 487 drive->failed_pc = NULL;
482 488
483 if (rq->cmd_type == REQ_TYPE_DRV_PRIV) { 489 if (ata_misc_request(rq)) {
484 rq->errors = 0; 490 rq->errors = 0;
485 error = 0; 491 error = 0;
486 } else { 492 } else {