>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 <[email protected]>
>---
> 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
>