From d57bc7702e49c453a59259a3f6a52d34aa00aa42 Mon Sep 17 00:00:00 2001 From: Miao Xie Date: Fri, 9 Sep 2011 17:34:35 +0800 Subject: [PATCH] --- yaml --- r: 274671 b: refs/heads/master c: 60d2adbb1e7fee1cb4bc67f70bd0bd8ace7b6c3c h: refs/heads/master i: 274669: d00e07828a0ae611acc4fb03adf9417f71e8460b 274667: 5e1f00334b5c0733d0eb7eb83b847ab74550c84c 274663: 655664ff7f790b21bc100de33813e7a5a6f7458e 274655: 596ed21243aac8662e6d25bdd6935f1da5bdae91 v: v3 --- [refs] | 2 +- trunk/fs/btrfs/extent-tree.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index a60bdc8794d5..5f6a713e590b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cfbffc39ac89dbd5197cbeec2599a1128eb928f8 +refs/heads/master: 60d2adbb1e7fee1cb4bc67f70bd0bd8ace7b6c3c diff --git a/trunk/fs/btrfs/extent-tree.c b/trunk/fs/btrfs/extent-tree.c index 6cfcc9060c83..cef355f1328a 100644 --- a/trunk/fs/btrfs/extent-tree.c +++ b/trunk/fs/btrfs/extent-tree.c @@ -4954,6 +4954,7 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, bool failed_cluster_refill = false; bool failed_alloc = false; bool use_cluster = true; + bool have_caching_bg = false; u64 ideal_cache_percent = 0; u64 ideal_cache_offset = 0; @@ -5036,6 +5037,7 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, } } search: + have_caching_bg = false; down_read(&space_info->groups_sem); list_for_each_entry(block_group, &space_info->block_groups[index], list) { @@ -5244,6 +5246,8 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, failed_alloc = true; goto have_block_group; } else if (!offset) { + if (!cached) + have_caching_bg = true; goto loop; } checks: @@ -5294,6 +5298,9 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, } up_read(&space_info->groups_sem); + if (!ins->objectid && loop >= LOOP_CACHING_WAIT && have_caching_bg) + goto search; + if (!ins->objectid && ++index < BTRFS_NR_RAID_TYPES) goto search;