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: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
789547508f
commit
5e955245d6
@@ -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)
|
|||||||
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 @@ out_end:
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
|
|
||||||
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
|
|||||||
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 *);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user