From: Jeff Garzik Date: Sun, 1 Oct 2006 11:27:46 +0000 (-0400) Subject: [netdrvr] phy: Fix bugs in error handling X-Git-Tag: v2.6.19-rc1~372^2~2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b7a00ecd557859c4037b6465fdd6c9a49b1fa649;p=linux-2.6 [netdrvr] phy: Fix bugs in error handling The recent __must_check stuff flagged some error handling bugs. phy/fixed.c: * handle device_bind_driver() failure phy/phy_device.c: * handle device_bind_driver() failure * release rwsem upon failure Signed-off-by: Jeff Garzik --- diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c index 19f7ee6327..94b47c8d0a 100644 --- a/drivers/net/phy/fixed.c +++ b/drivers/net/phy/fixed.c @@ -289,9 +289,13 @@ static int fixed_mdio_register_device(int number, int speed, int duplex) goto probe_fail; } - device_bind_driver(&phydev->dev); + err = device_bind_driver(&phydev->dev); + up_write(&phydev->dev.bus->subsys.rwsem); + if (err) + goto probe_fail; + return 0; probe_fail: diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index ecd3da151e..3bbd5e70c2 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -212,11 +212,13 @@ struct phy_device *phy_attach(struct net_device *dev, err = d->driver->probe(d); - if (err < 0) - return ERR_PTR(err); + if (err >= 0) + err = device_bind_driver(d); - device_bind_driver(d); up_write(&d->bus->subsys.rwsem); + + if (err) + return ERR_PTR(err); } if (phydev->attached_dev) {