[PATCH] cm4000_cs: fix error paths

2007-05-03 Thread Akinobu Mita
This patch fixes error paths in module_init and probe
functions in cm4000_cs and cm4040_cs drivers.

Cc: Harald Welte <[EMAIL PROTECTED]>
Signed-off-by: Akinobu Mita <[EMAIL PROTECTED]>

---
 drivers/char/pcmcia/cm4000_cs.c |9 +++--
 drivers/char/pcmcia/cm4040_cs.c |7 ++-
 2 files changed, 13 insertions(+), 3 deletions(-)

Index: 2.6-git/drivers/char/pcmcia/cm4000_cs.c
===
--- 2.6-git.orig/drivers/char/pcmcia/cm4000_cs.c
+++ 2.6-git/drivers/char/pcmcia/cm4000_cs.c
@@ -1881,8 +1881,11 @@ static int cm4000_probe(struct pcmcia_de
init_waitqueue_head(>readq);
 
ret = cm4000_config(link, i);
-   if (ret)
+   if (ret) {
+   dev_table[i] = NULL;
+   kfree(dev);
return ret;
+   }
 
class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
"cmm%d", i);
@@ -1907,7 +1910,7 @@ static void cm4000_detach(struct pcmcia_
cm4000_release(link);
 
dev_table[devno] = NULL;
-   kfree(dev);
+   kfree(dev);
 
class_device_destroy(cmm_class, MKDEV(major, devno));
 
@@ -1956,12 +1959,14 @@ static int __init cmm_init(void)
if (major < 0) {
printk(KERN_WARNING MODULE_NAME
": could not get major number\n");
+   class_destroy(cmm_class);
return major;
}
 
rc = pcmcia_register_driver(_driver);
if (rc < 0) {
unregister_chrdev(major, DEVICE_NAME);
+   class_destroy(cmm_class);
return rc;
}
 
Index: 2.6-git/drivers/char/pcmcia/cm4040_cs.c
===
--- 2.6-git.orig/drivers/char/pcmcia/cm4040_cs.c
+++ 2.6-git/drivers/char/pcmcia/cm4040_cs.c
@@ -636,8 +636,11 @@ static int reader_probe(struct pcmcia_de
setup_timer(>poll_timer, cm4040_do_poll, 0);
 
ret = reader_config(link, i);
-   if (ret)
+   if (ret) {
+   dev_table[i] = NULL;
+   kfree(dev);
return ret;
+   }
 
class_device_create(cmx_class, NULL, MKDEV(major, i), NULL,
"cmx%d", i);
@@ -708,12 +711,14 @@ static int __init cm4040_init(void)
if (major < 0) {
printk(KERN_WARNING MODULE_NAME
": could not get major number\n");
+   class_destroy(cmx_class);
return major;
}
 
rc = pcmcia_register_driver(_driver);
if (rc < 0) {
unregister_chrdev(major, DEVICE_NAME);
+   class_destroy(cmx_class);
return rc;
}
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] cm4000_cs: fix error paths

2007-05-03 Thread Akinobu Mita
This patch fixes error paths in module_init and probe
functions in cm4000_cs and cm4040_cs drivers.

Cc: Harald Welte [EMAIL PROTECTED]
Signed-off-by: Akinobu Mita [EMAIL PROTECTED]

---
 drivers/char/pcmcia/cm4000_cs.c |9 +++--
 drivers/char/pcmcia/cm4040_cs.c |7 ++-
 2 files changed, 13 insertions(+), 3 deletions(-)

Index: 2.6-git/drivers/char/pcmcia/cm4000_cs.c
===
--- 2.6-git.orig/drivers/char/pcmcia/cm4000_cs.c
+++ 2.6-git/drivers/char/pcmcia/cm4000_cs.c
@@ -1881,8 +1881,11 @@ static int cm4000_probe(struct pcmcia_de
init_waitqueue_head(dev-readq);
 
ret = cm4000_config(link, i);
-   if (ret)
+   if (ret) {
+   dev_table[i] = NULL;
+   kfree(dev);
return ret;
+   }
 
class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
cmm%d, i);
@@ -1907,7 +1910,7 @@ static void cm4000_detach(struct pcmcia_
cm4000_release(link);
 
dev_table[devno] = NULL;
-   kfree(dev);
+   kfree(dev);
 
class_device_destroy(cmm_class, MKDEV(major, devno));
 
@@ -1956,12 +1959,14 @@ static int __init cmm_init(void)
if (major  0) {
printk(KERN_WARNING MODULE_NAME
: could not get major number\n);
+   class_destroy(cmm_class);
return major;
}
 
rc = pcmcia_register_driver(cm4000_driver);
if (rc  0) {
unregister_chrdev(major, DEVICE_NAME);
+   class_destroy(cmm_class);
return rc;
}
 
Index: 2.6-git/drivers/char/pcmcia/cm4040_cs.c
===
--- 2.6-git.orig/drivers/char/pcmcia/cm4040_cs.c
+++ 2.6-git/drivers/char/pcmcia/cm4040_cs.c
@@ -636,8 +636,11 @@ static int reader_probe(struct pcmcia_de
setup_timer(dev-poll_timer, cm4040_do_poll, 0);
 
ret = reader_config(link, i);
-   if (ret)
+   if (ret) {
+   dev_table[i] = NULL;
+   kfree(dev);
return ret;
+   }
 
class_device_create(cmx_class, NULL, MKDEV(major, i), NULL,
cmx%d, i);
@@ -708,12 +711,14 @@ static int __init cm4040_init(void)
if (major  0) {
printk(KERN_WARNING MODULE_NAME
: could not get major number\n);
+   class_destroy(cmx_class);
return major;
}
 
rc = pcmcia_register_driver(reader_driver);
if (rc  0) {
unregister_chrdev(major, DEVICE_NAME);
+   class_destroy(cmx_class);
return rc;
}
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/