diff options
Diffstat (limited to 'drivers/s390/cio/ccwgroup.c')
| -rw-r--r-- | drivers/s390/cio/ccwgroup.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index f26a2ee3aad8..3cba6c9fab11 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c | |||
| @@ -152,7 +152,6 @@ ccwgroup_create(struct device *root, | |||
| 152 | struct ccwgroup_device *gdev; | 152 | struct ccwgroup_device *gdev; |
| 153 | int i; | 153 | int i; |
| 154 | int rc; | 154 | int rc; |
| 155 | int del_drvdata; | ||
| 156 | 155 | ||
| 157 | if (argc > 256) /* disallow dumb users */ | 156 | if (argc > 256) /* disallow dumb users */ |
| 158 | return -EINVAL; | 157 | return -EINVAL; |
| @@ -163,7 +162,6 @@ ccwgroup_create(struct device *root, | |||
| 163 | 162 | ||
| 164 | atomic_set(&gdev->onoff, 0); | 163 | atomic_set(&gdev->onoff, 0); |
| 165 | 164 | ||
| 166 | del_drvdata = 0; | ||
| 167 | for (i = 0; i < argc; i++) { | 165 | for (i = 0; i < argc; i++) { |
| 168 | gdev->cdev[i] = get_ccwdev_by_busid(cdrv, argv[i]); | 166 | gdev->cdev[i] = get_ccwdev_by_busid(cdrv, argv[i]); |
| 169 | 167 | ||
| @@ -180,10 +178,8 @@ ccwgroup_create(struct device *root, | |||
| 180 | rc = -EINVAL; | 178 | rc = -EINVAL; |
| 181 | goto free_dev; | 179 | goto free_dev; |
| 182 | } | 180 | } |
| 183 | } | ||
| 184 | for (i = 0; i < argc; i++) | ||
| 185 | gdev->cdev[i]->dev.driver_data = gdev; | 181 | gdev->cdev[i]->dev.driver_data = gdev; |
| 186 | del_drvdata = 1; | 182 | } |
| 187 | 183 | ||
| 188 | gdev->creator_id = creator_id; | 184 | gdev->creator_id = creator_id; |
| 189 | gdev->count = argc; | 185 | gdev->count = argc; |
| @@ -226,9 +222,9 @@ error: | |||
| 226 | free_dev: | 222 | free_dev: |
| 227 | for (i = 0; i < argc; i++) | 223 | for (i = 0; i < argc; i++) |
| 228 | if (gdev->cdev[i]) { | 224 | if (gdev->cdev[i]) { |
| 229 | put_device(&gdev->cdev[i]->dev); | 225 | if (gdev->cdev[i]->dev.driver_data == gdev) |
| 230 | if (del_drvdata) | ||
| 231 | gdev->cdev[i]->dev.driver_data = NULL; | 226 | gdev->cdev[i]->dev.driver_data = NULL; |
| 227 | put_device(&gdev->cdev[i]->dev); | ||
| 232 | } | 228 | } |
| 233 | kfree(gdev); | 229 | kfree(gdev); |
| 234 | return rc; | 230 | return rc; |
