diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-12-06 23:35:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:31 -0500 |
commit | 3889b26bebd3e3cf5a3b95da683bab2f6462133d (patch) | |
tree | 83ca122f725e09dae209ac4e23203e7164649605 /drivers/message/i2o/device.c | |
parent | 07354a00901d103085e4376b7df0aad264c1836a (diff) |
[PATCH] I2O: more error checking
i2o_scsi: handle sysfs failure
i2o_device:
* convert i2o_device_add() to return integer error code
rather than pointer. Fortunately -nobody- checks the return code of
this function, so changing has nil impact.
* handle errors thrown by device_register()
More work in i2o_device remains.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Cc: Markus Lidel <Markus.Lidel@shadowconnect.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
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 | /** |