|
@@ -53,18 +53,13 @@ static int target_xcopy_gen_naa_ieee(struct se_device *dev, unsigned char *buf)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int target_xcopy_locate_se_dev_e4(struct se_cmd *se_cmd, struct xcopy_op *xop,
|
|
|
- bool src)
|
|
|
+static int target_xcopy_locate_se_dev_e4(const unsigned char *dev_wwn,
|
|
|
+ struct se_device **found_dev)
|
|
|
{
|
|
|
struct se_device *se_dev;
|
|
|
- unsigned char tmp_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN], *dev_wwn;
|
|
|
+ unsigned char tmp_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN];
|
|
|
int rc;
|
|
|
|
|
|
- if (src)
|
|
|
- dev_wwn = &xop->dst_tid_wwn[0];
|
|
|
- else
|
|
|
- dev_wwn = &xop->src_tid_wwn[0];
|
|
|
-
|
|
|
mutex_lock(&g_device_mutex);
|
|
|
list_for_each_entry(se_dev, &g_device_list, g_dev_node) {
|
|
|
|
|
@@ -78,15 +73,8 @@ static int target_xcopy_locate_se_dev_e4(struct se_cmd *se_cmd, struct xcopy_op
|
|
|
if (rc != 0)
|
|
|
continue;
|
|
|
|
|
|
- if (src) {
|
|
|
- xop->dst_dev = se_dev;
|
|
|
- pr_debug("XCOPY 0xe4: Setting xop->dst_dev: %p from located"
|
|
|
- " se_dev\n", xop->dst_dev);
|
|
|
- } else {
|
|
|
- xop->src_dev = se_dev;
|
|
|
- pr_debug("XCOPY 0xe4: Setting xop->src_dev: %p from located"
|
|
|
- " se_dev\n", xop->src_dev);
|
|
|
- }
|
|
|
+ *found_dev = se_dev;
|
|
|
+ pr_debug("XCOPY 0xe4: located se_dev: %p\n", se_dev);
|
|
|
|
|
|
rc = target_depend_item(&se_dev->dev_group.cg_item);
|
|
|
if (rc != 0) {
|
|
@@ -247,9 +235,11 @@ static int target_xcopy_parse_target_descriptors(struct se_cmd *se_cmd,
|
|
|
}
|
|
|
|
|
|
if (xop->op_origin == XCOL_SOURCE_RECV_OP)
|
|
|
- rc = target_xcopy_locate_se_dev_e4(se_cmd, xop, true);
|
|
|
+ rc = target_xcopy_locate_se_dev_e4(xop->dst_tid_wwn,
|
|
|
+ &xop->dst_dev);
|
|
|
else
|
|
|
- rc = target_xcopy_locate_se_dev_e4(se_cmd, xop, false);
|
|
|
+ rc = target_xcopy_locate_se_dev_e4(xop->src_tid_wwn,
|
|
|
+ &xop->src_dev);
|
|
|
/*
|
|
|
* If a matching IEEE NAA 0x83 descriptor for the requested device
|
|
|
* is not located on this node, return COPY_ABORTED with ASQ/ASQC
|