Commit 3d10a1ba authored by Daniel Drake's avatar Daniel Drake Committed by Linus Torvalds

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: default avatarDaniel Drake <dsd@laptop.org>
Reviewed-by: default avatarMatt Fleming <matt@console-pimps.org>
Cc: <linux-mmc@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f6151dfe
...@@ -248,12 +248,15 @@ int sdio_add_func(struct sdio_func *func) ...@@ -248,12 +248,15 @@ int sdio_add_func(struct sdio_func *func)
/* /*
* Unregister a SDIO function with the driver model, and * Unregister a SDIO function with the driver model, and
* (eventually) free it. * (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) void sdio_remove_func(struct sdio_func *func)
{ {
if (sdio_func_present(func)) if (!sdio_func_present(func))
device_del(&func->dev); return;
device_del(&func->dev);
put_device(&func->dev); put_device(&func->dev);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment