cm4000_cs: fix error paths
This patch fixes error paths in module_init and probe functions in cm4000_cs and cm4040_cs drivers. Cc: Harald Welte <laforge@gnumonks.org> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Dominik Brodowski <linux@dominikbrodowski.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8813d1c00c
commit
54493c1006
2 changed files with 13 additions and 3 deletions
|
@ -1881,8 +1881,11 @@ static int cm4000_probe(struct pcmcia_device *link)
|
||||||
init_waitqueue_head(&dev->readq);
|
init_waitqueue_head(&dev->readq);
|
||||||
|
|
||||||
ret = cm4000_config(link, i);
|
ret = cm4000_config(link, i);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
dev_table[i] = NULL;
|
||||||
|
kfree(dev);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
|
class_device_create(cmm_class, NULL, MKDEV(major, i), NULL,
|
||||||
"cmm%d", i);
|
"cmm%d", i);
|
||||||
|
@ -1907,7 +1910,7 @@ static void cm4000_detach(struct pcmcia_device *link)
|
||||||
cm4000_release(link);
|
cm4000_release(link);
|
||||||
|
|
||||||
dev_table[devno] = NULL;
|
dev_table[devno] = NULL;
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
|
|
||||||
class_device_destroy(cmm_class, MKDEV(major, devno));
|
class_device_destroy(cmm_class, MKDEV(major, devno));
|
||||||
|
|
||||||
|
@ -1956,12 +1959,14 @@ static int __init cmm_init(void)
|
||||||
if (major < 0) {
|
if (major < 0) {
|
||||||
printk(KERN_WARNING MODULE_NAME
|
printk(KERN_WARNING MODULE_NAME
|
||||||
": could not get major number\n");
|
": could not get major number\n");
|
||||||
|
class_destroy(cmm_class);
|
||||||
return major;
|
return major;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = pcmcia_register_driver(&cm4000_driver);
|
rc = pcmcia_register_driver(&cm4000_driver);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
unregister_chrdev(major, DEVICE_NAME);
|
unregister_chrdev(major, DEVICE_NAME);
|
||||||
|
class_destroy(cmm_class);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -636,8 +636,11 @@ static int reader_probe(struct pcmcia_device *link)
|
||||||
setup_timer(&dev->poll_timer, cm4040_do_poll, 0);
|
setup_timer(&dev->poll_timer, cm4040_do_poll, 0);
|
||||||
|
|
||||||
ret = reader_config(link, i);
|
ret = reader_config(link, i);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
dev_table[i] = NULL;
|
||||||
|
kfree(dev);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
class_device_create(cmx_class, NULL, MKDEV(major, i), NULL,
|
class_device_create(cmx_class, NULL, MKDEV(major, i), NULL,
|
||||||
"cmx%d", i);
|
"cmx%d", i);
|
||||||
|
@ -708,12 +711,14 @@ static int __init cm4040_init(void)
|
||||||
if (major < 0) {
|
if (major < 0) {
|
||||||
printk(KERN_WARNING MODULE_NAME
|
printk(KERN_WARNING MODULE_NAME
|
||||||
": could not get major number\n");
|
": could not get major number\n");
|
||||||
|
class_destroy(cmx_class);
|
||||||
return major;
|
return major;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = pcmcia_register_driver(&reader_driver);
|
rc = pcmcia_register_driver(&reader_driver);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
unregister_chrdev(major, DEVICE_NAME);
|
unregister_chrdev(major, DEVICE_NAME);
|
||||||
|
class_destroy(cmx_class);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue