Hi
I'm using Yaffs on a PPC based system from U-Boot and I have faced a
problem with mount/ unmount.
It seems like
int yaffs_unmount(const YCHAR *path)
is not cleaning completely. Any one that have experienced the same?
When I do a mount, unmount and then mount again I got the following output:
Mount point name already used
I have investigated a bit and I could not find any places the mount
point name is cleared. Currently I see two possible fixes:
Make sure that name and driver_context are reset in unmount:
diff --git a/fs/yaffs2/yaffs_guts.c b/fs/yaffs2/yaffs_guts.c
index 00d1c5a..abbbf44 100644
--- a/fs/yaffs2/yaffs_guts.c
+++ b/fs/yaffs2/yaffs_guts.c
@@ -4942,6 +4942,8 @@ void yaffs_deinitialise(struct yaffs_dev *dev)
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
kfree(dev->temp_buffer[i].buffer);
+ dev->param.name = '\0';
+ dev->driver_context = NULL;
dev->is_mounted = 0;
if (dev->param.deinitialise_flash_fn)
- or -
Make sure that we don't check partitions that are unmounted:
diff --git a/fs/yaffs2/yaffs_uboot_glue.c b/fs/yaffs2/yaffs_uboot_glue.c
index 5fc6563..5754435 100644
--- a/fs/yaffs2/yaffs_uboot_glue.c
+++ b/fs/yaffs2/yaffs_uboot_glue.c
@@ -199,6 +199,8 @@ void cmd_yaffs_devconfig(char *_mp, int flash_dev,
chk = yaffs_next_dev();
if (!chk)
break;
+ if (!chk->is_mounted)
+ continue;
if (strcmp(chk->param.name, mp) == 0) {
printf("Mount point name already used\n");
goto err;
It looks like both will work, but I don't know if I'm only masking a
more serious bug with this approach.
My use case is:
- mount and use some files from /flash
- unmount and erase the whole NAND
- mount and use the /flash again
Best regards,
Kjetil Aamodt