]> err.no Git - linux-2.6/commitdiff
[ARM] Fix MTD device/partition destruction
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Sat, 29 Oct 2005 15:03:24 +0000 (16:03 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 29 Oct 2005 15:03:24 +0000 (16:03 +0100)
We should not delete MTD partitions when we registered a MTD
device.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/mtd/maps/sa1100-flash.c

index 50a1d434906a7154e6b2786c09cb679f87c756fb..c38c2c311b8ef6558536ed005c7f90df60269115 100644 (file)
@@ -137,6 +137,7 @@ struct sa_info {
        struct mtd_partition    *parts;
        struct mtd_info         *mtd;
        int                     num_subdev;
+       unsigned int            nr_parts;
        struct sa_subdev_info   subdev[0];
 };
 
@@ -228,8 +229,12 @@ static void sa1100_destroy(struct sa_info *info, struct flash_platform_data *pla
        int i;
 
        if (info->mtd) {
-               del_mtd_partitions(info->mtd);
-
+               if (info->nr_parts == 0)
+                       del_mtd_device(info->mtd);
+#ifdef CONFIG_MTD_PARTITIONS
+               else
+                       del_mtd_partitions(info->mtd);
+#endif
 #ifdef CONFIG_MTD_CONCAT
                if (info->mtd != info->subdev[0].mtd)
                        mtd_concat_destroy(info->mtd);
@@ -396,6 +401,8 @@ static int __init sa1100_mtd_probe(struct device *dev)
                add_mtd_partitions(info->mtd, parts, nr_parts);
        }
 
+       info->nr_parts = nr_parts;
+
        dev_set_drvdata(dev, info);
        err = 0;