diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /fs/hfsplus/options.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'fs/hfsplus/options.c')
-rw-r--r-- | fs/hfsplus/options.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/fs/hfsplus/options.c b/fs/hfsplus/options.c index 572628b4b07d..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,20 +165,28 @@ 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 | } |
143 | kfree(p); | 174 | kfree(p); |
144 | break; | 175 | break; |
145 | case opt_decompose: | 176 | case opt_decompose: |
146 | sbi->flags &= ~HFSPLUS_SB_NODECOMPOSE; | 177 | clear_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags); |
147 | break; | 178 | break; |
148 | case opt_nodecompose: | 179 | case opt_nodecompose: |
149 | sbi->flags |= HFSPLUS_SB_NODECOMPOSE; | 180 | set_bit(HFSPLUS_SB_NODECOMPOSE, &sbi->flags); |
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); | ||
150 | break; | 187 | break; |
151 | case opt_force: | 188 | case opt_force: |
152 | sbi->flags |= HFSPLUS_SB_FORCE; | 189 | set_bit(HFSPLUS_SB_FORCE, &sbi->flags); |
153 | break; | 190 | break; |
154 | default: | 191 | default: |
155 | return 0; | 192 | return 0; |
@@ -171,20 +208,23 @@ done: | |||
171 | 208 | ||
172 | int hfsplus_show_options(struct seq_file *seq, struct vfsmount *mnt) | 209 | int hfsplus_show_options(struct seq_file *seq, struct vfsmount *mnt) |
173 | { | 210 | { |
174 | struct hfsplus_sb_info *sbi = &HFSPLUS_SB(mnt->mnt_sb); | 211 | struct hfsplus_sb_info *sbi = HFSPLUS_SB(mnt->mnt_sb); |
175 | 212 | ||
176 | if (sbi->creator != HFSPLUS_DEF_CR_TYPE) | 213 | if (sbi->creator != HFSPLUS_DEF_CR_TYPE) |
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) |
184 | seq_printf(seq, ",session=%u", sbi->session); | 222 | seq_printf(seq, ",session=%u", sbi->session); |
185 | if (sbi->nls) | 223 | if (sbi->nls) |
186 | seq_printf(seq, ",nls=%s", sbi->nls->charset); | 224 | seq_printf(seq, ",nls=%s", sbi->nls->charset); |
187 | if (sbi->flags & HFSPLUS_SB_NODECOMPOSE) | 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 | } |