Skip to content

Commit

Permalink
s390/cio/chp: cleanup attribute usage
Browse files Browse the repository at this point in the history
Let the driver core handle device attribute creation and removal. This
will simplify the code and eliminates races between attribute
availability and userspace notification via uevents.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Sebastian Ott authored and Martin Schwidefsky committed Jun 5, 2012
1 parent eb54619 commit ed35ba9
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions drivers/s390/cio/chp.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,10 +362,13 @@ static struct attribute *chp_attrs[] = {
&dev_attr_shared.attr,
NULL,
};

static struct attribute_group chp_attr_group = {
.attrs = chp_attrs,
};
static const struct attribute_group *chp_attr_groups[] = {
&chp_attr_group,
NULL,
};

static void chp_release(struct device *dev)
{
Expand Down Expand Up @@ -397,6 +400,7 @@ int chp_new(struct chp_id chpid)
chp->chpid = chpid;
chp->state = 1;
chp->dev.parent = &channel_subsystems[chpid.cssid]->device;
chp->dev.groups = chp_attr_groups;
chp->dev.release = chp_release;
mutex_init(&chp->lock);

Expand Down Expand Up @@ -426,16 +430,10 @@ int chp_new(struct chp_id chpid)
put_device(&chp->dev);
goto out;
}
ret = sysfs_create_group(&chp->dev.kobj, &chp_attr_group);
if (ret) {
device_unregister(&chp->dev);
goto out;
}
mutex_lock(&channel_subsystems[chpid.cssid]->mutex);
if (channel_subsystems[chpid.cssid]->cm_enabled) {
ret = chp_add_cmg_attr(chp);
if (ret) {
sysfs_remove_group(&chp->dev.kobj, &chp_attr_group);
device_unregister(&chp->dev);
mutex_unlock(&channel_subsystems[chpid.cssid]->mutex);
goto out;
Expand Down

0 comments on commit ed35ba9

Please sign in to comment.