mirror of https://gitee.com/openkylin/linux.git
[SCSI] make error handling more robust in the face of reservations
commit 5f91bb050e
Author: Michael Reed <mdr@sgi.com>
Date: Mon Aug 10 11:59:28 2009 -0500
[SCSI] reservation conflict after timeout causes device to be taken offline
Flipped us from always returning failed to always returning success in
the name of fixing the problem where reservation conflict returns from
test unit ready cause the device always to be taken offline.
Unfortuantely, it also introduced a problem whereby for commands other
than test unit ready, the eh dispatcher thinks they succeeded when
reservation conflict is returned, whereas in reality they failed. Fix
this by only returning success for the test unit ready case.
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
3deee42088
commit
67110dfd45
|
@ -473,10 +473,12 @@ static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
|
||||||
*/
|
*/
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
case RESERVATION_CONFLICT:
|
case RESERVATION_CONFLICT:
|
||||||
/*
|
if (scmd->cmnd[0] == TEST_UNIT_READY)
|
||||||
* let issuer deal with this, it could be just fine
|
/* it is a success, we probed the device and
|
||||||
*/
|
* found it */
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
/* otherwise, we failed to send the command */
|
||||||
|
return FAILED;
|
||||||
case QUEUE_FULL:
|
case QUEUE_FULL:
|
||||||
scsi_handle_queue_full(scmd->device);
|
scsi_handle_queue_full(scmd->device);
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
Loading…
Reference in New Issue