[LEDE-DEV] [LEDE-DEV, 3/3] fstools: fix lost mount point when first boot

John Crispin john at phrozen.org
Mon Apr 2 08:48:35 PDT 2018



On 29/03/18 10:25, rosysong at rosinson.com wrote:
> When firmware is new flashed and reboot with a storage device plug in its usb
> interface. Though the filesystem is not ready (FS_STATE_UNKNOWN), the
> /dev/sda1 still mount on /mnt/sda1 by block-mount, then the system switching jffs...
>
> root at OpenWrt:~# dmesg
> ......
> [   32.224522] jffs2_scan_eraseblock(): End of filesystem marker found at 0x0
> [   32.270514] jffs2_build_filesystem(): unlocking the mtd device...
> [   32.278711] jffs2_build_filesystem(): erasing all blocks after the end marker...
>
> root at OpenWrt:~# mount
> ......
> /dev/sda1 on /mnt/sda1 type exfat (rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,iocharset=utf8,namecase=0,errors=remount-ro)
> mountd(pid1314) on /tmp/run/blockd type autofs (rw,relatime,fd=7,pgrp=1,timeout=30,minproto=5,maxproto=5,indirect)
>
> After few miniutes, when filesystem is ready (FS_STATE_READY, /overlay/.fs_state -> 2)
> the /dev/sda1 lost its mount point
>
> root at OpenWrt:~# dmesg
>
> ...
>
> [  207.439407] jffs2: notice: (1336) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
>
> root at OpenWrt:~# mount
> ......
> **no /mnt/sda1 found**
> ......
>
> Signed-off-by: Rosy Song <rosysong at rosinson.com>

Hi
the description explains the bug but fails to expalin how the patch 
solves the problem. I am also struggeling to understand the problem. You 
are trying to use sda1 as jffs2 but there is a exfat already present so 
that they collide ?
     John

> ---
>   mount_root.c | 11 ++++++++++-
>   1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/mount_root.c b/mount_root.c
> index dffb0a6..110e4fd 100644
> --- a/mount_root.c
> +++ b/mount_root.c
> @@ -101,6 +101,7 @@ stop(int argc, char *argv[1])
>   static int
>   done(int argc, char *argv[1])
>   {
> +	int ret;
>   	struct volume *v = volume_find("rootfs_data");
>   
>   	if (!v)
> @@ -109,7 +110,15 @@ done(int argc, char *argv[1])
>   	switch (volume_identify(v)) {
>   	case FS_NONE:
>   	case FS_DEADCODE:
> -		return jffs2_switch(v);
> +		ret = jffs2_switch(v);
> +		/*
> +		* Devices mounted under /mnt will lost their mount point(see switch2jffs())
> +		* if the filesystem's(/overlay) state is not FS_STATE_READY,
> +		* this action can fix it.
> +		*/
> +		if (!access("/sbin/block", X_OK))
> +			system("/sbin/block mount");
> +		return ret;
>   
>   	case FS_EXT4:
>   	case FS_F2FS:
> -- 
> 2.13.3
>
>
>
> Lede-dev mailing list
> Lede-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev
> _______________________________________________
> Lede-dev mailing list
> Lede-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev




More information about the Lede-dev mailing list