From c1c9c7cd9f33ad6ff4407638060fe2730560bd56 Mon Sep 17 00:00:00 2001 From: Stefan Richter Date: Tue, 10 Oct 2006 21:19:21 +0200 Subject: ieee1394: handle sysfs errors Handle driver core errors with as much care as appropriate. Signed-off-by: Stefan Richter --- drivers/ieee1394/hosts.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'drivers/ieee1394/hosts.c') diff --git a/drivers/ieee1394/hosts.c b/drivers/ieee1394/hosts.c index fbf17cfe79b0..ee82a5320bf7 100644 --- a/drivers/ieee1394/hosts.c +++ b/drivers/ieee1394/hosts.c @@ -131,10 +131,8 @@ struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, return NULL; h->csr.rom = csr1212_create_csr(&csr_bus_ops, CSR_BUS_INFO_SIZE, h); - if (!h->csr.rom) { - kfree(h); - return NULL; - } + if (!h->csr.rom) + goto fail; h->hostdata = h + 1; h->driver = drv; @@ -173,11 +171,19 @@ struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, h->class_dev.class = &hpsb_host_class; snprintf(h->class_dev.class_id, BUS_ID_SIZE, "fw-host%d", h->id); - device_register(&h->device); - class_device_register(&h->class_dev); + if (device_register(&h->device)) + goto fail; + if (class_device_register(&h->class_dev)) { + device_unregister(&h->device); + goto fail; + } get_device(&h->device); return h; + +fail: + kfree(h); + return NULL; } int hpsb_add_host(struct hpsb_host *host) -- cgit v1.2.3