hpsa: add sas_address to sysfs device attibute
authorJoseph T Handzik <joseph.t.handzik@hpe.com>
Wed, 27 Apr 2016 22:13:33 +0000 (17:13 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 29 Apr 2016 23:08:24 +0000 (19:08 -0400)
There have been companies requesting a sysfs entry
to obtain the sas address of device.

Reviewed-by: Scott Teel <scott.teel@microsemi.com>
Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: Don Brace <don.brace@microsemi.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hpsa.c

index 9baf04e13a706f825c4e5c604bcd9ea285aee831..a677dfe09998a9c8b5796cc0e73c0f27c08eb2d9 100644 (file)
@@ -728,6 +728,29 @@ static ssize_t unique_id_show(struct device *dev,
                        sn[12], sn[13], sn[14], sn[15]);
 }
 
+static ssize_t sas_address_show(struct device *dev,
+             struct device_attribute *attr, char *buf)
+{
+       struct ctlr_info *h;
+       struct scsi_device *sdev;
+       struct hpsa_scsi_dev_t *hdev;
+       unsigned long flags;
+       u64 sas_address;
+
+       sdev = to_scsi_device(dev);
+       h = sdev_to_hba(sdev);
+       spin_lock_irqsave(&h->lock, flags);
+       hdev = sdev->hostdata;
+       if (!hdev || is_logical_device(hdev) || !hdev->expose_device) {
+               spin_unlock_irqrestore(&h->lock, flags);
+               return -ENODEV;
+       }
+       sas_address = hdev->sas_address;
+       spin_unlock_irqrestore(&h->lock, flags);
+
+       return snprintf(buf, PAGE_SIZE, "0x%016llx\n", sas_address);
+}
+
 static ssize_t host_show_hp_ssd_smart_path_enabled(struct device *dev,
             struct device_attribute *attr, char *buf)
 {
@@ -840,6 +863,7 @@ static DEVICE_ATTR(raid_level, S_IRUGO, raid_level_show, NULL);
 static DEVICE_ATTR(lunid, S_IRUGO, lunid_show, NULL);
 static DEVICE_ATTR(unique_id, S_IRUGO, unique_id_show, NULL);
 static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
+static DEVICE_ATTR(sas_address, S_IRUGO, sas_address_show, NULL);
 static DEVICE_ATTR(hp_ssd_smart_path_enabled, S_IRUGO,
                        host_show_hp_ssd_smart_path_enabled, NULL);
 static DEVICE_ATTR(path_info, S_IRUGO, path_info_show, NULL);
@@ -865,6 +889,7 @@ static struct device_attribute *hpsa_sdev_attrs[] = {
        &dev_attr_unique_id,
        &dev_attr_hp_ssd_smart_path_enabled,
        &dev_attr_path_info,
+       &dev_attr_sas_address,
        NULL,
 };