diff options
| -rw-r--r-- | common/cmd_ubi.c | 11 | ||||
| -rw-r--r-- | drivers/mtd/ubi/build.c | 1 | ||||
| -rw-r--r-- | include/ubi_uboot.h | 1 | 
3 files changed, 13 insertions, 0 deletions
| diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c index 844676587..495d71ec0 100644 --- a/common/cmd_ubi.c +++ b/common/cmd_ubi.c @@ -31,6 +31,7 @@  /* Private own data */  static struct ubi_device *ubi;  static char buffer[80]; +static int ubi_initialized;  struct selected_dev {  	char dev_name[32];	/* NAND/OneNAND etc */ @@ -428,6 +429,8 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev)  		return err;  	} +	ubi_initialized = 1; +  	return 0;  } @@ -464,6 +467,14 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  		ubi_dev.nr = 0;  		/* +		 * Call ubi_exit() before re-initializing the UBI subsystem +		 */ +		if (ubi_initialized) { +			ubi_exit(); +			del_mtd_partitions(ubi_dev.mtd_info); +		} + +		/*  		 * Check for nand|onenand selection  		 */  #if defined(CONFIG_CMD_NAND) diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 17cabb2ae..bdf75c98a 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c @@ -1059,6 +1059,7 @@ void __exit ubi_exit(void)  	misc_deregister(&ubi_ctrl_cdev);  	class_remove_file(ubi_class, &ubi_version);  	class_destroy(ubi_class); +	mtd_devs = 0;  }  module_exit(ubi_exit); diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h index 295f2c0ff..095dfc1b2 100644 --- a/include/ubi_uboot.h +++ b/include/ubi_uboot.h @@ -211,6 +211,7 @@ static inline long IS_ERR(const void *ptr)  /* functions */  extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);  extern int ubi_init(void); +extern void ubi_exit(void);  extern struct ubi_device *ubi_devices[]; |