After an rtl_fw_write_firmware() failure, r8169_apply_firmware() does not release the firmware. A TODO notes that it should be released in this case. Release the firmware on failure and remove the TODO. Signed-off-by: Matheus Alves de Almeida --- drivers/net/ethernet/realtek/r8169_main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 3c37c5a6c..c54423cd2 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -2596,12 +2596,14 @@ void r8169_apply_firmware(struct rtl8169_private *tp) { int val; - /* TODO: release firmware if rtl_fw_write_firmware signals failure. */ if (tp->rtl_fw) { - rtl_fw_write_firmware(tp, tp->rtl_fw); + int rc = rtl_fw_write_firmware(tp, tp->rtl_fw); /* At least one firmware doesn't reset tp->ocp_base. */ tp->ocp_base = OCP_STD_PHY_BASE; + if (rc < 0) + rtl_release_firmware(tp); + /* PHY soft reset may still be in progress */ if (tp->phydev) phy_read_poll_timeout(tp->phydev, MII_BMCR, val, -- 2.43.0