|
@@ -3392,25 +3392,28 @@ static int __init fsg_bind(struct usb_gadget *gadget)
|
|
|
dev_set_name(&curlun->dev,"%s-lun%d",
|
|
|
dev_name(&gadget->dev), i);
|
|
|
|
|
|
- if ((rc = device_register(&curlun->dev)) != 0) {
|
|
|
+ kref_get(&fsg->ref);
|
|
|
+ rc = device_register(&curlun->dev);
|
|
|
+ if (rc) {
|
|
|
INFO(fsg, "failed to register LUN%d: %d\n", i, rc);
|
|
|
- goto out;
|
|
|
- }
|
|
|
- if ((rc = device_create_file(&curlun->dev,
|
|
|
- &dev_attr_ro)) != 0 ||
|
|
|
- (rc = device_create_file(&curlun->dev,
|
|
|
- &dev_attr_nofua)) != 0 ||
|
|
|
- (rc = device_create_file(&curlun->dev,
|
|
|
- &dev_attr_file)) != 0) {
|
|
|
- device_unregister(&curlun->dev);
|
|
|
+ put_device(&curlun->dev);
|
|
|
goto out;
|
|
|
}
|
|
|
curlun->registered = 1;
|
|
|
- kref_get(&fsg->ref);
|
|
|
+
|
|
|
+ rc = device_create_file(&curlun->dev, &dev_attr_ro);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+ rc = device_create_file(&curlun->dev, &dev_attr_nofua);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
+ rc = device_create_file(&curlun->dev, &dev_attr_file);
|
|
|
+ if (rc)
|
|
|
+ goto out;
|
|
|
|
|
|
if (mod_data.file[i] && *mod_data.file[i]) {
|
|
|
- if ((rc = fsg_lun_open(curlun,
|
|
|
- mod_data.file[i])) != 0)
|
|
|
+ rc = fsg_lun_open(curlun, mod_data.file[i]);
|
|
|
+ if (rc)
|
|
|
goto out;
|
|
|
} else if (!mod_data.removable) {
|
|
|
ERROR(fsg, "no file given for LUN%d\n", i);
|