linux/drivers/target
Nicholas Bellinger cbf031f425 target: Add support for EXTENDED_COPY copy offload emulation
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: Nicholas Bellinger <nab@daterainc.com>
2013-09-10 16:48:43 -07:00
..
iscsi iscsi-target: Convert to per-cpu ida_alloc + ida_free command map 2013-09-09 14:29:22 -07:00
loopback target: make queue_tm_rsp() return void 2013-07-07 18:36:53 -07:00
sbp target: make queue_tm_rsp() return void 2013-07-07 18:36:53 -07:00
tcm_fc target: replace strict_strto*() with kstrto*() 2013-08-12 20:31:44 -07:00
Kconfig sbp-target: Initial merge of firewire/ieee-1394 target mode support 2012-05-09 15:25:17 -07:00
Makefile target: Add support for EXTENDED_COPY copy offload emulation 2013-09-10 16:48:43 -07:00
target_core_alua.c target: Avoid non-existent tg_pt_gp_mem in target_alua_state_check 2013-09-10 16:48:42 -07:00
target_core_alua.h target: pass sense_reason as a return value 2012-11-06 20:55:46 -08:00
target_core_configfs.c target: Make target_core_subsystem defined as non static 2013-09-10 16:48:36 -07:00
target_core_device.c target: Add global device list for EXTENDED_COPY 2013-09-10 16:48:40 -07:00
target_core_fabric_configfs.c target: replace strict_strto*() with kstrto*() 2013-08-12 20:31:44 -07:00
target_core_fabric_lib.c target: Update copyright information to 2012 2012-11-27 22:47:02 -08:00
target_core_file.c target: Allow sbc_ops->execute_rw() to accept SGLs + data_direction 2013-09-09 14:29:28 -07:00
target_core_file.h target/file: Bump FD_MAX_SECTORS to 2048 to handle 1M sized I/Os 2013-03-19 17:24:28 -07:00
target_core_hba.c target: Update copyright information to 2012 2012-11-27 22:47:02 -08:00
target_core_iblock.c target: Allow sbc_ops->execute_rw() to accept SGLs + data_direction 2013-09-09 14:29:28 -07:00
target_core_iblock.h target: kill struct se_subsystem_dev 2012-11-06 20:55:43 -08:00
target_core_internal.h target: Add MAXIMUM COMPARE AND WRITE LENGTH in Block Limits VPD 2013-09-09 14:29:35 -07:00
target_core_pr.c target: Make core_scsi3_update_and_write_aptpl return sense_reason_t 2013-07-03 19:44:33 -07:00
target_core_pr.h target: Alter core_pr_dump_initiator_port for ease of use 2013-06-14 00:04:31 -07:00
target_core_pscsi.c target/pscsi: remove an unneeded check 2013-09-09 14:29:23 -07:00
target_core_pscsi.h target: kill struct se_subsystem_dev 2012-11-06 20:55:43 -08:00
target_core_rd.c target: Allow sbc_ops->execute_rw() to accept SGLs + data_direction 2013-09-09 14:29:28 -07:00
target_core_rd.h target/rd: Add ramdisk bit for NULLIO operation 2013-05-11 16:22:39 -07:00
target_core_sbc.c target: Release COMPARE_AND_WRITE mutex in generic failure path 2013-09-10 16:46:01 -07:00
target_core_spc.c target: Make spc_parse_naa_6h_vendor_specific non static 2013-09-10 16:48:37 -07:00
target_core_stat.c target: Update copyright information to 2012 2012-11-27 22:47:02 -08:00
target_core_tmr.c target: Remove legacy t_fe_count + avoid t_state_lock access in transport_put_cmd 2013-06-20 14:10:41 -07:00
target_core_tpg.c target: fix possible memory leak in core_tpg_register() 2013-03-18 12:45:52 -07:00
target_core_transport.c target: Make helpers non static for EXTENDED_COPY command setup 2013-09-10 16:48:39 -07:00
target_core_ua.c target: Update copyright information to 2012 2012-11-27 22:47:02 -08:00
target_core_ua.h target: pass sense_reason as a return value 2012-11-06 20:55:46 -08:00
target_core_xcopy.c target: Add support for EXTENDED_COPY copy offload emulation 2013-09-10 16:48:43 -07:00
target_core_xcopy.h target: Add support for EXTENDED_COPY copy offload emulation 2013-09-10 16:48:43 -07:00