usbcore: fix endpoint device creation
This patch (as800) straightens out the USB endpoint class device creation routine, fixing a refcount bug in the process. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c40fd5ea56
commit
d5477c1111
|
@ -223,7 +223,7 @@ int usb_create_ep_files(struct device *parent,
|
|||
ep_dev = kzalloc(sizeof(*ep_dev), GFP_KERNEL);
|
||||
if (!ep_dev) {
|
||||
retval = -ENOMEM;
|
||||
goto exit;
|
||||
goto error_alloc;
|
||||
}
|
||||
|
||||
/* fun calculation to determine the minor of this endpoint */
|
||||
|
@ -241,33 +241,31 @@ int usb_create_ep_files(struct device *parent,
|
|||
|
||||
retval = device_register(&ep_dev->dev);
|
||||
if (retval)
|
||||
goto error;
|
||||
goto error_register;
|
||||
retval = sysfs_create_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);
|
||||
if (retval)
|
||||
goto error_group;
|
||||
|
||||
endpoint->ep_dev = ep_dev;
|
||||
|
||||
/* create the symlink to the old-style "ep_XX" directory */
|
||||
sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress);
|
||||
retval = sysfs_create_link(&parent->kobj,
|
||||
&endpoint->ep_dev->dev.kobj, name);
|
||||
retval = sysfs_create_link(&parent->kobj, &ep_dev->dev.kobj, name);
|
||||
if (retval)
|
||||
goto error_link;
|
||||
exit:
|
||||
endpoint->ep_dev = ep_dev;
|
||||
return retval;
|
||||
|
||||
error_link:
|
||||
sysfs_remove_group(&ep_dev->dev.kobj, &ep_dev_attr_grp);
|
||||
|
||||
error_group:
|
||||
device_unregister(&ep_dev->dev);
|
||||
endpoint->ep_dev = NULL;
|
||||
destroy_endpoint_class();
|
||||
return retval;
|
||||
error:
|
||||
|
||||
error_register:
|
||||
kfree(ep_dev);
|
||||
error_alloc:
|
||||
destroy_endpoint_class();
|
||||
exit:
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue