Commit 842bef58 authored by Qu Wenruo's avatar Qu Wenruo Committed by Chris Mason
Browse files

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: default avatarDaniel Blueman <daniel@quora.org>
Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: default avatarMike Fleetwood <mike.fleetwood@googlemail.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.cz>
Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent e8117c26
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -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,
+7 −1
Original line number Original line Diff line number Diff line
@@ -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);