aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/jffs2/super.c')
-rw-r--r--fs/jffs2/super.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index f9916f312bd8..66d44560f75d 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -105,6 +105,8 @@ static int jffs2_show_options(struct seq_file *s, struct dentry *root)
105 105
106 if (opts->override_compr) 106 if (opts->override_compr)
107 seq_printf(s, ",compr=%s", jffs2_compr_name(opts->compr)); 107 seq_printf(s, ",compr=%s", jffs2_compr_name(opts->compr));
108 if (opts->rp_size)
109 seq_printf(s, ",rp_size=%u", opts->rp_size / 1024);
108 110
109 return 0; 111 return 0;
110} 112}
@@ -171,15 +173,18 @@ static const struct export_operations jffs2_export_ops = {
171 * JFFS2 mount options. 173 * JFFS2 mount options.
172 * 174 *
173 * Opt_override_compr: override default compressor 175 * Opt_override_compr: override default compressor
176 * Opt_rp_size: size of reserved pool in KiB
174 * Opt_err: just end of array marker 177 * Opt_err: just end of array marker
175 */ 178 */
176enum { 179enum {
177 Opt_override_compr, 180 Opt_override_compr,
181 Opt_rp_size,
178 Opt_err, 182 Opt_err,
179}; 183};
180 184
181static const match_table_t tokens = { 185static const match_table_t tokens = {
182 {Opt_override_compr, "compr=%s"}, 186 {Opt_override_compr, "compr=%s"},
187 {Opt_rp_size, "rp_size=%u"},
183 {Opt_err, NULL}, 188 {Opt_err, NULL},
184}; 189};
185 190
@@ -187,6 +192,7 @@ static int jffs2_parse_options(struct jffs2_sb_info *c, char *data)
187{ 192{
188 substring_t args[MAX_OPT_ARGS]; 193 substring_t args[MAX_OPT_ARGS];
189 char *p, *name; 194 char *p, *name;
195 unsigned int opt;
190 196
191 if (!data) 197 if (!data)
192 return 0; 198 return 0;
@@ -224,6 +230,17 @@ static int jffs2_parse_options(struct jffs2_sb_info *c, char *data)
224 kfree(name); 230 kfree(name);
225 c->mount_opts.override_compr = true; 231 c->mount_opts.override_compr = true;
226 break; 232 break;
233 case Opt_rp_size:
234 if (match_int(&args[0], &opt))
235 return -EINVAL;
236 opt *= 1024;
237 if (opt > c->mtd->size) {
238 pr_warn("Too large reserve pool specified, max "
239 "is %llu KB\n", c->mtd->size / 1024);
240 return -EINVAL;
241 }
242 c->mount_opts.rp_size = opt;
243 break;
227 default: 244 default:
228 pr_err("Error: unrecognized mount option '%s' or missing value\n", 245 pr_err("Error: unrecognized mount option '%s' or missing value\n",
229 p); 246 p);