From 0c76b7e3779d1d38b8b70596b122bab076d9f26e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Tue, 14 Jan 2014 11:51:35 +0100 Subject: mtd: register mtd partitions as real mtd devices So far mtd partitions were mtd devices, but these were not registered. This patch changes this. mtd partitions are now registered like real mtd devices. This makes them part of the device hierarchy. Signed-off-by: Sascha Hauer --- fs/devfs-core.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'fs') diff --git a/fs/devfs-core.c b/fs/devfs-core.c index 44f0169e63..bd6d482867 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -276,6 +276,15 @@ struct cdev *devfs_add_partition(const char *devname, loff_t offset, loff_t size if (offset + size > cdev->size) return ERR_PTR(-EINVAL); + if (IS_ENABLED(CONFIG_PARTITION_NEED_MTD) && cdev->mtd) { + struct mtd_info *mtd; + + mtd = mtd_add_partition(cdev->mtd, offset, size, flags, name); + if (IS_ERR(mtd)) + return (void *)mtd; + return 0; + } + new = xzalloc(sizeof (*new)); new->name = strdup(name); if (!strncmp(devname, name, strlen(devname))) @@ -287,17 +296,6 @@ struct cdev *devfs_add_partition(const char *devname, loff_t offset, loff_t size new->dev = cdev->dev; new->flags = flags | DEVFS_IS_PARTITION; -#ifdef CONFIG_PARTITION_NEED_MTD - if (cdev->mtd) { - new->mtd = mtd_add_partition(cdev->mtd, offset, size, flags, name); - if (IS_ERR(new->mtd)) { - int ret = PTR_ERR(new->mtd); - free(new); - return ERR_PTR(ret); - } - } -#endif - devfs_create(new); return new; @@ -312,16 +310,16 @@ int devfs_del_partition(const char *name) if (!cdev) return -ENOENT; + if (IS_ENABLED(CONFIG_PARTITION_NEED_MTD) && cdev->mtd) { + ret = mtd_del_partition(cdev->mtd); + return ret; + } + if (!(cdev->flags & DEVFS_IS_PARTITION)) return -EINVAL; if (cdev->flags & DEVFS_PARTITION_FIXED) return -EPERM; -#ifdef CONFIG_PARTITION_NEED_MTD - if (cdev->mtd) - mtd_del_partition(cdev->mtd); -#endif - ret = devfs_remove(cdev); if (ret) return ret; -- cgit v1.2.3