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:
EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
-void xenbus_probe(void *unused)
+void xenbus_probe(struct work_struct *unused)
{
BUG_ON((xenstored_ready <= 0));
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.
/* 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) >>
}
/* 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);
* 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;
}