X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fxen%2Fxenbus%2Fxenbus_probe.c;fp=drivers%2Fxen%2Fxenbus%2Fxenbus_probe.c;h=f83c3211f0fac3223d2c3072eee6e3334ddd5b4b;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=733c5d976e6a5094eb4afe5aa60fa701a9cf1e2e;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 733c5d976..f83c3211f 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -620,8 +620,13 @@ static int xenbus_probe_node(struct xen_bus_type *bus, if (err) goto fail; - device_create_file(&xendev->dev, &dev_attr_nodename); - device_create_file(&xendev->dev, &dev_attr_devtype); + err = device_create_file(&xendev->dev, &dev_attr_nodename); + if (err) + goto fail; + + err = device_create_file(&xendev->dev, &dev_attr_devtype); + if (err) + goto fail; return 0; fail: @@ -930,7 +935,7 @@ void unregister_xenstore_notifier(struct notifier_block *nb) EXPORT_SYMBOL_GPL(unregister_xenstore_notifier); -void xenbus_probe(void *unused) +void xenbus_probe(struct work_struct *unused) { BUG_ON((xenstored_ready <= 0)); @@ -998,8 +1003,12 @@ static int __init xenbus_probe_init(void) return -ENODEV; /* Register ourselves with the kernel bus subsystem */ - bus_register(&xenbus_frontend.bus); - bus_register(&xenbus_backend.bus); + err = bus_register(&xenbus_frontend.bus); + if (err) + goto err_frontend_bus; + err = bus_register(&xenbus_backend.bus); + if (err) + goto err_backend_bus; /* * Domain0 doesn't have a store_evtchn or store_mfn yet. @@ -1009,8 +1018,10 @@ static int __init xenbus_probe_init(void) /* Allocate page. */ page = get_zeroed_page(GFP_KERNEL); - if (!page) - return -ENOMEM; + if (!page) { + err = -ENOMEM; + goto err_nomem; + } xen_store_mfn = xen_start_info->store_mfn = pfn_to_mfn(virt_to_phys((void *)page) >> @@ -1069,8 +1080,12 @@ static int __init xenbus_probe_init(void) } /* Register ourselves with the kernel device subsystem */ - device_register(&xenbus_frontend.dev); - device_register(&xenbus_backend.dev); + err = device_register(&xenbus_frontend.dev); + if (err) + goto err; + err = device_register(&xenbus_backend.dev); + if (err) + goto err; if (!is_initial_xendomain()) xenbus_probe(NULL); @@ -1086,7 +1101,11 @@ static int __init xenbus_probe_init(void) * must exist because front/backend drivers will use them when they are * registered. */ - + err_nomem: + bus_unregister(&xenbus_frontend.bus); + err_backend_bus: + bus_unregister(&xenbus_frontend.bus); + err_frontend_bus: return err; }