android 内部sdcard出错处理errors=remount-ro改为errors=continue

来源:互联网 发布:c语言机器人编程 编辑:程序博客网 时间:2024/06/06 01:53


        android存储nand flash或者emmc一般会划分一个分区用作内部sdcard,系统启动会挂载该分区,一般挂载到/mnt/sdcard/,可读可写。当该分区出错时,出错处理是errors=remount-ro,也就是重新挂载成只读,这时便无法进行往sdcard写入操作。

/dev/block/vold/179:1 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0


        sdcard变成只读,一般需要具体查找导致出错的原因,从根本上解决。下策是,直接将errors=remount-ro改为errors=continue,避免出现只读的情况,具体实现如下:


diff --git a/linux-3.4/fs/fat/inode.c b/linux-3.4/fs/fat/inode.c
index d403f76..21459d0 100644
--- a/linux-3.4/fs/fat/inode.c
+++ b/linux-3.4/fs/fat/inode.c
@@ -1007,7 +1007,7 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
        opts->numtail = 1;
        opts->usefree = opts->nocase = 0;
        opts->tz_utc = 0;
-       opts->errors = FAT_ERRORS_RO;
+       opts->errors = FAT_ERRORS_CONT;
        *debug = 0;


        if (!options)
@@ -1107,7 +1107,7 @@ static int parse_options(struct super_block *sb, char *options, int is_vfat,
                        opts->errors = FAT_ERRORS_PANIC;
                        break;
                case Opt_err_ro:
-                       opts->errors = FAT_ERRORS_RO;
+                       opts->errors = FAT_ERRORS_CONT;
                        break;


                /* msdos specific */


        如此修改可能引发的后遗症,有待具体测试发现。。。

0 0
原创粉丝点击