From patchwork Tue Nov 16 21:22:04 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 329601 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oAGLVL9g024284 for ; Tue, 16 Nov 2010 21:31:26 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932373Ab0KPVbY (ORCPT ); Tue, 16 Nov 2010 16:31:24 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56914 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932241Ab0KPVbX (ORCPT ); Tue, 16 Nov 2010 16:31:23 -0500 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oAGLVNMT026795 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 16 Nov 2010 16:31:23 -0500 Received: from localhost.localdomain (test1244.test.redhat.com [10.10.10.244]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id oAGLVLU0003799 for ; Tue, 16 Nov 2010 16:31:22 -0500 From: Josef Bacik To: linux-btrfs@vger.kernel.org Subject: [PATCH] Btrfs: do not loop through raid types when looking for free extent Date: Tue, 16 Nov 2010 16:22:04 -0500 Message-Id: <1289942524-29637-1-git-send-email-josef@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Tue, 16 Nov 2010 21:31:28 +0000 (UTC) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 0c097f3..a917e3c 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4785,16 +4785,16 @@ wait_block_group_cache_done(struct btrfs_block_group_cache *cache) return 0; } -static int get_block_group_index(struct btrfs_block_group_cache *cache) +static int get_block_group_index(u64 flags) { int index; - if (cache->flags & BTRFS_BLOCK_GROUP_RAID10) + if (flags & BTRFS_BLOCK_GROUP_RAID10) index = 0; - else if (cache->flags & BTRFS_BLOCK_GROUP_RAID1) + else if (flags & BTRFS_BLOCK_GROUP_RAID1) index = 1; - else if (cache->flags & BTRFS_BLOCK_GROUP_DUP) + else if (flags & BTRFS_BLOCK_GROUP_DUP) index = 2; - else if (cache->flags & BTRFS_BLOCK_GROUP_RAID0) + else if (flags & BTRFS_BLOCK_GROUP_RAID0) index = 3; else index = 4; @@ -4834,7 +4834,7 @@ static noinline int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_space_info *space_info; int last_ptr_loop = 0; int loop = 0; - int index = 0; + int index = get_block_group_index(data); bool found_uncached_bg = false; bool failed_cluster_refill = false; bool failed_alloc = false; @@ -4913,7 +4913,6 @@ ideal_cache: btrfs_put_block_group(block_group); up_read(&space_info->groups_sem); } else { - index = get_block_group_index(block_group); goto have_block_group; } } else if (block_group) { @@ -5145,14 +5144,11 @@ checks: loop: failed_cluster_refill = false; failed_alloc = false; - BUG_ON(index != get_block_group_index(block_group)); + BUG_ON(index != get_block_group_index(block_group->flags)); btrfs_put_block_group(block_group); } up_read(&space_info->groups_sem); - if (!ins->objectid && ++index < BTRFS_NR_RAID_TYPES) - goto search; - /* LOOP_FIND_IDEAL, only search caching/cached bg's, and don't wait for * for them to make caching progress. Also * determine the best possible bg to cache @@ -8204,7 +8200,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) static void __link_block_group(struct btrfs_space_info *space_info, struct btrfs_block_group_cache *cache) { - int index = get_block_group_index(cache); + int index = get_block_group_index(cache->flags); down_write(&space_info->groups_sem); list_add_tail(&cache->list, &space_info->block_groups[index]);