diff options
Diffstat (limited to 'drivers/misc/enclosure.c')
| -rw-r--r-- | drivers/misc/enclosure.c | 36 | 
1 files changed, 18 insertions, 18 deletions
diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c index 00e5fcac8fd..2cf2bbc0b92 100644 --- a/drivers/misc/enclosure.c +++ b/drivers/misc/enclosure.c @@ -198,6 +198,13 @@ static void enclosure_remove_links(struct enclosure_component *cdev)  {  	char name[ENCLOSURE_NAME_SIZE]; +	/* +	 * In odd circumstances, like multipath devices, something else may +	 * already have removed the links, so check for this condition first. +	 */ +	if (!cdev->dev->kobj.sd) +		return; +  	enclosure_link_name(cdev, name);  	sysfs_remove_link(&cdev->dev->kobj, name);  	sysfs_remove_link(&cdev->cdev.kobj, "device"); @@ -239,7 +246,7 @@ static void enclosure_component_release(struct device *dev)  	put_device(dev->parent);  } -static const struct attribute_group *enclosure_groups[]; +static const struct attribute_group *enclosure_component_groups[];  /**   * enclosure_component_register - add a particular component to an enclosure @@ -282,7 +289,7 @@ enclosure_component_register(struct enclosure_device *edev,  		dev_set_name(cdev, "%u", number);  	cdev->release = enclosure_component_release; -	cdev->groups = enclosure_groups; +	cdev->groups = enclosure_component_groups;  	err = device_register(cdev);  	if (err) { @@ -365,25 +372,26 @@ EXPORT_SYMBOL_GPL(enclosure_remove_device);   * sysfs pieces below   */ -static ssize_t enclosure_show_components(struct device *cdev, -					 struct device_attribute *attr, -					 char *buf) +static ssize_t components_show(struct device *cdev, +			       struct device_attribute *attr, char *buf)  {  	struct enclosure_device *edev = to_enclosure_device(cdev);  	return snprintf(buf, 40, "%d\n", edev->components);  } +static DEVICE_ATTR_RO(components); -static struct device_attribute enclosure_attrs[] = { -	__ATTR(components, S_IRUGO, enclosure_show_components, NULL), -	__ATTR_NULL +static struct attribute *enclosure_class_attrs[] = { +	&dev_attr_components.attr, +	NULL,  }; +ATTRIBUTE_GROUPS(enclosure_class);  static struct class enclosure_class = {  	.name			= "enclosure",  	.owner			= THIS_MODULE,  	.dev_release		= enclosure_release, -	.dev_attrs		= enclosure_attrs, +	.dev_groups		= enclosure_class_groups,  };  static const char *const enclosure_status [] = { @@ -536,15 +544,7 @@ static struct attribute *enclosure_component_attrs[] = {  	&dev_attr_type.attr,  	NULL  }; - -static struct attribute_group enclosure_group = { -	.attrs = enclosure_component_attrs, -}; - -static const struct attribute_group *enclosure_groups[] = { -	&enclosure_group, -	NULL -}; +ATTRIBUTE_GROUPS(enclosure_component);  static int __init enclosure_init(void)  {  | 
