If device_add() returns error in sdio_add_func(), sdio function is not presented, so the node refcount that hold in sdio_set_of_node() can not be put in sdio_remove_func() which is called from error path. Fix this by calling of_node_put() if device_add() fails. Fixes: 25185f3f31c9 ("mmc: Add SDIO function devicetree subnode parsing") Cc: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> Cc: Hans de Goede <hdegoede@xxxxxxxxxx> Cc: Ulf Hansson <ulf.hansson@xxxxxxxxxx> Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx> --- drivers/mmc/core/sdio_bus.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index babf21a0adeb..b9308813a226 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c @@ -365,6 +365,8 @@ int sdio_add_func(struct sdio_func *func) ret = device_add(&func->dev); if (ret == 0) sdio_func_set_present(func); + else + of_node_put(func->dev.of_node); return ret; } -- 2.25.1