Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d4df9e0 authored by Akinobu Mita's avatar Akinobu Mita Committed by Jeff Garzik
Browse files

[PATCH] tokenring: fix module_init error handling



- Call platform_driver_unregister() before return when no cards found.
  (fixes data corruption when no cards found)

- Check platform_device_register_simple() return value

Cc: Jeff Garzik <jgarzik@pobox.com>
Cc: Mike Phillips <mikep@linuxtr.net>
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>

 drivers/net/tokenring/proteon.c |    9 +++++++--
 drivers/net/tokenring/skisa.c   |    9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 06f0015a
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -370,6 +370,10 @@ static int __init proteon_init(void)
		dev->dma = dma[i];
		pdev = platform_device_register_simple("proteon",
			i, NULL, 0);
		if (IS_ERR(pdev)) {
			free_netdev(dev);
			continue;
		}
		err = setup_card(dev, &pdev->dev);
		if (!err) {
			proteon_dev[i] = pdev;
@@ -385,9 +389,10 @@ static int __init proteon_init(void)
	/* Probe for cards. */
	if (num == 0) {
		printk(KERN_NOTICE "proteon.c: No cards found.\n");
		return (-ENODEV);
		platform_driver_unregister(&proteon_driver);
		return -ENODEV;
	}
	return (0);
	return 0;
}

static void __exit proteon_cleanup(void)
+7 −2
Original line number Diff line number Diff line
@@ -380,6 +380,10 @@ static int __init sk_isa_init(void)
		dev->dma = dma[i];
		pdev = platform_device_register_simple("skisa",
			i, NULL, 0);
		if (IS_ERR(pdev)) {
			free_netdev(dev);
			continue;
		}
		err = setup_card(dev, &pdev->dev);
		if (!err) {
			sk_isa_dev[i] = pdev;
@@ -395,9 +399,10 @@ static int __init sk_isa_init(void)
	/* Probe for cards. */
	if (num == 0) {
		printk(KERN_NOTICE "skisa.c: No cards found.\n");
		return (-ENODEV);
		platform_driver_unregister(&sk_isa_driver);
		return -ENODEV;
	}
	return (0);
	return 0;
}

static void __exit sk_isa_cleanup(void)