• Nicholas Bellinger's avatar
    target: Fix compatible reservation handling (CRH=1) with legacy RESERVE/RELEASE · 087a03b3
    Nicholas Bellinger authored
    This patch addresses a bug with target_check_scsi2_reservation_conflict()
    return checking in target_scsi2_reservation_[reserve,release]() that was
    preventing CRH=1 operation from silently succeeding in the two special
    cases defined by SPC-3, and not failing with reservation conflict status
    when dealing with legacy RESERVE/RELEASE + active SPC-3 PR logic.
    
    Also explictly set cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT during
    the early non reservation holder failure from pr_ops->t10_seq_non_holder()
    check in transport_generic_cmd_sequencer() for fabrics that already expect
    it to be set.
    
    This bug was originally introduced in mainline commit:
    
    commit eacac00c
    Author: Christoph Hellwig <hch@infradead.org>
    Date:   Thu Nov 3 17:50:40 2011 -0400
    
        target: split core_scsi2_emulate_crh
    Reported-by: default avatarMartin Svec <martin.svec@zoner.cz>
    Cc: Martin Svec <martin.svec@zoner.cz>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    087a03b3
target_core_transport.c 130 KB