diff options
Diffstat (limited to 'fs/fat/inode.c')
-rw-r--r-- | fs/fat/inode.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 296785a0dec8..2b9052265e3e 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -76,7 +76,7 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock, | |||
76 | return 0; | 76 | return 0; |
77 | 77 | ||
78 | if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { | 78 | if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { |
79 | fat_fs_panic(sb, "corrupted file size (i_pos %lld, %lld)", | 79 | fat_fs_error(sb, "corrupted file size (i_pos %lld, %lld)", |
80 | MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); | 80 | MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); |
81 | return -EIO; | 81 | return -EIO; |
82 | } | 82 | } |
@@ -834,6 +834,12 @@ static int fat_show_options(struct seq_file *m, struct vfsmount *mnt) | |||
834 | seq_puts(m, ",flush"); | 834 | seq_puts(m, ",flush"); |
835 | if (opts->tz_utc) | 835 | if (opts->tz_utc) |
836 | seq_puts(m, ",tz=UTC"); | 836 | seq_puts(m, ",tz=UTC"); |
837 | if (opts->errors == FAT_ERRORS_CONT) | ||
838 | seq_puts(m, ",errors=continue"); | ||
839 | else if (opts->errors == FAT_ERRORS_PANIC) | ||
840 | seq_puts(m, ",errors=panic"); | ||
841 | else | ||
842 | seq_puts(m, ",errors=remount-ro"); | ||
837 | 843 | ||
838 | return 0; | 844 | return 0; |
839 | } | 845 | } |
@@ -846,7 +852,8 @@ enum { | |||
846 | Opt_charset, Opt_shortname_lower, Opt_shortname_win95, | 852 | Opt_charset, Opt_shortname_lower, Opt_shortname_win95, |
847 | Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes, | 853 | Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes, |
848 | Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes, | 854 | Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes, |
849 | Opt_obsolate, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err, | 855 | Opt_obsolate, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err_cont, |
856 | Opt_err_panic, Opt_err_ro, Opt_err, | ||
850 | }; | 857 | }; |
851 | 858 | ||
852 | static const match_table_t fat_tokens = { | 859 | static const match_table_t fat_tokens = { |
@@ -869,6 +876,11 @@ static const match_table_t fat_tokens = { | |||
869 | {Opt_showexec, "showexec"}, | 876 | {Opt_showexec, "showexec"}, |
870 | {Opt_debug, "debug"}, | 877 | {Opt_debug, "debug"}, |
871 | {Opt_immutable, "sys_immutable"}, | 878 | {Opt_immutable, "sys_immutable"}, |
879 | {Opt_flush, "flush"}, | ||
880 | {Opt_tz_utc, "tz=UTC"}, | ||
881 | {Opt_err_cont, "errors=continue"}, | ||
882 | {Opt_err_panic, "errors=panic"}, | ||
883 | {Opt_err_ro, "errors=remount-ro"}, | ||
872 | {Opt_obsolate, "conv=binary"}, | 884 | {Opt_obsolate, "conv=binary"}, |
873 | {Opt_obsolate, "conv=text"}, | 885 | {Opt_obsolate, "conv=text"}, |
874 | {Opt_obsolate, "conv=auto"}, | 886 | {Opt_obsolate, "conv=auto"}, |
@@ -880,8 +892,6 @@ static const match_table_t fat_tokens = { | |||
880 | {Opt_obsolate, "cvf_format=%20s"}, | 892 | {Opt_obsolate, "cvf_format=%20s"}, |
881 | {Opt_obsolate, "cvf_options=%100s"}, | 893 | {Opt_obsolate, "cvf_options=%100s"}, |
882 | {Opt_obsolate, "posix"}, | 894 | {Opt_obsolate, "posix"}, |
883 | {Opt_flush, "flush"}, | ||
884 | {Opt_tz_utc, "tz=UTC"}, | ||
885 | {Opt_err, NULL}, | 895 | {Opt_err, NULL}, |
886 | }; | 896 | }; |
887 | static const match_table_t msdos_tokens = { | 897 | static const match_table_t msdos_tokens = { |
@@ -951,6 +961,7 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug, | |||
951 | opts->numtail = 1; | 961 | opts->numtail = 1; |
952 | opts->usefree = opts->nocase = 0; | 962 | opts->usefree = opts->nocase = 0; |
953 | opts->tz_utc = 0; | 963 | opts->tz_utc = 0; |
964 | opts->errors = FAT_ERRORS_RO; | ||
954 | *debug = 0; | 965 | *debug = 0; |
955 | 966 | ||
956 | if (!options) | 967 | if (!options) |
@@ -1043,6 +1054,15 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug, | |||
1043 | case Opt_tz_utc: | 1054 | case Opt_tz_utc: |
1044 | opts->tz_utc = 1; | 1055 | opts->tz_utc = 1; |
1045 | break; | 1056 | break; |
1057 | case Opt_err_cont: | ||
1058 | opts->errors = FAT_ERRORS_CONT; | ||
1059 | break; | ||
1060 | case Opt_err_panic: | ||
1061 | opts->errors = FAT_ERRORS_PANIC; | ||
1062 | break; | ||
1063 | case Opt_err_ro: | ||
1064 | opts->errors = FAT_ERRORS_RO; | ||
1065 | break; | ||
1046 | 1066 | ||
1047 | /* msdos specific */ | 1067 | /* msdos specific */ |
1048 | case Opt_dots: | 1068 | case Opt_dots: |