btrfs: Add datacow mount option.

Add datacow mount option to enable copy-on-write with
remount option.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.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:31 +08:00 committed by Chris Mason
parent bd0330ad21
commit a258af7a3e
2 changed files with 10 additions and 3 deletions

View file

@ -154,9 +154,10 @@ Options with (*) are default options and will not show in the mount options.
(non-battery-backed) write-back cache, nobarrier option will lead to (non-battery-backed) write-back cache, nobarrier option will lead to
filesystem corruption on a system crash or power loss. filesystem corruption on a system crash or power loss.
datacow(*)
nodatacow nodatacow
Disable data copy-on-write for newly created files. Implies nodatasum, Enable/disable data copy-on-write for newly created files.
and disables all compression. Nodatacow implies nodatasum, and disables all compression.
nodatasum nodatasum
Disable data checksumming for newly created files. Disable data checksumming for newly created files.

View file

@ -324,7 +324,7 @@ enum {
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_barrier, Opt_nodefrag, Opt_nodiscard, Opt_commit_interval, Opt_barrier, Opt_nodefrag, Opt_nodiscard,
Opt_noenospc_debug, Opt_noflushoncommit, Opt_acl, Opt_noenospc_debug, Opt_noflushoncommit, Opt_acl, Opt_datacow,
Opt_err, Opt_err,
}; };
@ -335,6 +335,7 @@ static match_table_t tokens = {
{Opt_device, "device=%s"}, {Opt_device, "device=%s"},
{Opt_nodatasum, "nodatasum"}, {Opt_nodatasum, "nodatasum"},
{Opt_nodatacow, "nodatacow"}, {Opt_nodatacow, "nodatacow"},
{Opt_datacow, "datacow"},
{Opt_nobarrier, "nobarrier"}, {Opt_nobarrier, "nobarrier"},
{Opt_barrier, "barrier"}, {Opt_barrier, "barrier"},
{Opt_max_inline, "max_inline=%s"}, {Opt_max_inline, "max_inline=%s"},
@ -446,6 +447,11 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
btrfs_set_opt(info->mount_opt, NODATACOW); btrfs_set_opt(info->mount_opt, NODATACOW);
btrfs_set_opt(info->mount_opt, NODATASUM); btrfs_set_opt(info->mount_opt, NODATASUM);
break; break;
case Opt_datacow:
if (btrfs_test_opt(root, NODATACOW))
btrfs_info(root->fs_info, "setting datacow");
btrfs_clear_opt(info->mount_opt, NODATACOW);
break;
case Opt_compress_force: case Opt_compress_force:
case Opt_compress_force_type: case Opt_compress_force_type:
compress_force = true; compress_force = true;