> > Yes, that's a very valid point, how about we even do this: > > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c > index f84414b8f2ee..dc666ec13651 100644 > --- a/drivers/net/phy/phy_device.c > +++ b/drivers/net/phy/phy_device.c > @@ -960,15 +960,21 @@ int phy_attach_direct(struct net_device *dev, > struct phy_device *phydev, > > phydev->attached_dev = dev; > dev->phydev = phydev; > + > + /* Some Ethernet drivers try to connect to a PHY device before > + * calling register_netdevice() -> netdev_register_kobject() and > + * does the dev->dev.kobj initialization. Here we only check for > + * success which indicates that the network device kobject is > + * ready. > + */ > err = sysfs_create_link(&phydev->mdio.dev.kobj, &dev->dev.kobj, > "attached_dev"); > - if (err) > - goto error; > - > - err = sysfs_create_link(&dev->dev.kobj, &phydev->mdio.dev.kobj, > - "phydev"); > - if (err) > - goto error; > + if (!err) { > + err = sysfs_create_link(&dev->dev.kobj, > &phydev->mdio.dev.kobj, > + "phydev"); > + if (err) > + goto error; > + } > > phydev->dev_flags = flags; > Looks better and clean.
How about sysfs_remove_link() in phy_detach()? - Woojung