diff options
author | Ishai Rabinovitz <ishai@mellanox.co.il> | 2007-05-07 00:18:11 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-05-07 00:18:11 -0400 |
commit | 3633b3d096286cf21bc07b16fa6265fb006d0844 (patch) | |
tree | 5219a4104fe5d663c1ef1a69ba2a0352da36c6e9 /drivers/infiniband/ulp | |
parent | d6ef7d68f6f51c5b9de01c542dab8b90067a9c27 (diff) |
IB/srp: Add orig_dgid sysfs attribute to scsi_host
Add an orig_dgid attribute in sysfs for SRP scsi_hosts, so that
userspace can tell what the original dgid value written to the
add_target file was, even if the connection is redirected to a
different port while connecting.
Signed-off-by: Ishai Rabinovitz <ishai@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 22 | ||||
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 5e8ac577f0ad..df526cb9e796 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
@@ -1468,6 +1468,25 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf) | |||
1468 | be16_to_cpu(((__be16 *) target->path.dgid.raw)[7])); | 1468 | be16_to_cpu(((__be16 *) target->path.dgid.raw)[7])); |
1469 | } | 1469 | } |
1470 | 1470 | ||
1471 | static ssize_t show_orig_dgid(struct class_device *cdev, char *buf) | ||
1472 | { | ||
1473 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | ||
1474 | |||
1475 | if (target->state == SRP_TARGET_DEAD || | ||
1476 | target->state == SRP_TARGET_REMOVED) | ||
1477 | return -ENODEV; | ||
1478 | |||
1479 | return sprintf(buf, "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n", | ||
1480 | be16_to_cpu(target->orig_dgid[0]), | ||
1481 | be16_to_cpu(target->orig_dgid[1]), | ||
1482 | be16_to_cpu(target->orig_dgid[2]), | ||
1483 | be16_to_cpu(target->orig_dgid[3]), | ||
1484 | be16_to_cpu(target->orig_dgid[4]), | ||
1485 | be16_to_cpu(target->orig_dgid[5]), | ||
1486 | be16_to_cpu(target->orig_dgid[6]), | ||
1487 | be16_to_cpu(target->orig_dgid[7])); | ||
1488 | } | ||
1489 | |||
1471 | static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf) | 1490 | static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf) |
1472 | { | 1491 | { |
1473 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1492 | 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); | |||
1498 | static CLASS_DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL); | 1517 | static CLASS_DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL); |
1499 | static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL); | 1518 | static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL); |
1500 | static CLASS_DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL); | 1519 | static CLASS_DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL); |
1520 | static CLASS_DEVICE_ATTR(orig_dgid, S_IRUGO, show_orig_dgid, NULL); | ||
1501 | static CLASS_DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL); | 1521 | static CLASS_DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL); |
1502 | static CLASS_DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL); | 1522 | static CLASS_DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL); |
1503 | static CLASS_DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL); | 1523 | 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[] = { | |||
1508 | &class_device_attr_service_id, | 1528 | &class_device_attr_service_id, |
1509 | &class_device_attr_pkey, | 1529 | &class_device_attr_pkey, |
1510 | &class_device_attr_dgid, | 1530 | &class_device_attr_dgid, |
1531 | &class_device_attr_orig_dgid, | ||
1511 | &class_device_attr_zero_req_lim, | 1532 | &class_device_attr_zero_req_lim, |
1512 | &class_device_attr_local_ib_port, | 1533 | &class_device_attr_local_ib_port, |
1513 | &class_device_attr_local_ib_device, | 1534 | &class_device_attr_local_ib_device, |
@@ -1662,6 +1683,7 @@ static int srp_parse_options(const char *buf, struct srp_target_port *target) | |||
1662 | target->path.dgid.raw[i] = simple_strtoul(dgid, NULL, 16); | 1683 | target->path.dgid.raw[i] = simple_strtoul(dgid, NULL, 16); |
1663 | } | 1684 | } |
1664 | kfree(p); | 1685 | kfree(p); |
1686 | memcpy(target->orig_dgid, target->path.dgid.raw, 16); | ||
1665 | break; | 1687 | break; |
1666 | 1688 | ||
1667 | case SRP_OPT_PKEY: | 1689 | case SRP_OPT_PKEY: |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index 2f3319c719a5..1d53c7bc368f 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h | |||
@@ -129,6 +129,7 @@ struct srp_target_port { | |||
129 | unsigned int scsi_id; | 129 | unsigned int scsi_id; |
130 | 130 | ||
131 | struct ib_sa_path_rec path; | 131 | struct ib_sa_path_rec path; |
132 | __be16 orig_dgid[8]; | ||
132 | struct ib_sa_query *path_query; | 133 | struct ib_sa_query *path_query; |
133 | int path_query_id; | 134 | int path_query_id; |
134 | 135 | ||