On Oct 29, 2011, Chris Mason <chris.ma...@oracle.com> wrote: > The last one isn't a bad idea, but please do make a real mount option > for it ;)
Like this?
>From af086e7b88637be5c9806181a1d70db9c645cb50 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva <lxol...@fsfla.org> Date: Sat, 29 Oct 2011 02:20:55 -0200 Subject: [PATCH 4/4] Disable clustered allocation with -o nocluster Introduce -o nocluster to disable the use of clusters for extent allocation. Signed-off-by: Alexandre Oliva <ol...@lsd.ic.unicamp.br> --- fs/btrfs/ctree.h | 1 + fs/btrfs/extent-tree.c | 2 +- fs/btrfs/super.c | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 03912c5..b1138fb 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -1363,6 +1363,7 @@ struct btrfs_ioctl_defrag_range_args { #define BTRFS_MOUNT_ENOSPC_DEBUG (1 << 15) #define BTRFS_MOUNT_AUTO_DEFRAG (1 << 16) #define BTRFS_MOUNT_INODE_MAP_CACHE (1 << 17) +#define BTRFS_MOUNT_NO_ALLOC_CLUSTER (1 << 18) #define btrfs_clear_opt(o, opt) ((o) &= ~BTRFS_MOUNT_##opt) #define btrfs_set_opt(o, opt) ((o) |= BTRFS_MOUNT_##opt) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index f5be06a..5d7c9a7 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4886,7 +4886,7 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, bool found_uncached_bg = false; bool failed_cluster_refill = false; bool failed_alloc = false; - bool use_cluster = true; + bool use_cluster = !btrfs_test_opt(root, NO_ALLOC_CLUSTER); u64 ideal_cache_percent = 0; u64 ideal_cache_offset = 0; diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 15634d4..57c7bb1 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -162,7 +162,7 @@ enum { Opt_notreelog, Opt_ratio, Opt_flushoncommit, Opt_discard, Opt_space_cache, Opt_clear_cache, Opt_user_subvol_rm_allowed, Opt_enospc_debug, Opt_subvolrootid, Opt_defrag, - Opt_inode_cache, Opt_err, + Opt_inode_cache, Opt_nocluster, Opt_err, }; static match_table_t tokens = { @@ -195,6 +195,7 @@ static match_table_t tokens = { {Opt_subvolrootid, "subvolrootid=%d"}, {Opt_defrag, "autodefrag"}, {Opt_inode_cache, "inode_cache"}, + {Opt_nocluster, "nocluster"}, {Opt_err, NULL}, }; @@ -378,9 +379,13 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) btrfs_set_opt(info->mount_opt, ENOSPC_DEBUG); break; case Opt_defrag: - printk(KERN_INFO "btrfs: enabling auto defrag"); + printk(KERN_INFO "btrfs: enabling auto defrag\n"); btrfs_set_opt(info->mount_opt, AUTO_DEFRAG); break; + case Opt_nocluster: + printk(KERN_INFO "btrfs: disabling alloc clustering\n"); + btrfs_set_opt(info->mount_opt, NO_ALLOC_CLUSTER); + break; case Opt_err: printk(KERN_INFO "btrfs: unrecognized mount option " "'%s'\n", p); @@ -729,6 +734,8 @@ static int btrfs_show_options(struct seq_file *seq, struct vfsmount *vfs) seq_puts(seq, ",autodefrag"); if (btrfs_test_opt(root, INODE_MAP_CACHE)) seq_puts(seq, ",inode_cache"); + if (btrfs_test_opt(root, NO_ALLOC_CLUSTER)) + seq_puts(seq, ",nocluster"); return 0; } -- 1.7.4.4
-- Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist Red Hat Brazil Compiler Engineer