netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] 2.6.0-test6 - more free_netdev() conversion
@ 2003-09-29 22:06 Francois Romieu
  2003-10-14 17:39 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: Francois Romieu @ 2003-09-29 22:06 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev, David S. Miller

Compiles ok (with true .o generated, yeah). Please review.

free_netdev() of devices allocated through use of alloc_netdev().
Though baroque, drivers/net/3c515.c now uses alloc_etherdev().


 drivers/net/3c515.c   |   23 ++++++++++++-----------
 drivers/net/defxx.c   |    2 +-
 drivers/net/dummy.c   |    2 +-
 drivers/net/eql.c     |    2 +-
 drivers/net/ns83820.c |    2 +-
 drivers/net/plip.c    |   14 ++++++++++----
 drivers/net/shaper.c  |   11 ++++++++---
 drivers/net/tun.c     |   18 +++++++++---------
 9 files changed, 43 insertions(+), 31 deletions(-)

diff -puN drivers/net/3c515.c~free_netdev drivers/net/3c515.c
--- linux-2.6.0-test6/drivers/net/3c515.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/3c515.c	Mon Sep 29 21:41:27 2003
@@ -569,14 +569,13 @@ static struct net_device *corkscrew_foun
 
 #ifdef MODULE
 	/* Allocate and fill new device structure. */
-	int dev_size = sizeof(struct net_device) + sizeof(struct corkscrew_private) + 15;	/* Pad for alignment */
+	int dev_size = sizeof(struct corkscrew_private);
 
-	dev = (struct net_device *) kmalloc(dev_size, GFP_KERNEL);
+	dev = alloc_etherdev(dev_size);
 	if (!dev)
-		return NULL;
+		goto err_out;
 	memset(dev, 0, dev_size);
-	/* Align the Rx and Tx ring entries.  */
-	dev->priv = (void *) (((long) dev + sizeof(struct net_device) + 15) & ~15);
+
 	vp = (struct corkscrew_private *) dev->priv;
 	dev->base_addr = ioaddr;
 	dev->irq = irq;
@@ -593,19 +592,16 @@ static struct net_device *corkscrew_foun
 		vp->full_duplex = 0;
 		vp->bus_master = 0;
 	}
-	ether_setup(dev);
 	vp->next_module = root_corkscrew_dev;
 	root_corkscrew_dev = dev;
 	SET_MODULE_OWNER(dev);
-	if (register_netdev(dev) != 0) {
-		kfree(dev);
-		return NULL;
-	}
+	if (register_netdev(dev) < 0)
+		goto err_free_dev;
 #else				/* not a MODULE */
 	/* Caution: quad-word alignment required for rings! */
 	dev->priv = kmalloc(sizeof(struct corkscrew_private), GFP_KERNEL);
 	if (!dev->priv)
-		return NULL;
+		goto err_out;
 	memset(dev->priv, 0, sizeof(struct corkscrew_private));
 	dev = init_etherdev(dev, sizeof(struct corkscrew_private));
 	dev->base_addr = ioaddr;
@@ -627,6 +623,11 @@ static struct net_device *corkscrew_foun
 	corkscrew_probe1(dev);
 #endif				/* MODULE */
 	return dev;
+
+err_free_dev:
+	free_netdev(dev);
+err_out:
+	return NULL;
 }
 
 static int corkscrew_probe1(struct net_device *dev)
diff -puN drivers/net/defxx.c~free_netdev drivers/net/defxx.c
--- linux-2.6.0-test6/drivers/net/defxx.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/defxx.c	Mon Sep 29 21:41:27 2003
@@ -491,7 +491,7 @@ err_out_kfree:
 err_out_region:
 	release_region(ioaddr, pdev ? PFI_K_CSR_IO_LEN : PI_ESIC_K_CSR_IO_LEN);
 err_out:
-	kfree(dev);
+	free_netdev(dev);
 	return err;
 }
 
diff -puN drivers/net/dummy.c~free_netdev drivers/net/dummy.c
--- linux-2.6.0-test6/drivers/net/dummy.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/dummy.c	Mon Sep 29 21:41:27 2003
@@ -96,7 +96,7 @@ static int __init dummy_init_module(void
 		return -ENOMEM;
 
 	if ((err = register_netdev(dev_dummy))) {
-		kfree(dev_dummy);
+		free_netdev(dev_dummy);
 		dev_dummy = NULL;
 	}
 	return err;
diff -puN drivers/net/eql.c~free_netdev drivers/net/eql.c
--- linux-2.6.0-test6/drivers/net/eql.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/eql.c	Mon Sep 29 21:41:27 2003
@@ -600,7 +600,7 @@ static int __init eql_init_module(void)
 
 	err = register_netdev(dev_eql);
 	if (err) 
-		kfree(dev_eql);
+		free_netdev(dev_eql);
 	return err;
 }
 
