usb: gadget: ffs: call functionfs_unbind() if _ffs_func_bind() fails
Function ffs_do_functionfs_bind() calls functionfs_bind() which allocates usb request and increments refcounts. These things needs to be cleaned up by if further steps of initialization fail by calling functionfs_unbind(). Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> Acked-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
913e4a90b6
commit
55d811211b
1 changed files with 7 additions and 1 deletions
|
@ -2897,11 +2897,17 @@ static int ffs_func_bind(struct usb_configuration *c,
|
||||||
struct usb_function *f)
|
struct usb_function *f)
|
||||||
{
|
{
|
||||||
struct f_fs_opts *ffs_opts = ffs_do_functionfs_bind(f, c);
|
struct f_fs_opts *ffs_opts = ffs_do_functionfs_bind(f, c);
|
||||||
|
struct ffs_function *func = ffs_func_from_usb(f);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (IS_ERR(ffs_opts))
|
if (IS_ERR(ffs_opts))
|
||||||
return PTR_ERR(ffs_opts);
|
return PTR_ERR(ffs_opts);
|
||||||
|
|
||||||
return _ffs_func_bind(c, f);
|
ret = _ffs_func_bind(c, f);
|
||||||
|
if (ret && !--ffs_opts->refcnt)
|
||||||
|
functionfs_unbind(func->ffs);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue