>Commands that are reset are returned with status SAM_STAT_COMMAND_TERMINATED. PVSCSI currently >returns DID_OK | SAM_STAT_COMMAND_TERMINATED which fails the command. Instead, set hostbyte to >DID_RESET to allow upper layers to retry. > >Tested by copying a large file between two pvscsi disks on same adapter while performing a bus >reset at 1-second intervals. Before fix, commands sometimes fail with DID_OK. After fix, commands >observed to fail with DID_RESET. > >Signed-off-by: Jim Gill <jgill@xxxxxxxxxx> >--- > drivers/scsi/vmw_pvscsi.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > >diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c >index 777e5f1..0cd947f 100644 >--- a/drivers/scsi/vmw_pvscsi.c >+++ b/drivers/scsi/vmw_pvscsi.c >@@ -561,9 +561,14 @@ static void pvscsi_complete_request(struct pvscsi_adapter *adapter, > (btstat == BTSTAT_SUCCESS || > btstat == BTSTAT_LINKED_COMMAND_COMPLETED || > btstat == BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG)) { >- cmd->result = (DID_OK << 16) | sdstat; >- if (sdstat == SAM_STAT_CHECK_CONDITION && cmd->sense_buffer) >- cmd->result |= (DRIVER_SENSE << 24); >+ if (sdstat == SAM_STAT_COMMAND_TERMINATED) { >+ cmd->result = (DID_RESET << 16); >+ } else { >+ cmd->result = (DID_OK << 16) | sdstat; >+ if (sdstat == SAM_STAT_CHECK_CONDITION && >+ cmd->sense_buffer) >+ cmd->result |= (DRIVER_SENSE << 24); >+ } > } else > switch (btstat) { > case BTSTAT_SUCCESS: >-- >2.7.4 >