Skip to content
  • Nicholas Bellinger's avatar
    target: Fix QUEUE_FULL + SCSI task attribute handling · 66abe4fc
    Nicholas Bellinger authored
    commit 1c79df1f
    
     upstream.
    
    This patch fixes a bug during QUEUE_FULL where transport_complete_qf()
    calls transport_complete_task_attr() after it's already been invoked
    by target_complete_ok_work() or transport_generic_request_failure()
    during initial completion, preceeding QUEUE_FULL.
    
    This will result in se_device->simple_cmds, se_device->dev_cur_ordered_id
    and/or se_device->dev_ordered_sync being updated multiple times for
    a single se_cmd.
    
    To address this bug, clear SCF_TASK_ATTR_SET after the first call
    to transport_complete_task_attr(), and avoid updating SCSI task
    attribute related counters for any subsequent calls.
    
    Also, when a se_cmd is deferred due to ordered tags and executed
    via target_restart_delayed_cmds(), set CMD_T_SENT before execution
    matching what target_execute_cmd() does.
    
    Cc: Michael Cyr <mikecyr@linux.vnet.ibm.com>
    Cc: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Cc: Hannes Reinecke <hare@suse.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    66abe4fc