diff -puN drivers/net/ns83820.c~free_netdev drivers/net/ns83820.c
--- linux-2.6.0-test6/drivers/net/ns83820.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/ns83820.c	Mon Sep 29 21:41:27 2003
@@ -2034,7 +2034,7 @@ out_disable:
 	pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_info.descs, dev->rx_info.phy_descs);
 	pci_disable_device(pci_dev);
 out_free:
-	kfree(dev);
+	free_netdev(&dev->net_dev);
 	pci_set_drvdata(pci_dev, NULL);
 out:
 	return err;
diff -puN drivers/net/plip.c~free_netdev drivers/net/plip.c
--- linux-2.6.0-test6/drivers/net/plip.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/plip.c	Mon Sep 29 21:41:27 2003
@@ -1306,17 +1306,23 @@ static void plip_attach (struct parport 
 
 		if (!nl->pardev) {
 			printk(KERN_ERR "%s: parport_register failed\n", name);
-			kfree(dev);
+			goto err_free_dev;
 			return;
 		}
 
 		if (register_netdev(dev)) {
 			printk(KERN_ERR "%s: network register failed\n", name);
-			kfree(dev);
-		} else {
-			dev_plip[unit++] = dev;
+			goto err_parport_unregister;
 		}
+		dev_plip[unit++] = dev;
 	}
+	return;
+
+err_parport_unregister:
+	parport_unregister_device(nl->pardev);
+err_free_dev:
+	free_netdev(dev);
+	return;
 }
 
 /* plip_detach() is called (by the parport code) when a port is
diff -puN drivers/net/rrunner.c~free_netdev drivers/net/rrunner.c
diff -puN drivers/net/shaper.c~free_netdev drivers/net/shaper.c
--- linux-2.6.0-test6/drivers/net/shaper.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/shaper.c	Mon Sep 29 21:41:27 2003
@@ -718,8 +718,10 @@ static int __init shaper_init(void)
 		if (!dev) 
 			break;
 
-		if (register_netdev(dev))
+		if (register_netdev(dev)) {
+			free_netdev(dev);
 			break;
+		}
 
 		devs[i] = dev;
 		shapers_registered++;
@@ -737,9 +739,12 @@ static void __exit shaper_exit (void)
 {
 	int i;
 
-	for (i = 0; i < shapers_registered; i++)
-		if (devs[i])
+	for (i = 0; i < shapers_registered; i++) {
+		if (devs[i]) {
 			unregister_netdev(devs[i]);
+			free_netdev(devs[i]);
+		}
+	}
 
 	kfree(devs);
 	devs = NULL;
diff -puN drivers/net/tun.c~free_netdev drivers/net/tun.c
--- linux-2.6.0-test6/drivers/net/tun.c~free_netdev	Mon Sep 29 21:41:27 2003
+++ linux-2.6.0-test6-fr/drivers/net/tun.c	Mon Sep 29 21:41:27 2003
@@ -377,6 +377,7 @@ static struct tun_struct *tun_get_by_nam
 static int tun_set_iff(struct file *file, struct ifreq *ifr)
 {
 	struct tun_struct *tun;
+	struct net_device *dev;
 	int err;
 
 	tun = tun_get_by_name(ifr->ifr_name);
@@ -394,7 +395,6 @@ static int tun_set_iff(struct file *file
 	else {
 		char *name;
 		unsigned long flags = 0;
-		struct net_device *dev;
 
 		err = -EINVAL;
 
@@ -424,16 +424,13 @@ static int tun_set_iff(struct file *file
 
 		if (strchr(dev->name, '%')) {
 			err = dev_alloc_name(dev, dev->name);
-			if (err < 0) {
-				kfree(dev);
-				goto failed;
-			}
+			if (err < 0)
+				goto err_free_dev;
 		}
 
-		if ((err = register_netdevice(tun->dev))) {
-			kfree(dev);
-			goto failed;
-		}
+		err = register_netdevice(tun->dev);
+		if (err < 0)
+			goto err_free_dev;
 	
 		list_add(&tun->list, &tun_dev_list);
 	}
@@ -451,6 +448,9 @@ static int tun_set_iff(struct file *file
 
 	strcpy(ifr->ifr_name, tun->dev->name);
 	return 0;
+
+ err_free_dev:
+	free_netdev(dev);
  failed:
 	return err;
 }

_

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] 2.6.0-test6 - more free_netdev() conversion
  2003-09-29 22:06 [PATCH] 2.6.0-test6 - more free_netdev() conversion Francois Romieu
@ 2003-10-14 17:39 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2003-10-14 17:39 UTC (permalink / raw)
  To: Francois Romieu; +Cc: netdev, David S. Miller

applied to 2.5

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-10-14 17:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-09-29 22:06 [PATCH] 2.6.0-test6 - more free_netdev() conversion Francois Romieu
2003-10-14 17:39 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).