• Nicholas Bellinger's avatar
    target: Add support for EXTENDED_COPY copy offload emulation · cbf031f4
    Nicholas Bellinger authored
    This patch adds support for EXTENDED_COPY emulation from SPC-3, that
    enables full copy offload target support within both a single virtual
    backend device, and across multiple virtual backend devices.  It also
    functions independent of target fabric, and supports copy offload
    across multiple target fabric ports.
    
    This implemenation supports both EXTENDED_COPY PUSH and PULL models
    of operation, so the actual CDB may be received on either source or
    desination logical unit.
    
    For Target Descriptors, it currently supports the NAA IEEE Registered
    Extended designator (type 0xe4), which allows the reference of target
    ports to occur independent of fabric type using EVPD 0x83 WWNs.
    
    For Segment Descriptors, it currently supports copy from block to
    block (0x02) mode.
    
    It also honors any present SCSI reservations of the destination target
    port.  Note that only Supports No List Identifier (SNLID=1) mode is
    supported.
    
    Also included is basic RECEIVE_COPY_RESULTS with service action type
    OPERATING PARAMETERS (0x03) required for SNLID=1 operation.
    
    v3 changes:
      - Fix incorrect return type in target_do_receive_copy_results()
        (Fengguang)
    
    v2 changes:
      - Use target_alloc_sgl() instead of transport_generic_get_mem()
      - Convert debug output to use pr_debug()
      - Convert target_xcopy_parse_target_descriptors() NAA IEEN WWN
        dump to use 0x%16phN format specification
      - Drop unnecessary xcopy_pt_cmd->xpt_passthrough_wsem, and
        associated usage in xcopy_pt_write_pending() and
        target_xcopy_issue_pt_cmd()
      - Add check for unsupported EXTENDED_COPY(LID4) service action
        bits in target_do_xcopy()
    
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Martin Petersen <martin.petersen@oracle.com>
    Cc: Chris Mason <chris.mason@fusionio.com>
    Cc: Roland Dreier <roland@purestorage.com>
    Cc: Zach Brown <zab@redhat.com>
    Cc: James Bottomley <JBottomley@Parallels.com>
    Cc: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: 's avatarNicholas Bellinger <nab@daterainc.com>
    cbf031f4