diff options
| -rw-r--r-- | common/cmd_ubifs.c | 31 | ||||
| -rw-r--r-- | fs/ubifs/super.c | 2 | 
2 files changed, 32 insertions, 1 deletions
| diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c index a0ec18448..30b23d310 100644 --- a/common/cmd_ubifs.c +++ b/common/cmd_ubifs.c @@ -33,12 +33,17 @@  #include <config.h>  #include <command.h> +#include "../fs/ubifs/ubifs.h" +  static int ubifs_initialized;  static int ubifs_mounted; +extern struct super_block *ubifs_sb; +  /* Prototypes */  int ubifs_init(void);  int ubifs_mount(char *vol_name); +void ubifs_umount(struct ubifs_info *c);  int ubifs_ls(char *dir_name);  int ubifs_load(char *filename, u32 addr, u32 size); @@ -67,6 +72,26 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	return 0;  } +int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	if (argc != 1) +		return cmd_usage(cmdtp); + +	if (ubifs_initialized == 0) { +		printf("No UBIFS volume mounted!\n"); +		return -1; +	} + +	if (ubifs_sb) +		ubifs_umount(ubifs_sb->s_fs_info); + +	ubifs_sb = NULL; +	ubifs_mounted = 0; +	ubifs_initialized = 0; + +	return 0; +} +  int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	char *filename = "/"; @@ -132,6 +157,12 @@ U_BOOT_CMD(  );  U_BOOT_CMD( +	ubifsumount, 1, 0, do_ubifs_umount, +	"unmount UBIFS volume", +	"    - unmount current volume" +); + +U_BOOT_CMD(  	ubifsls, 2, 0, do_ubifs_ls,  	"list files in a directory",  	"[directory]\n" diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index 39e3efec8..63b2164d3 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c @@ -824,7 +824,7 @@ out_free:   * through mounting (error path cleanup function). So it has to make sure the   * resource was actually allocated before freeing it.   */ -static void ubifs_umount(struct ubifs_info *c) +void ubifs_umount(struct ubifs_info *c)  {  	dbg_gen("un-mounting UBI device %d, volume %d", c->vi.ubi_num,  		c->vi.vol_id); |