|
@@ -1468,6 +1468,25 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf)
|
|
be16_to_cpu(((__be16 *) target->path.dgid.raw)[7]));
|
|
be16_to_cpu(((__be16 *) target->path.dgid.raw)[7]));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static ssize_t show_orig_dgid(struct class_device *cdev, char *buf)
|
|
|
|
+{
|
|
|
|
+ struct srp_target_port *target = host_to_target(class_to_shost(cdev));
|
|
|
|
+
|
|
|
|
+ if (target->state == SRP_TARGET_DEAD ||
|
|
|
|
+ target->state == SRP_TARGET_REMOVED)
|
|
|
|
+ return -ENODEV;
|
|
|
|
+
|
|
|
|
+ return sprintf(buf, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
|
|
|
|
+ be16_to_cpu(target->orig_dgid[0]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[1]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[2]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[3]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[4]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[5]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[6]),
|
|
|
|
+ be16_to_cpu(target->orig_dgid[7]));
|
|
|
|
+}
|
|
|
|
+
|
|
static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf)
|
|
static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf)
|
|
{
|
|
{
|
|
struct srp_target_port *target = host_to_target(class_to_shost(cdev));
|
|
struct srp_target_port *target = host_to_target(class_to_shost(cdev));
|
|
@@ -1498,6 +1517,7 @@ static CLASS_DEVICE_ATTR(ioc_guid, S_IRUGO, show_ioc_guid, NULL);
|
|
static CLASS_DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL);
|
|
static CLASS_DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL);
|
|
static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
|
|
static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
|
|
static CLASS_DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL);
|
|
static CLASS_DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL);
|
|
|
|
+static CLASS_DEVICE_ATTR(orig_dgid, S_IRUGO, show_orig_dgid, NULL);
|
|
static CLASS_DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL);
|
|
static CLASS_DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL);
|
|
static CLASS_DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL);
|
|
static CLASS_DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL);
|
|
static CLASS_DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
|
|
static CLASS_DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
|
|
@@ -1508,6 +1528,7 @@ static struct class_device_attribute *srp_host_attrs[] = {
|
|
&class_device_attr_service_id,
|
|
&class_device_attr_service_id,
|
|
&class_device_attr_pkey,
|
|
&class_device_attr_pkey,
|
|
&class_device_attr_dgid,
|
|
&class_device_attr_dgid,
|
|
|
|
+ &class_device_attr_orig_dgid,
|
|
&class_device_attr_zero_req_lim,
|
|
&class_device_attr_zero_req_lim,
|
|
&class_device_attr_local_ib_port,
|
|
&class_device_attr_local_ib_port,
|
|
&class_device_attr_local_ib_device,
|
|
&class_device_attr_local_ib_device,
|
|
@@ -1662,6 +1683,7 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target)
|
|
target->path.dgid.raw[i] = simple_strtoul(dgid, NULL, 16);
|
|
target->path.dgid.raw[i] = simple_strtoul(dgid, NULL, 16);
|
|
}
|
|
}
|
|
kfree(p);
|
|
kfree(p);
|
|
|
|
+ memcpy(target->orig_dgid, target->path.dgid.raw, 16);
|
|
break;
|
|
break;
|
|
|
|
|
|
case SRP_OPT_PKEY:
|
|
case SRP_OPT_PKEY:
|