fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / mtd / maps / pcmciamtd.c
index d27f412..eaeb56a 100644 (file)
@@ -602,6 +602,10 @@ static int pcmciamtd_config(struct pcmcia_device *link)
        ret = pcmcia_request_configuration(link, &link->conf);
        if(ret != CS_SUCCESS) {
                cs_error(link, RequestConfiguration, ret);
+               if (dev->win_base) {
+                       iounmap(dev->win_base);
+                       dev->win_base = NULL;
+               }
                return -ENODEV;
        }
 
@@ -713,6 +717,7 @@ static void pcmciamtd_detach(struct pcmcia_device *link)
 
        if(dev->mtd_info) {
                del_mtd_device(dev->mtd_info);
+               map_destroy(dev->mtd_info);
                info("mtd%d: Removed", dev->mtd_info->index);
        }
 
@@ -730,11 +735,10 @@ static int pcmciamtd_probe(struct pcmcia_device *link)
        struct pcmciamtd_dev *dev;
 
        /* Create new memory card device */
-       dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (!dev) return -ENOMEM;
        DEBUG(1, "dev=0x%p", dev);
 
-       memset(dev, 0, sizeof(*dev));
        dev->p_dev = link;
        link->priv = dev;