aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Reed <mdr@sgi.com>2009-08-10 12:59:28 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-08-22 18:52:22 -0400
commit5f91bb050ecc4ff1d8d3d07edbe550c8f431c5e1 (patch)
tree7aa9e70ef2432d702ada2fac12026de8bfb35405
parentedced191e4512b7795380563634f4d44b21c684a (diff)
[SCSI] reservation conflict after timeout causes device to be taken offline
An IBM tape drive failed to complete a PERSISTENT RESERVE IN within the scsi cmd timeout. Error recovery was initiated and it sequenced from abort through taking the tape drive offline. The device was taken offline because it repeatedly responded to the TUR command issued by error recovery with a RESERVATION CONFLICT status. The tape drive was reserved to another system. This is perfectly legitimate response to TUR, and is one that an escalation of recovery is unlikely to clear. Further, escalation of recovery can have undesirable side effects on the operation of tape drives shared with other initiators. Instead of escalating recovery, error recovery should treat the RESERVATION CONFLICT response to the TUR as a good status, giving the issuer of the command the opportunity to handle the timeout and reservation conflict. Signed-off-by: Michael reed <mdr@sgi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
-rw-r--r--drivers/scsi/scsi_error.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index a1689353d7fd..877204daf549 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -382,9 +382,13 @@ static int scsi_eh_completed_normally(struct scsi_cmnd *scmd)
382 * who knows? FIXME(eric) 382 * who knows? FIXME(eric)
383 */ 383 */
384 return SUCCESS; 384 return SUCCESS;
385 case RESERVATION_CONFLICT:
386 /*
387 * let issuer deal with this, it could be just fine
388 */
389 return SUCCESS;
385 case BUSY: 390 case BUSY:
386 case QUEUE_FULL: 391 case QUEUE_FULL:
387 case RESERVATION_CONFLICT:
388 default: 392 default:
389 return FAILED; 393 return FAILED;
390 } 394 }