diff options
Diffstat (limited to 'fs/hfsplus/options.c')
-rw-r--r-- | fs/hfsplus/options.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/fs/hfsplus/options.c b/fs/hfsplus/options.c index f9ab276a4d8d..bb62a5882147 100644 --- a/fs/hfsplus/options.c +++ b/fs/hfsplus/options.c | |||
@@ -23,6 +23,7 @@ enum { | |||
23 | opt_umask, opt_uid, opt_gid, | 23 | opt_umask, opt_uid, opt_gid, |
24 | opt_part, opt_session, opt_nls, | 24 | opt_part, opt_session, opt_nls, |
25 | opt_nodecompose, opt_decompose, | 25 | opt_nodecompose, opt_decompose, |
26 | opt_barrier, opt_nobarrier, | ||
26 | opt_force, opt_err | 27 | opt_force, opt_err |
27 | }; | 28 | }; |
28 | 29 | ||
@@ -37,6 +38,8 @@ static const match_table_t tokens = { | |||
37 | { opt_nls, "nls=%s" }, | 38 | { opt_nls, "nls=%s" }, |
38 | { opt_decompose, "decompose" }, | 39 | { opt_decompose, "decompose" }, |
39 | { opt_nodecompose, "nodecompose" }, | 40 | { opt_nodecompose, "nodecompose" }, |
41 | { opt_barrier, "barrier" }, | ||
42 | { opt_nobarrier, "nobarrier" }, | ||
40 | { opt_force, "force" }, | 43 | { opt_force, "force" }, |
41 | { opt_err, NULL } | 44 | { opt_err, NULL } |
42 | }; | 45 | }; |
@@ -65,6 +68,32 @@ static inline int match_fourchar(substring_t *arg, u32 *result) | |||
65 | return 0; | 68 | return 0; |
66 | } | 69 | } |
67 | 70 | ||
71 | int hfsplus_parse_options_remount(char *input, int *force) | ||
72 | { | ||
73 | char *p; | ||
74 | substring_t args[MAX_OPT_ARGS]; | ||
75 | int token; | ||
76 | |||
77 | if (!input) | ||
78 | return 0; | ||
79 | |||
80 | while ((p = strsep(&input, ",")) != NULL) { | ||
81 | if (!*p) | ||
82 | continue; | ||
83 | |||
84 | token = match_token(p, tokens, args); | ||
85 | switch (token) { | ||
86 | case opt_force: | ||
87 | *force = 1; | ||
88 | break; | ||
89 | default: | ||
90 | break; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | return 1; | ||
95 | } | ||
96 | |||
68 | /* Parse options from mount. Returns 0 on failure */ | 97 | /* Parse options from mount. Returns 0 on failure */ |
69 | /* input is the options passed to mount() as a string */ | 98 | /* input is the options passed to mount() as a string */ |
70 | int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi) | 99 | int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi) |
@@ -136,7 +165,9 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi) | |||
136 | if (p) | 165 | if (p) |
137 | sbi->nls = load_nls(p); | 166 | sbi->nls = load_nls(p); |
138 | if (!sbi->nls) { | 167 | if (!sbi->nls) { |
139 | printk(KERN_ERR "hfs: unable to load nls mapping \"%s\"\n", p); | 168 | printk(KERN_ERR "hfs: unable to load " |
169 | "nls mapping \"%s\"\n", | ||
170 | p); | ||
140 | kfree(p); | 171 | kfree(p); |
141 | return 0; | 172 | return 0; |
142 | } | 173 | } |
@@ -148,6 +179,12 @@ int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi) | |||
148 | case opt_nodecompose: | 179 | case opt_nodecompose: |
149 | set_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags); | 180 | set_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags); |
150 | break; | 181 | break; |
182 | case opt_barrier: | ||
183 | clear_bit(HFSPLUS_SB_NOBARRIER, &sbi->flags); | ||
184 | break; | ||
185 | case opt_nobarrier: | ||
186 | set_bit(HFSPLUS_SB_NOBARRIER, &sbi->flags); | ||
187 | break; | ||
151 | case opt_force: | 188 | case opt_force: |
152 | set_bit(HFSPLUS_SB_FORCE, &sbi->flags); | 189 | set_bit(HFSPLUS_SB_FORCE, &sbi->flags); |
153 | break; | 190 | break; |
@@ -177,7 +214,8 @@ int hfsplus_show_options(struct seq_file *seq, struct vfsmount *mnt) | |||
177 | seq_printf(seq, ",creator=%.4s", (char *)&sbi->creator); | 214 | seq_printf(seq, ",creator=%.4s", (char *)&sbi->creator); |
178 | if (sbi->type != HFSPLUS_DEF_CR_TYPE) | 215 | if (sbi->type != HFSPLUS_DEF_CR_TYPE) |
179 | seq_printf(seq, ",type=%.4s", (char *)&sbi->type); | 216 | seq_printf(seq, ",type=%.4s", (char *)&sbi->type); |
180 | seq_printf(seq, ",umask=%o,uid=%u,gid=%u", sbi->umask, sbi->uid, sbi->gid); | 217 | seq_printf(seq, ",umask=%o,uid=%u,gid=%u", sbi->umask, |
218 | sbi->uid, sbi->gid); | ||
181 | if (sbi->part >= 0) | 219 | if (sbi->part >= 0) |
182 | seq_printf(seq, ",part=%u", sbi->part); | 220 | seq_printf(seq, ",part=%u", sbi->part); |
183 | if (sbi->session >= 0) | 221 | if (sbi->session >= 0) |
@@ -186,5 +224,7 @@ int hfsplus_show_options(struct seq_file *seq, struct vfsmount *mnt) | |||
186 | seq_printf(seq, ",nls=%s", sbi->nls->charset); | 224 | seq_printf(seq, ",nls=%s", sbi->nls->charset); |
187 | if (test_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags)) | 225 | if (test_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags)) |
188 | seq_printf(seq, ",nodecompose"); | 226 | seq_printf(seq, ",nodecompose"); |
227 | if (test_bit(HFSPLUS_SB_NOBARRIER, &sbi->flags)) | ||
228 | seq_printf(seq, ",nobarrier"); | ||
189 | return 0; | 229 | return 0; |
190 | } | 230 | } |