mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
[SCSI] qla4xxx: Fix cmd check in qla4xxx_cmd_wait
If the command has timedout then the block layer has called blk_mark_rq_complete. If qla4xxx_cmd_wait is then called from qla4xxx_eh_host_reset, we will always fail, because if the driver calls scsi_done then the the block layer will fail at blk_complete_request's blk_mark_rq_complete call instead of calling the normal completion path including the function, blk_queue_end_tag, which releases the tag. Signed-off-by: Mike Christie <[email protected]> Signed-off-by: Vikas Chaudhary <[email protected]> Signed-off-by: James Bottomley <[email protected]>
This commit is contained in:
parent
e340c35372
commit
a1e0063d0c
1 changed files with 7 additions and 1 deletions
|
|
@ -881,7 +881,13 @@ static int qla4xxx_cmd_wait(struct scsi_qla_host *ha)
|
|||
/* Find a command that hasn't completed. */
|
||||
for (index = 0; index < ha->host->can_queue; index++) {
|
||||
cmd = scsi_host_find_tag(ha->host, index);
|
||||
if (cmd != NULL)
|
||||
/*
|
||||
* We cannot just check if the index is valid,
|
||||
* becase if we are run from the scsi eh, then
|
||||
* the scsi/block layer is going to prevent
|
||||
* the tag from being released.
|
||||
*/
|
||||
if (cmd != NULL && CMD_SP(cmd))
|
||||
break;
|
||||
}
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
|
|
|||
Loading…
Reference in a new issue