|
@@ -653,8 +653,12 @@ static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs)
|
|
|
seq_printf(seq, ",commit=%u",
|
|
|
(unsigned) (sbi->s_commit_interval / HZ));
|
|
|
}
|
|
|
- if (test_opt(sb, BARRIER))
|
|
|
- seq_puts(seq, ",barrier=1");
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Always display barrier state so it's clear what the status is.
|
|
|
+ */
|
|
|
+ seq_puts(seq, ",barrier=");
|
|
|
+ seq_puts(seq, test_opt(sb, BARRIER) ? "1" : "0");
|
|
|
if (test_opt(sb, NOBH))
|
|
|
seq_puts(seq, ",nobh");
|
|
|
|
|
@@ -810,8 +814,8 @@ enum {
|
|
|
Opt_data_err_abort, Opt_data_err_ignore,
|
|
|
Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
|
|
|
Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
|
|
|
- Opt_noquota, Opt_ignore, Opt_barrier, Opt_err, Opt_resize,
|
|
|
- Opt_usrquota, Opt_grpquota
|
|
|
+ Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
|
|
|
+ Opt_resize, Opt_usrquota, Opt_grpquota
|
|
|
};
|
|
|
|
|
|
static const match_table_t tokens = {
|
|
@@ -865,6 +869,8 @@ static const match_table_t tokens = {
|
|
|
{Opt_quota, "quota"},
|
|
|
{Opt_usrquota, "usrquota"},
|
|
|
{Opt_barrier, "barrier=%u"},
|
|
|
+ {Opt_barrier, "barrier"},
|
|
|
+ {Opt_nobarrier, "nobarrier"},
|
|
|
{Opt_resize, "resize"},
|
|
|
{Opt_err, NULL},
|
|
|
};
|
|
@@ -967,7 +973,11 @@ static int parse_options (char *options, struct super_block *sb,
|
|
|
int token;
|
|
|
if (!*p)
|
|
|
continue;
|
|
|
-
|
|
|
+ /*
|
|
|
+ * Initialize args struct so we know whether arg was
|
|
|
+ * found; some options take optional arguments.
|
|
|
+ */
|
|
|
+ args[0].to = args[0].from = 0;
|
|
|
token = match_token(p, tokens, args);
|
|
|
switch (token) {
|
|
|
case Opt_bsd_df:
|
|
@@ -1215,9 +1225,15 @@ set_qf_format:
|
|
|
case Opt_abort:
|
|
|
set_opt(sbi->s_mount_opt, ABORT);
|
|
|
break;
|
|
|
+ case Opt_nobarrier:
|
|
|
+ clear_opt(sbi->s_mount_opt, BARRIER);
|
|
|
+ break;
|
|
|
case Opt_barrier:
|
|
|
- if (match_int(&args[0], &option))
|
|
|
- return 0;
|
|
|
+ if (args[0].from) {
|
|
|
+ if (match_int(&args[0], &option))
|
|
|
+ return 0;
|
|
|
+ } else
|
|
|
+ option = 1; /* No argument, default to 1 */
|
|
|
if (option)
|
|
|
set_opt(sbi->s_mount_opt, BARRIER);
|
|
|
else
|
|
@@ -2276,6 +2292,9 @@ static int ext3_load_journal(struct super_block *sb,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ if (!(journal->j_flags & JFS_BARRIER))
|
|
|
+ printk(KERN_INFO "EXT3-fs: barriers not enabled\n");
|
|
|
+
|
|
|
if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) {
|
|
|
err = journal_update_format(journal);
|
|
|
if (err) {
|