[SCSI] ide-scsi fails to call idescsi_check_condition for things like "Medium not present"
This patch started life as a response to fedora specific ide subsystem changes that made error handling of my ATAPI tape drive fail; the specifics are in https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=160868 The insertion of the statement rq->errors = err; near the end of ide_end_drive_cmd() in drivers/ide/ide-io.c means that rq->errors does not contain what it needs to in idescsi_end_request() in drivers/scsi/ide-scsi.c anymore. Recent mainline kernels now also have this change. Signed-off-by: Willem Riede <wrlk@riede.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
8c0ae65623
commit
3256534776
|
@ -395,6 +395,7 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
|
|||
int log = test_bit(IDESCSI_LOG_CMD, &scsi->log);
|
||||
struct Scsi_Host *host;
|
||||
u8 *scsi_buf;
|
||||
int errors = rq->errors;
|
||||
unsigned long flags;
|
||||
|
||||
if (!(rq->flags & (REQ_SPECIAL|REQ_SENSE))) {
|
||||
|
@ -421,11 +422,11 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
|
|||
printk (KERN_WARNING "ide-scsi: %s: timed out for %lu\n",
|
||||
drive->name, pc->scsi_cmd->serial_number);
|
||||
pc->scsi_cmd->result = DID_TIME_OUT << 16;
|
||||
} else if (rq->errors >= ERROR_MAX) {
|
||||
} else if (errors >= ERROR_MAX) {
|
||||
pc->scsi_cmd->result = DID_ERROR << 16;
|
||||
if (log)
|
||||
printk ("ide-scsi: %s: I/O error for %lu\n", drive->name, pc->scsi_cmd->serial_number);
|
||||
} else if (rq->errors) {
|
||||
} else if (errors) {
|
||||
if (log)
|
||||
printk ("ide-scsi: %s: check condition for %lu\n", drive->name, pc->scsi_cmd->serial_number);
|
||||
if (!idescsi_check_condition(drive, rq))
|
||||
|
|
Loading…
Reference in a new issue