• Bryant G. Ly's avatar
    ibmvscsis: Do not send aborted task response · 25e78531
    Bryant G. Ly authored
    The driver is sending a response to the actual scsi op that was
    aborted by an abort task TM, while LIO is sending a response to
    the abort task TM.
    
    ibmvscsis_tgt does not send the response to the client until
    release_cmd time. The reason for this was because if we did it
    at queue_status time, then the client would be free to reuse the
    tag for that command, but we're still using the tag until the
    command is released at release_cmd time, so we chose to delay
    sending the response until then. That then caused this issue, because
    release_cmd is always called, even if queue_status is not.
    
    SCSI spec says that the initiator that sends the abort task
    TM NEVER gets a response to the aborted op and with the current
    code it will send a response. Thus this fix will remove that response
    if the CMD_T_ABORTED && !CMD_T_TAS.
    
    Another case with a small timing window is the case where if LIO sends a
    TMR_DOES_NOT_EXIST, and the release_cmd callback is called for the TMR Abort
    cmd before the release_cmd for the (attemped) aborted cmd, then we need to
    ensure that we send the response for the (attempted) abort cmd to the client
    before we send the response for the TMR Abort cmd.
    
    Cc: <stable@vger.kernel.org> # v4.8+
    Signed-off-by: default avatarBryant G. Ly <bryantly@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Cyr <mikecyr@linux.vnet.ibm.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    25e78531
ibmvscsi_tgt.c 103 KB