From: Ben Hutchings Date: Tue, 26 Jan 2010 18:27:09 +0000 (+0000) Subject: starfire: clean up properly if firmware loading fails X-Git-Tag: v2.6.33-rc7~20^2~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c928febf4bc703ea542340e5a208e0445d998839;p=platform%2Fkernel%2Flinux-3.10.git starfire: clean up properly if firmware loading fails netdev_open() will return without cleaning up net device or hardware state if firmware loading fails. This results in a BUG() on a second attempt to bring the interface up, reported in , and probably has even worse effects if the driver is removed afterwards. Call netdev_close() to clean up on failure. Addresses http://bugzilla.kernel.org/show_bug.cgi?id=15091 Signed-off-by: Ben Hutchings Reported-by: Michael Moffatt Tested-by: Michael Moffatt Cc: "David S. Miller" Cc: Signed-off-by: Andrew Morton Signed-off-by: David S. Miller --- diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 95db60a..f952113 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -1063,7 +1063,7 @@ static int netdev_open(struct net_device *dev) if (retval) { printk(KERN_ERR "starfire: Failed to load firmware \"%s\"\n", FIRMWARE_RX); - return retval; + goto out_init; } if (fw_rx->size % 4) { printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n", @@ -1108,6 +1108,9 @@ out_tx: release_firmware(fw_tx); out_rx: release_firmware(fw_rx); +out_init: + if (retval) + netdev_close(dev); return retval; }