Commit 67110dfd45442e70753c575cf0509eaed237b749

Authored by James Bottomley
1 parent 3deee42088

[SCSI] make error handling more robust in the face of reservations

commit 5f91bb050ecc4ff1d8d3d07edbe550c8f431c5e1
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>

Showing 1 changed file with 6 additions and 4 deletions Side-by-side Diff

drivers/scsi/scsi_error.c
... ... @@ -473,10 +473,12 @@
473 473 */
474 474 return SUCCESS;
475 475 case RESERVATION_CONFLICT:
476   - /*
477   - * let issuer deal with this, it could be just fine
478   - */
479   - return SUCCESS;
  476 + if (scmd->cmnd[0] == TEST_UNIT_READY)
  477 + /* it is a success, we probed the device and
  478 + * found it */
  479 + return SUCCESS;
  480 + /* otherwise, we failed to send the command */
  481 + return FAILED;
480 482 case QUEUE_FULL:
481 483 scsi_handle_queue_full(scmd->device);
482 484 /* fall through */