If a Simple command is sent with a failure, target_setup_cmd_from_cdb
returns with TCM_UNSUPPORTED_SCSI_OPCODE or TCM_INVALID_CDB_FIELD.
So in the cases where target_setup_cmd_from_cdb returns an error, we
never get far enough to call target_execute_cmd to increment simple_cmds.
Since simple_cmds isn't incremented, the result of the failure from
target_setup_cmd_from_cdb causes transport_generic_request_failure to
decrement simple_cmds, due to call to transport_complete_task_attr.
With this dev->simple_cmds or dev->dev_ordered_sync is now -1, not 0.
So when a subsequent command with an Ordered Task is sent, it causes
a hang, since dev->simple_cmds is at -1.
Tested-by: Bryant G. Ly <email@example.com>
Signed-off-by: Bryant G. Ly <firstname.lastname@example.org>
Tested-by: Michael Cyr <email@example.com>
Signed-off-by: Michael Cyr <firstname.lastname@example.org>
Cc: email@example.com # 4.4+
Signed-off-by: Nicholas Bellinger <firstname.lastname@example.org>