ext2: errors behaviour fix
PATCH 1/1 ext2: errors behaviour fix
EXT2_ERRORS_CONTINUE should be read from the superblock as default value for error behaviour.parse_option() should clean the alternative options and should not change default value taken from the superblock.
Signed-off-by Vasily Averin <[email protected]>
Acked-by Kirill Korotaev <[email protected]>
fs/ext2/super.c renamed from fs/ext2/super.c.e2erop +11 -5
@@ -365,7 +365,6 @@ static int parse_options (char * options {char * p;substring_t args[MAX_OPT_ARGS ]; -unsigned long kind =EXT2_MOUNT_ERRORS_CONT ;int option;if (!options)
@@ -405,13 +404,19 @@ static int parse_options (char * options/* *sb_block = match_int(&args[0]); */ break ;case Opt_err_panic: - kind =EXT2_MOUNT_ERRORS_PANIC ; +clear_opt (sbi->s_mount_opt,ERRORS_CONT ); +clear_opt (sbi->s_mount_opt,ERRORS_RO ); +set_opt (sbi->s_mount_opt,ERRORS_PANIC );break ;case Opt_err_ro: - kind =EXT2_MOUNT_ERRORS_RO ; +clear_opt (sbi->s_mount_opt,ERRORS_CONT ); +clear_opt (sbi->s_mount_opt,ERRORS_PANIC ); +set_opt (sbi->s_mount_opt,ERRORS_RO );break ;case Opt_err_cont: - kind =EXT2_MOUNT_ERRORS_CONT ; +clear_opt (sbi->s_mount_opt,ERRORS_RO ); +clear_opt (sbi->s_mount_opt,ERRORS_PANIC ); +set_opt (sbi->s_mount_opt,ERRORS_CONT );break ;case Opt_nouid32:set_opt (sbi->s_mount_opt,NO_UID32 );
@@ -490,7 +495,6 @@ static int parse_options (char * optionsreturn 0 ; } } - sbi->s_mount_opt |= kind;return 1 ; }
@@ -710,6 +714,8 @@ static int ext2_fill_super(struct super_set_opt (sbi->s_mount_opt,ERRORS_PANIC ); else if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_RO) set_opt(sbi->s_mount_opt, ERRORS_RO); + else + set_opt(sbi->s_mount_opt, ERRORS_CONT); sbi->s_resuid =le16_to_cpu (es->s_def_resuid); sbi->s_resgid =le16_to_cpu (es->s_def_resgid);