• Nicholas Bellinger's avatar
    target: Make EXTENDED_COPY 0xe4 failure return COPY TARGET DEVICE NOT REACHABLE · 279a47ee
    Nicholas Bellinger authored
    commit 449a1378 upstream.
    
    This patch addresses a bug where EXTENDED_COPY across multiple LUNs
    results in a CHECK_CONDITION when the source + destination are not
    located on the same physical node.
    
    ESX Host environments expect sense COPY_ABORTED w/ COPY TARGET DEVICE
    NOT REACHABLE to be returned when this occurs, in order to signal
    fallback to local copy method.
    
    As described in section 6.3.3 of spc4r22:
    
      "If it is not possible to complete processing of a segment because the
       copy manager is unable to establish communications with a copy target
       device, because the copy target device does not respond to INQUIRY,
       or because the data returned in response to INQUIRY indicates
       an unsupported logical unit, then the EXTENDED COPY command shall be
       terminated with CHECK CONDITION status, with the sense key set to
       COPY ABORTED, and the additional sense code set to COPY TARGET DEVICE
       NOT REACHABLE."
    
    Tested on v4.1.y with ESX v5.5u2+ with BlockCopy across multiple nodes.
    Reported-by: default avatarNixon Vincent <nixon.vincent@calsoftinc.com>
    Tested-by: default avatarNixon Vincent <nixon.vincent@calsoftinc.com>
    Cc: Nixon Vincent <nixon.vincent@calsoftinc.com>
    Tested-by: default avatarDinesh Israni <ddi@datera.io>
    Signed-off-by: default avatarDinesh Israni <ddi@datera.io>
    Cc: Dinesh Israni <ddi@datera.io>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    [bwh: Backported to 3.16: generate the sense data in
     transport_send_check_condition_and_sense() rather than adding to
     sense_info_table]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    279a47ee
target_core_xcopy.c 28.9 KB