diff options
Diffstat (limited to 'drivers/ide/ide-io.c')
-rw-r--r-- | drivers/ide/ide-io.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index cc163319dfbd..a9a6c208288a 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -418,11 +418,14 @@ void ide_map_sg(ide_drive_t *drive, struct request *rq) | |||
418 | ide_hwif_t *hwif = drive->hwif; | 418 | ide_hwif_t *hwif = drive->hwif; |
419 | struct scatterlist *sg = hwif->sg_table; | 419 | struct scatterlist *sg = hwif->sg_table; |
420 | 420 | ||
421 | if (rq->cmd_type != REQ_TYPE_ATA_TASKFILE) { | 421 | if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) { |
422 | hwif->sg_nents = blk_rq_map_sg(drive->queue, rq, sg); | ||
423 | } else { | ||
424 | sg_init_one(sg, rq->buffer, rq->nr_sectors * SECTOR_SIZE); | 422 | sg_init_one(sg, rq->buffer, rq->nr_sectors * SECTOR_SIZE); |
425 | hwif->sg_nents = 1; | 423 | hwif->sg_nents = 1; |
424 | } else if (!rq->bio) { | ||
425 | sg_init_one(sg, rq->data, rq->data_len); | ||
426 | hwif->sg_nents = 1; | ||
427 | } else { | ||
428 | hwif->sg_nents = blk_rq_map_sg(drive->queue, rq, sg); | ||
426 | } | 429 | } |
427 | } | 430 | } |
428 | 431 | ||
@@ -905,7 +908,7 @@ void ide_timer_expiry (unsigned long data) | |||
905 | ide_drive_t *uninitialized_var(drive); | 908 | ide_drive_t *uninitialized_var(drive); |
906 | ide_handler_t *handler; | 909 | ide_handler_t *handler; |
907 | unsigned long flags; | 910 | unsigned long flags; |
908 | unsigned long wait = -1; | 911 | int wait = -1; |
909 | int plug_device = 0; | 912 | int plug_device = 0; |
910 | 913 | ||
911 | spin_lock_irqsave(&hwif->lock, flags); | 914 | spin_lock_irqsave(&hwif->lock, flags); |
@@ -1159,6 +1162,7 @@ out_early: | |||
1159 | 1162 | ||
1160 | return irq_ret; | 1163 | return irq_ret; |
1161 | } | 1164 | } |
1165 | EXPORT_SYMBOL_GPL(ide_intr); | ||
1162 | 1166 | ||
1163 | /** | 1167 | /** |
1164 | * ide_do_drive_cmd - issue IDE special command | 1168 | * ide_do_drive_cmd - issue IDE special command |