diff options
Diffstat (limited to 'drivers/ide/ide-disk.c')
| -rw-r--r-- | drivers/ide/ide-disk.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 3c69822507e2..aed8b31ca561 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
| @@ -590,20 +590,24 @@ static ide_proc_entry_t idedisk_proc[] = { | |||
| 590 | static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) | 590 | static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) |
| 591 | { | 591 | { |
| 592 | ide_drive_t *drive = q->queuedata; | 592 | ide_drive_t *drive = q->queuedata; |
| 593 | ide_task_t task; | 593 | ide_task_t *task = kmalloc(sizeof(*task), GFP_ATOMIC); |
| 594 | 594 | ||
| 595 | memset(&task, 0, sizeof(task)); | 595 | /* FIXME: map struct ide_taskfile on rq->cmd[] */ |
| 596 | BUG_ON(task == NULL); | ||
| 597 | |||
| 598 | memset(task, 0, sizeof(*task)); | ||
| 596 | if (ide_id_has_flush_cache_ext(drive->id) && | 599 | if (ide_id_has_flush_cache_ext(drive->id) && |
| 597 | (drive->capacity64 >= (1UL << 28))) | 600 | (drive->capacity64 >= (1UL << 28))) |
| 598 | task.tf.command = WIN_FLUSH_CACHE_EXT; | 601 | task->tf.command = WIN_FLUSH_CACHE_EXT; |
| 599 | else | 602 | else |
| 600 | task.tf.command = WIN_FLUSH_CACHE; | 603 | task->tf.command = WIN_FLUSH_CACHE; |
| 601 | task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE; | 604 | task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE | |
| 602 | task.data_phase = TASKFILE_NO_DATA; | 605 | IDE_TFLAG_DYN; |
| 606 | task->data_phase = TASKFILE_NO_DATA; | ||
| 603 | 607 | ||
| 604 | rq->cmd_type = REQ_TYPE_ATA_TASKFILE; | 608 | rq->cmd_type = REQ_TYPE_ATA_TASKFILE; |
| 605 | rq->cmd_flags |= REQ_SOFTBARRIER; | 609 | rq->cmd_flags |= REQ_SOFTBARRIER; |
| 606 | rq->special = &task; | 610 | rq->special = task; |
| 607 | } | 611 | } |
| 608 | 612 | ||
| 609 | /* | 613 | /* |
