diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-10-07 21:05:14 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-10-09 04:54:44 -0400 |
commit | acb3f2600eb8cdd35643a8b9237719ce61c98d41 (patch) | |
tree | 38d93b11145669f061c84bac3932b9c9b9c08f32 /drivers/target | |
parent | 3f7a46c67440a7fa422919ab2059cbab838ca558 (diff) |
target: Reject EXTENDED_COPY when emulate_3pc is disabled
This patch rejects EXTENDED_COPY when the emulate_3pc attribute has
been explicitly disabled for the receiving device.
It also adds a similar check in target_xcopy_locate_se_dev_e4() to
ignore these devices when doing a search based upon the identifier
WWN provided by EXTENDED_COPY parameter list target descriptors.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/target_core_xcopy.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c index fe985559eeb8..eeeaf99387ce 100644 --- a/drivers/target/target_core_xcopy.c +++ b/drivers/target/target_core_xcopy.c | |||
@@ -82,6 +82,9 @@ static int target_xcopy_locate_se_dev_e4(struct se_cmd *se_cmd, struct xcopy_op | |||
82 | mutex_lock(&g_device_mutex); | 82 | mutex_lock(&g_device_mutex); |
83 | list_for_each_entry(se_dev, &g_device_list, g_dev_node) { | 83 | list_for_each_entry(se_dev, &g_device_list, g_dev_node) { |
84 | 84 | ||
85 | if (!se_dev->dev_attrib.emulate_3pc) | ||
86 | continue; | ||
87 | |||
85 | memset(&tmp_dev_wwn[0], 0, XCOPY_NAA_IEEE_REGEX_LEN); | 88 | memset(&tmp_dev_wwn[0], 0, XCOPY_NAA_IEEE_REGEX_LEN); |
86 | target_xcopy_gen_naa_ieee(se_dev, &tmp_dev_wwn[0]); | 89 | target_xcopy_gen_naa_ieee(se_dev, &tmp_dev_wwn[0]); |
87 | 90 | ||
@@ -884,12 +887,18 @@ out: | |||
884 | 887 | ||
885 | sense_reason_t target_do_xcopy(struct se_cmd *se_cmd) | 888 | sense_reason_t target_do_xcopy(struct se_cmd *se_cmd) |
886 | { | 889 | { |
890 | struct se_device *dev = se_cmd->se_dev; | ||
887 | struct xcopy_op *xop = NULL; | 891 | struct xcopy_op *xop = NULL; |
888 | unsigned char *p = NULL, *seg_desc; | 892 | unsigned char *p = NULL, *seg_desc; |
889 | unsigned int list_id, list_id_usage, sdll, inline_dl, sa; | 893 | unsigned int list_id, list_id_usage, sdll, inline_dl, sa; |
890 | int rc; | 894 | int rc; |
891 | unsigned short tdll; | 895 | unsigned short tdll; |
892 | 896 | ||
897 | if (!dev->dev_attrib.emulate_3pc) { | ||
898 | pr_err("EXTENDED_COPY operation explicitly disabled\n"); | ||
899 | return TCM_UNSUPPORTED_SCSI_OPCODE; | ||
900 | } | ||
901 | |||
893 | sa = se_cmd->t_task_cdb[1] & 0x1f; | 902 | sa = se_cmd->t_task_cdb[1] & 0x1f; |
894 | if (sa != 0x00) { | 903 | if (sa != 0x00) { |
895 | pr_err("EXTENDED_COPY(LID4) not supported\n"); | 904 | pr_err("EXTENDED_COPY(LID4) not supported\n"); |