• Nicholas Bellinger's avatar
    target: Fix RESERVATION_CONFLICT status regression for iscsi-target special case · f85eda8d
    Nicholas Bellinger authored
    This patch fixes a regression introduced in v3.8-rc1 code where a failed
    target_check_reservation() check in target_setup_cmd_from_cdb() was causing
    an incorrect SAM_STAT_GOOD status to be returned during a WRITE operation
    performed by an unregistered / unreserved iscsi initiator port.
    
    This regression is only effecting iscsi-target due to a special case check
    for TCM_RESERVATION_CONFLICT within iscsi_target_erl1.c:iscsit_execute_cmd(),
    and was still correctly disallowing WRITE commands from backend submission
    for unregistered / unreserved initiator ports, while returning the incorrect
    SAM_STAT_GOOD status due to the missing SAM_STAT_RESERVATION_CONFLICT
    assignment.
    
    This regression was first introduced with:
    
    commit de103c93
    Author: Christoph Hellwig <hch@lst.de>
    Date:   Tue Nov 6 12:24:09 2012 -0800
    
        target: pass sense_reason as a return value
    
    Go ahead and re-add the missing SAM_STAT_RESERVATION_CONFLICT assignment
    during a target_check_reservation() failure, so that iscsi-target code
    sends the correct SCSI status.
    
    All other fabrics using target_submit_cmd_*() with a RESERVATION_CONFLICT
    call to transport_generic_request_failure() are not effected by this bug.
    Reported-by: default avatarJeff Leung <jleung@curriegrad2004.ca>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    f85eda8d
target_core_transport.c 77.9 KB