• Jiang Yi's avatar
    target: Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce · baab4ab4
    Jiang Yi authored
    [ Upstream commit 1d6ef276 ]
    
    This patch addresses a COMPARE_AND_WRITE se_device->caw_sem leak,
    that would be triggered during normal se_cmd shutdown or abort
    via __transport_wait_for_tasks().
    
    This would occur because target_complete_cmd() would catch this
    early and do complete_all(&cmd->t_transport_stop_comp), but since
    target_complete_ok_work() or target_complete_failure_work() are
    never called to invoke se_cmd->transport_complete_callback(),
    the COMPARE_AND_WRITE specific callbacks never release caw_sem.
    
    To address this special case, go ahead and release caw_sem
    directly from target_complete_cmd().
    
    (Remove '&& success' from check, to release caw_sem regardless
     of scsi_status - nab)
    Signed-off-by: default avatarJiang Yi <jiangyilism@gmail.com>
    Cc: <stable@vger.kernel.org> # 3.14+
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    baab4ab4
target_core_transport.c 85.9 KB