diff options
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/ubi/build.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 3a59a1d0045e..13b05cb33b08 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c | |||
@@ -49,6 +49,12 @@ | |||
49 | /* Maximum length of the 'mtd=' parameter */ | 49 | /* Maximum length of the 'mtd=' parameter */ |
50 | #define MTD_PARAM_LEN_MAX 64 | 50 | #define MTD_PARAM_LEN_MAX 64 |
51 | 51 | ||
52 | #ifdef CONFIG_MTD_UBI_MODULE | ||
53 | #define ubi_is_module() 1 | ||
54 | #else | ||
55 | #define ubi_is_module() 0 | ||
56 | #endif | ||
57 | |||
52 | /** | 58 | /** |
53 | * struct mtd_dev_param - MTD device parameter description data structure. | 59 | * struct mtd_dev_param - MTD device parameter description data structure. |
54 | * @name: MTD character device node path, MTD device name, or MTD device number | 60 | * @name: MTD character device node path, MTD device name, or MTD device number |
@@ -1206,9 +1212,24 @@ static int __init ubi_init(void) | |||
1206 | p->vid_hdr_offs); | 1212 | p->vid_hdr_offs); |
1207 | mutex_unlock(&ubi_devices_mutex); | 1213 | mutex_unlock(&ubi_devices_mutex); |
1208 | if (err < 0) { | 1214 | if (err < 0) { |
1209 | put_mtd_device(mtd); | ||
1210 | ubi_err("cannot attach mtd%d", mtd->index); | 1215 | ubi_err("cannot attach mtd%d", mtd->index); |
1211 | goto out_detach; | 1216 | put_mtd_device(mtd); |
1217 | |||
1218 | /* | ||
1219 | * Originally UBI stopped initializing on any error. | ||
1220 | * However, later on it was found out that this | ||
1221 | * behavior is not very good when UBI is compiled into | ||
1222 | * the kernel and the MTD devices to attach are passed | ||
1223 | * through the command line. Indeed, UBI failure | ||
1224 | * stopped whole boot sequence. | ||
1225 | * | ||
1226 | * To fix this, we changed the behavior for the | ||
1227 | * non-module case, but preserved the old behavior for | ||
1228 | * the module case, just for compatibility. This is a | ||
1229 | * little inconsistent, though. | ||
1230 | */ | ||
1231 | if (ubi_is_module()) | ||
1232 | goto out_detach; | ||
1212 | } | 1233 | } |
1213 | } | 1234 | } |
1214 | 1235 | ||