greybus: interface: disable control connection on initialisation errors

Disable the control connection immediately on any errors during
interface initialisation as there's no need to keep it around for an
interface in an error state.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Jeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Johan Hovold 2016-03-09 12:20:39 +01:00 коммит произвёл Greg Kroah-Hartman
Родитель 986d691108
Коммит 11548c8327
1 изменённых файлов: 11 добавлений и 4 удалений

Просмотреть файл

@ -198,15 +198,20 @@ int gb_interface_init(struct gb_interface *intf)
size = gb_control_get_manifest_size_operation(intf);
if (size <= 0) {
dev_err(&intf->dev, "failed to get manifest size: %d\n", size);
if (size)
return size;
ret = size;
else
return -EINVAL;
ret = -EINVAL;
goto err_disable_control;
}
manifest = kmalloc(size, GFP_KERNEL);
if (!manifest)
return -ENOMEM;
if (!manifest) {
ret = -ENOMEM;
goto err_disable_control;
}
/* Get manifest using control protocol on CPort */
ret = gb_control_get_manifest_operation(intf, manifest, size);
@ -242,6 +247,8 @@ err_destroy_bundles:
gb_bundle_destroy(bundle);
err_free_manifest:
kfree(manifest);
err_disable_control:
gb_control_disable(intf->control);
return ret;
}