Commit 410f6702 authored by Roland Dreier's avatar Roland Dreier Committed by Nicholas Bellinger

target: Don't return an error status for 0-length READ and WRITE

IO commands with a TRANSFER LENGTH of 0 are not an error; for example,
for READ (10) and WRITE (10), SBC-3 says:

    A TRANSFER LENGTH field set to zero specifies that no logical blocks
    shall be read. This condition shall not be considered an error.

In case we have nothing to do, just complete the command with good status.
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
Cc: stable@kernel.org
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 1c3d5794
...@@ -3770,8 +3770,15 @@ int transport_generic_new_cmd(struct se_cmd *cmd) ...@@ -3770,8 +3770,15 @@ int transport_generic_new_cmd(struct se_cmd *cmd)
task_cdbs = transport_allocate_control_task(cmd); task_cdbs = transport_allocate_control_task(cmd);
} }
if (task_cdbs <= 0) if (task_cdbs < 0)
goto out_fail; goto out_fail;
else if (!task_cdbs && (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB)) {
cmd->t_state = TRANSPORT_COMPLETE;
atomic_set(&cmd->t_transport_active, 1);
INIT_WORK(&cmd->work, target_complete_ok_work);
queue_work(target_completion_wq, &cmd->work);
return 0;
}
if (set_counts) { if (set_counts) {
atomic_inc(&cmd->t_fe_count); atomic_inc(&cmd->t_fe_count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment