sdio: fix reference counting in sdio_remove_func()
sdio_remove_func() needs to be more careful about reference counting. It can be called in error paths where sdio_add_func() has never been called e.g. mmc_attach_sdio error path --> mmc_sdio_remove --> sdio_remove_func Signed-off-by: Daniel Drake <dsd@laptop.org> Reviewed-by: Matt Fleming <matt@console-pimps.org> Cc: <linux-mmc@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f6151dfea2
commit
3d10a1ba0d
@ -248,12 +248,15 @@ int sdio_add_func(struct sdio_func *func)
|
||||
/*
|
||||
* Unregister a SDIO function with the driver model, and
|
||||
* (eventually) free it.
|
||||
* This function can be called through error paths where sdio_add_func() was
|
||||
* never executed (because a failure occurred at an earlier point).
|
||||
*/
|
||||
void sdio_remove_func(struct sdio_func *func)
|
||||
{
|
||||
if (sdio_func_present(func))
|
||||
device_del(&func->dev);
|
||||
if (!sdio_func_present(func))
|
||||
return;
|
||||
|
||||
device_del(&func->dev);
|
||||
put_device(&func->dev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user