diff options
author | Christoph Hellwig <hch@lst.de> | 2017-01-31 10:57:30 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-01-31 16:00:39 -0500 |
commit | 2f5a8e80f79dc82e00f4cca557dc9ceaf064b450 (patch) | |
tree | bc64c6e6f7e24d792742a3547018066568948fba /drivers/ide/ide-atapi.c | |
parent | 57292b58ddb58689e8c3b4c6eadbef10d9ca44dd (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.c | 18 |
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 { |