Commit 5e955245 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz Committed by David S. Miller

ide: always kill the whole request on error

* Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_kill_rq()
  and ide_floppy_do_request() for failed requests.
  [ bugfix part ]

* Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_do_devset()
  and ide_complete_drive_reset().  Then remove ide_rq_bytes().
  [ cleanup part ]
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 78954750
...@@ -183,6 +183,6 @@ ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq) ...@@ -183,6 +183,6 @@ ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq)
err = setfunc(drive, *(int *)&rq->cmd[1]); err = setfunc(drive, *(int *)&rq->cmd[1]);
if (err) if (err)
rq->errors = err; rq->errors = err;
ide_complete_rq(drive, err, ide_rq_bytes(rq)); ide_complete_rq(drive, err, blk_rq_bytes(rq));
return ide_stopped; return ide_stopped;
} }
...@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reset(ide_drive_t *drive, int err) ...@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reset(ide_drive_t *drive, int err)
if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) {
if (err <= 0 && rq->errors == 0) if (err <= 0 && rq->errors == 0)
rq->errors = -EIO; rq->errors = -EIO;
ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq));
} }
} }
......
...@@ -293,7 +293,7 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, ...@@ -293,7 +293,7 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive,
drive->failed_pc = NULL; drive->failed_pc = NULL;
if (blk_fs_request(rq) == 0 && rq->errors == 0) if (blk_fs_request(rq) == 0 && rq->errors == 0)
rq->errors = -EIO; rq->errors = -EIO;
ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
return ide_stopped; return ide_stopped;
} }
......
...@@ -112,16 +112,6 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) ...@@ -112,16 +112,6 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
} }
} }
/* obsolete, blk_rq_bytes() should be used instead */
unsigned int ide_rq_bytes(struct request *rq)
{
if (blk_pc_request(rq))
return blk_rq_bytes(rq);
else
return blk_rq_cur_sectors(rq) << 9;
}
EXPORT_SYMBOL_GPL(ide_rq_bytes);
int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes) int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes)
{ {
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
...@@ -152,14 +142,14 @@ void ide_kill_rq(ide_drive_t *drive, struct request *rq) ...@@ -152,14 +142,14 @@ void ide_kill_rq(ide_drive_t *drive, struct request *rq)
if ((media == ide_floppy || media == ide_tape) && drv_req) { if ((media == ide_floppy || media == ide_tape) && drv_req) {
rq->errors = 0; rq->errors = 0;
ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
} else { } else {
if (media == ide_tape) if (media == ide_tape)
rq->errors = IDE_DRV_ERROR_GENERAL; rq->errors = IDE_DRV_ERROR_GENERAL;
else if (blk_fs_request(rq) == 0 && rq->errors == 0) else if (blk_fs_request(rq) == 0 && rq->errors == 0)
rq->errors = -EIO; rq->errors = -EIO;
ide_complete_rq(drive, -EIO, ide_rq_bytes(rq));
} }
ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
} }
static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
......
...@@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l ...@@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l
extern int ide_vlb_clk; extern int ide_vlb_clk;
extern int ide_pci_clk; extern int ide_pci_clk;
unsigned int ide_rq_bytes(struct request *);
int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int);
void ide_kill_rq(ide_drive_t *, struct request *); void ide_kill_rq(ide_drive_t *, struct request *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment