btrfs: Add "barrier" option to support "-o remount,barrier"

Btrfs can be remounted without barrier, but there is no "barrier" option
so nobody can remount btrfs back with barrier on. Only umount and
mount again can re-enable barrier.(Quite awkward)

Also the mount options in the document is also changed slightly for the
further pairing options changes.

Reported-by: Daniel Blueman <daniel@quora.org>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Reviewed-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
Qu Wenruo 2014-01-06 09:58:25 +08:00 committed by Chris Mason
parent e8117c26b2
commit 842bef5891
2 changed files with 14 additions and 7 deletions

View File

@ -38,7 +38,7 @@ Mount Options
============= =============
When mounting a btrfs filesystem, the following option are accepted. When mounting a btrfs filesystem, the following option are accepted.
Unless otherwise specified, all options default to off. Options with (*) are default options and will not show in the mount options.
alloc_start=<bytes> alloc_start=<bytes>
Debugging option to force all block allocations above a certain Debugging option to force all block allocations above a certain
@ -138,12 +138,13 @@ Unless otherwise specified, all options default to off.
Disable support for Posix Access Control Lists (ACLs). See the Disable support for Posix Access Control Lists (ACLs). See the
acl(5) manual page for more information about ACLs. acl(5) manual page for more information about ACLs.
barrier(*)
nobarrier nobarrier
Disables the use of block layer write barriers. Write barriers ensure Enable/disable the use of block layer write barriers. Write barriers
that certain IOs make it through the device cache and are on persistent ensure that certain IOs make it through the device cache and are on
storage. If used on a device with a volatile (non-battery-backed) persistent storage. If disabled on a device with a volatile
write-back cache, this option will lead to filesystem corruption on a (non-battery-backed) write-back cache, nobarrier option will lead to
system crash or power loss. filesystem corruption on a system crash or power loss.
nodatacow nodatacow
Disable data copy-on-write for newly created files. Implies nodatasum, Disable data copy-on-write for newly created files. Implies nodatasum,

View File

@ -323,7 +323,7 @@ enum {
Opt_no_space_cache, Opt_recovery, Opt_skip_balance, Opt_no_space_cache, Opt_recovery, Opt_skip_balance,
Opt_check_integrity, Opt_check_integrity_including_extent_data, Opt_check_integrity, Opt_check_integrity_including_extent_data,
Opt_check_integrity_print_mask, Opt_fatal_errors, Opt_rescan_uuid_tree, Opt_check_integrity_print_mask, Opt_fatal_errors, Opt_rescan_uuid_tree,
Opt_commit_interval, Opt_commit_interval, Opt_barrier,
Opt_err, Opt_err,
}; };
@ -335,6 +335,7 @@ static match_table_t tokens = {
{Opt_nodatasum, "nodatasum"}, {Opt_nodatasum, "nodatasum"},
{Opt_nodatacow, "nodatacow"}, {Opt_nodatacow, "nodatacow"},
{Opt_nobarrier, "nobarrier"}, {Opt_nobarrier, "nobarrier"},
{Opt_barrier, "barrier"},
{Opt_max_inline, "max_inline=%s"}, {Opt_max_inline, "max_inline=%s"},
{Opt_alloc_start, "alloc_start=%s"}, {Opt_alloc_start, "alloc_start=%s"},
{Opt_thread_pool, "thread_pool=%d"}, {Opt_thread_pool, "thread_pool=%d"},
@ -494,6 +495,11 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
btrfs_clear_opt(info->mount_opt, SSD); btrfs_clear_opt(info->mount_opt, SSD);
btrfs_clear_opt(info->mount_opt, SSD_SPREAD); btrfs_clear_opt(info->mount_opt, SSD_SPREAD);
break; break;
case Opt_barrier:
if (btrfs_test_opt(root, NOBARRIER))
btrfs_info(root->fs_info, "turning on barriers");
btrfs_clear_opt(info->mount_opt, NOBARRIER);
break;
case Opt_nobarrier: case Opt_nobarrier:
btrfs_info(root->fs_info, "turning off barriers"); btrfs_info(root->fs_info, "turning off barriers");
btrfs_set_opt(info->mount_opt, NOBARRIER); btrfs_set_opt(info->mount_opt, NOBARRIER);