On 08/25/2014 07:34 PM, Song Liu wrote: > From: Song Liu [mailto:songliubraving@xxxxxx] > Sent: Monday, August 25, 2014 10:26 AM > To: Song Liu > Cc: Dan Williams; Hannes Reinecke > Subject: [PATCH 3/5] SES: add enclosure logical id > > From: Dan Williams <dan.j.williams@xxxxxxxxx> > > Export the NAA logical id for the enclosure. This is optionally available from the sas_transport_class, but it is really a property of the enclosure. > > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> > Signed-off-by: Song Liu <songliubraving@xxxxxx> > Reviewed-by: Jens Axboe <axboe@xxxxxx> > Cc: Hannes Reinecke <hare@xxxxxxx> > --- > drivers/misc/enclosure.c | 13 +++++++++++++ > drivers/scsi/ses.c | 9 +++++++++ > include/linux/enclosure.h | 1 + > 3 files changed, 23 insertions(+) > > diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c index 15faf61..646068a 100644 > --- a/drivers/misc/enclosure.c > +++ b/drivers/misc/enclosure.c > @@ -395,8 +395,21 @@ static ssize_t components_show(struct device *cdev, } static DEVICE_ATTR_RO(components); > > +static ssize_t id_show(struct device *cdev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct enclosure_device *edev = to_enclosure_device(cdev); > + > + if (edev->cb->show_id) > + return edev->cb->show_id(edev, buf); > + return 0; > +} > +static DEVICE_ATTR_RO(id); > + > static struct attribute *enclosure_class_attrs[] = { > &dev_attr_components.attr, > + &dev_attr_id.attr, > NULL, > }; > ATTRIBUTE_GROUPS(enclosure_class); Maybe you should return -EINVAL or something here; '0' would mean an enclosure id of length '0', which is a different meaning from 'enclosure id not available'. > diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 8f0a62a..61deb4e 100644 > --- a/drivers/scsi/ses.c > +++ b/drivers/scsi/ses.c > @@ -258,6 +258,14 @@ static int ses_set_active(struct enclosure_device *edev, > return ses_set_page2_descriptor(edev, ecomp, desc); } > > +static int ses_show_id(struct enclosure_device *edev, char *buf) { > + struct ses_device *ses_dev = edev->scratch; > + unsigned long long id = get_unaligned_be64(ses_dev->page1+8+4); > + > + return sprintf(buf, "%#llx\n", id); > +} > + > static struct enclosure_component_callbacks ses_enclosure_callbacks = { > .get_fault = ses_get_fault, > .set_fault = ses_set_fault, > @@ -265,6 +273,7 @@ static struct enclosure_component_callbacks ses_enclosure_callbacks = { > .get_locate = ses_get_locate, > .set_locate = ses_set_locate, > .set_active = ses_set_active, > + .show_id = ses_show_id, > }; > > struct ses_host_edev { > diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h index a835d33..807622b 100644 > --- a/include/linux/enclosure.h > +++ b/include/linux/enclosure.h > @@ -79,6 +79,7 @@ struct enclosure_component_callbacks { > int (*set_locate)(struct enclosure_device *, > struct enclosure_component *, > enum enclosure_component_setting); > + int (*show_id)(struct enclosure_device *, char *buf); > }; > > > -- > 1.8.1 > Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage hare@xxxxxxx +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg) -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html