When doing the audit for this change, it was obvious that several drivers
allocate but never free the net_device.
This fixes these drivers. This patch is riskier than the earlier
ones, because it isn't just a simple substitution and maybe there
is a reason they never free.
diff -Nru a/drivers/message/fusion/mptlan.c b/drivers/message/fusion/mptlan.c
--- a/drivers/message/fusion/mptlan.c Tue Aug 19 09:05:35 2003
+++ b/drivers/message/fusion/mptlan.c Tue Aug 19 09:05:35 2003
@@ -1534,7 +1534,7 @@
printk (KERN_INFO ": %s/%s: Fusion MPT LAN device
unregistered\n",
IOC_AND_NETDEV_NAMES_s_s(dev));
unregister_netdev(dev);
- //mpt_landev[i] = (struct net_device *) 0xdeadbeef; /* Debug */
+ free_netdev(dev);
mpt_landev[i] = NULL;
}
diff -Nru a/drivers/net/lasi_82596.c b/drivers/net/lasi_82596.c
--- a/drivers/net/lasi_82596.c Tue Aug 19 09:05:35 2003
+++ b/drivers/net/lasi_82596.c Tue Aug 19 09:05:35 2003
@@ -1596,7 +1596,7 @@
lp = (struct i596_private *) netdevice->priv;
dma_free_noncoherent(lp->dev, sizeof(struct i596_private),
(void *)netdevice->mem_start,
lp->dma_addr);
- netdevice->priv = NULL;
+ free_netdev(netdevice);
}
unregister_parisc_driver(&lan_driver);
diff -Nru a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
--- a/drivers/net/wan/cosa.c Tue Aug 19 09:05:35 2003
+++ b/drivers/net/wan/cosa.c Tue Aug 19 09:05:35 2003
@@ -632,6 +632,7 @@
{
sppp_detach(chan->pppdev.dev);
unregister_netdev(chan->pppdev.dev);
+ free_netdev(chan->ppp.dev);
}
static int cosa_sppp_open(struct net_device *d)
diff -Nru a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
--- a/drivers/usb/gadget/ether.c Tue Aug 19 09:05:35 2003
+++ b/drivers/usb/gadget/ether.c Tue Aug 19 09:05:35 2003
@@ -1635,6 +1635,7 @@
}
unregister_netdev (dev->net);
+ free_netdev(dev->net);
/* assuming we used keventd, it must quiesce too */
flush_scheduled_work ();
|