diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-08 10:45:36 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-08 10:45:36 -0400 |
| commit | cf90bfe2ebaf9d32f37acbebb7425c280fd6cd30 (patch) | |
| tree | d3e3f2067dc423721d698d154e15213aa5b0132d | |
| parent | 0a2851b9a837cb025d48bb8118f35ebd12bce4b5 (diff) | |
| parent | 720fc22a7af79d91ec460c80efa92c65c12d105e (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6:
ide: Fix IDE taskfile with cfq scheduler
ide: Must hold queue lock when requeueing
ide: Requeue request after DMA timeout
| -rw-r--r-- | drivers/ide/ide-atapi.c | 2 | ||||
| -rw-r--r-- | drivers/ide/ide-dma.c | 1 | ||||
| -rw-r--r-- | drivers/ide/ide-io.c | 2 | ||||
| -rw-r--r-- | drivers/ide/ide-taskfile.c | 6 | ||||
| -rw-r--r-- | include/linux/ide.h | 1 |
5 files changed, 6 insertions, 6 deletions
diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c index a4046e94158d..f9daffd7d0e3 100644 --- a/drivers/ide/ide-atapi.c +++ b/drivers/ide/ide-atapi.c | |||
| @@ -264,8 +264,8 @@ void ide_retry_pc(ide_drive_t *drive) | |||
| 264 | * of it. The failed command will be retried after sense data | 264 | * of it. The failed command will be retried after sense data |
| 265 | * is acquired. | 265 | * is acquired. |
| 266 | */ | 266 | */ |
| 267 | blk_requeue_request(failed_rq->q, failed_rq); | ||
| 268 | drive->hwif->rq = NULL; | 267 | drive->hwif->rq = NULL; |
| 268 | ide_requeue_and_plug(drive, failed_rq); | ||
| 269 | if (ide_queue_sense_rq(drive, pc)) { | 269 | if (ide_queue_sense_rq(drive, pc)) { |
| 270 | blk_start_request(failed_rq); | 270 | blk_start_request(failed_rq); |
| 271 | ide_complete_rq(drive, -EIO, blk_rq_bytes(failed_rq)); | 271 | ide_complete_rq(drive, -EIO, blk_rq_bytes(failed_rq)); |
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index 2c17e3fb43e3..06b14bc9a1d4 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
| @@ -493,6 +493,7 @@ ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) | |||
| 493 | if (rq) { | 493 | if (rq) { |
| 494 | hwif->rq = NULL; | 494 | hwif->rq = NULL; |
| 495 | rq->errors = 0; | 495 | rq->errors = 0; |
| 496 | ide_requeue_and_plug(drive, rq); | ||
| 496 | } | 497 | } |
| 497 | return ret; | 498 | return ret; |
| 498 | } | 499 | } |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index db96138fefcd..172ac9218154 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
| @@ -566,7 +566,7 @@ plug_device_2: | |||
| 566 | blk_plug_device(q); | 566 | blk_plug_device(q); |
| 567 | } | 567 | } |
| 568 | 568 | ||
| 569 | static void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq) | 569 | void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq) |
| 570 | { | 570 | { |
| 571 | struct request_queue *q = drive->queue; | 571 | struct request_queue *q = drive->queue; |
| 572 | unsigned long flags; | 572 | unsigned long flags; |
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index cc8633cbe133..67fb73559fd5 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c | |||
| @@ -428,13 +428,11 @@ int ide_raw_taskfile(ide_drive_t *drive, struct ide_cmd *cmd, u8 *buf, | |||
| 428 | { | 428 | { |
| 429 | struct request *rq; | 429 | struct request *rq; |
| 430 | int error; | 430 | int error; |
| 431 | int rw = !(cmd->tf_flags & IDE_TFLAG_WRITE) ? READ : WRITE; | ||
| 431 | 432 | ||
| 432 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); | 433 | rq = blk_get_request(drive->queue, rw, __GFP_WAIT); |
| 433 | rq->cmd_type = REQ_TYPE_ATA_TASKFILE; | 434 | rq->cmd_type = REQ_TYPE_ATA_TASKFILE; |
| 434 | 435 | ||
| 435 | if (cmd->tf_flags & IDE_TFLAG_WRITE) | ||
| 436 | rq->cmd_flags |= REQ_RW; | ||
| 437 | |||
| 438 | /* | 436 | /* |
| 439 | * (ks) We transfer currently only whole sectors. | 437 | * (ks) We transfer currently only whole sectors. |
| 440 | * This is suffient for now. But, it would be great, | 438 | * This is suffient for now. But, it would be great, |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 97e6ab435184..3239d1c10acb 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -1169,6 +1169,7 @@ extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); | |||
| 1169 | extern void ide_timer_expiry(unsigned long); | 1169 | extern void ide_timer_expiry(unsigned long); |
| 1170 | extern irqreturn_t ide_intr(int irq, void *dev_id); | 1170 | extern irqreturn_t ide_intr(int irq, void *dev_id); |
| 1171 | extern void do_ide_request(struct request_queue *); | 1171 | extern void do_ide_request(struct request_queue *); |
| 1172 | extern void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq); | ||
| 1172 | 1173 | ||
| 1173 | void ide_init_disk(struct gendisk *, ide_drive_t *); | 1174 | void ide_init_disk(struct gendisk *, ide_drive_t *); |
| 1174 | 1175 | ||
