Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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);
}