diff options
Diffstat (limited to 'drivers/message/i2o/device.c')
-rw-r--r-- | drivers/message/i2o/device.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/message/i2o/device.c b/drivers/message/i2o/device.c index ee183053fa23..55757af4e3b2 100644 --- a/drivers/message/i2o/device.c +++ b/drivers/message/i2o/device.c | |||
@@ -214,18 +214,17 @@ static struct i2o_device *i2o_device_alloc(void) | |||
214 | * Allocate a new I2O device and initialize it with the LCT entry. The | 214 | * Allocate a new I2O device and initialize it with the LCT entry. The |
215 | * device is appended to the device list of the controller. | 215 | * device is appended to the device list of the controller. |
216 | * | 216 | * |
217 | * Returns a pointer to the I2O device on success or negative error code | 217 | * Returns zero on success, or a -ve errno. |
218 | * on failure. | ||
219 | */ | 218 | */ |
220 | static struct i2o_device *i2o_device_add(struct i2o_controller *c, | 219 | static int i2o_device_add(struct i2o_controller *c, i2o_lct_entry *entry) |
221 | i2o_lct_entry * entry) | ||
222 | { | 220 | { |
223 | struct i2o_device *i2o_dev, *tmp; | 221 | struct i2o_device *i2o_dev, *tmp; |
222 | int rc; | ||
224 | 223 | ||
225 | i2o_dev = i2o_device_alloc(); | 224 | i2o_dev = i2o_device_alloc(); |
226 | if (IS_ERR(i2o_dev)) { | 225 | if (IS_ERR(i2o_dev)) { |
227 | printk(KERN_ERR "i2o: unable to allocate i2o device\n"); | 226 | printk(KERN_ERR "i2o: unable to allocate i2o device\n"); |
228 | return i2o_dev; | 227 | return PTR_ERR(i2o_dev); |
229 | } | 228 | } |
230 | 229 | ||
231 | i2o_dev->lct_data = *entry; | 230 | i2o_dev->lct_data = *entry; |
@@ -236,7 +235,9 @@ static struct i2o_device *i2o_device_add(struct i2o_controller *c, | |||
236 | i2o_dev->iop = c; | 235 | i2o_dev->iop = c; |
237 | i2o_dev->device.parent = &c->device; | 236 | i2o_dev->device.parent = &c->device; |
238 | 237 | ||
239 | device_register(&i2o_dev->device); | 238 | rc = device_register(&i2o_dev->device); |
239 | if (rc) | ||
240 | goto err; | ||
240 | 241 | ||
241 | list_add_tail(&i2o_dev->list, &c->devices); | 242 | list_add_tail(&i2o_dev->list, &c->devices); |
242 | 243 | ||
@@ -270,7 +271,11 @@ static struct i2o_device *i2o_device_add(struct i2o_controller *c, | |||
270 | 271 | ||
271 | pr_debug("i2o: device %s added\n", i2o_dev->device.bus_id); | 272 | pr_debug("i2o: device %s added\n", i2o_dev->device.bus_id); |
272 | 273 | ||
273 | return i2o_dev; | 274 | return 0; |
275 | |||
276 | err: | ||
277 | kfree(i2o_dev); | ||
278 | return rc; | ||
274 | } | 279 | } |
275 | 280 | ||
276 | /** | 281 | /** |