summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSachin Bhamare <sbhamare@panasas.com>2012-02-09 17:09:32 -0800
committerBoaz Harrosh <bharrosh@panasas.com>2012-10-15 16:21:17 -0700
commitb6755ffb0c03c2e763cc56f72cc2ceaba8ea2805 (patch)
tree074e74b6d84791a44df4ec839b3bc9398e2a8601
parentddffeb8c4d0331609ef2581d84de4d763607bd37 (diff)
downloadlinux-b6755ffb0c03c2e763cc56f72cc2ceaba8ea2805.tar.gz
linux-b6755ffb0c03c2e763cc56f72cc2ceaba8ea2805.tar.bz2
linux-b6755ffb0c03c2e763cc56f72cc2ceaba8ea2805.zip
osduld: Add osdname & systemid sysfs at scsi_osd class
This patch adds the support for following two read-only sysfs attributes to scsi_osd class members : osdname & systemid These attributes will show up as below in sysfs class hierarchy: /sys/class/scsi_osd/osdX/osdname /sys/class/scsi_osd/osdX/systemid The osdname & systemid are OSD device attributes which uniquely identify a device on the network, while it's IP and certainly it's /dev/osdX device path might change. Userspace utilities (e.g. mkfs.exofs) can parse these attributes to identify the correct OSD in safer and faster way. (Today osd apps open each device in the system and send a attributes query for these, in order to access the user requested device) Signed-off-by: Sachin Bhamare <sbhamare@panasas.com> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
-rw-r--r--drivers/scsi/osd/osd_uld.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
index d4ed9eb52657..43754176a7b7 100644
--- a/drivers/scsi/osd/osd_uld.c
+++ b/drivers/scsi/osd/osd_uld.c
@@ -97,9 +97,37 @@ struct osd_dev_handle {
static DEFINE_IDA(osd_minor_ida);
+/*
+ * scsi sysfs attribute operations
+ */
+static ssize_t osdname_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct osd_uld_device *ould = container_of(dev, struct osd_uld_device,
+ class_dev);
+ return sprintf(buf, "%s\n", ould->odi.osdname);
+}
+
+static ssize_t systemid_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct osd_uld_device *ould = container_of(dev, struct osd_uld_device,
+ class_dev);
+
+ memcpy(buf, ould->odi.systemid, ould->odi.systemid_len);
+ return ould->odi.systemid_len;
+}
+
+static struct device_attribute osd_uld_attrs[] = {
+ __ATTR(osdname, S_IRUGO, osdname_show, NULL),
+ __ATTR(systemid, S_IRUGO, systemid_show, NULL),
+ __ATTR_NULL,
+};
+
static struct class osd_uld_class = {
.owner = THIS_MODULE,
.name = "scsi_osd",
+ .dev_attrs = osd_uld_attrs,
};
/*