From patchwork Thu Mar 25 12:34:27 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miao Xie X-Patchwork-Id: 88216 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o2PCYEmP031034 for ; Thu, 25 Mar 2010 12:34:14 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751983Ab0CYMeN (ORCPT ); Thu, 25 Mar 2010 08:34:13 -0400 Received: from cn.fujitsu.com ([222.73.24.84]:59830 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751106Ab0CYMeM (ORCPT ); Thu, 25 Mar 2010 08:34:12 -0400 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 5AA73170028; Thu, 25 Mar 2010 20:34:11 +0800 (CST) Received: from fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id o2PCWqcd006027; Thu, 25 Mar 2010 20:32:52 +0800 Received: from [127.0.0.1] (unknown [10.167.141.211]) by fnst.cn.fujitsu.com (Postfix) with ESMTPA id 857E8DC220; Thu, 25 Mar 2010 20:36:37 +0800 (CST) Message-ID: <4BAB5853.9030402@cn.fujitsu.com> Date: Thu, 25 Mar 2010 20:34:27 +0800 From: Miao Xie Reply-To: miaox@cn.fujitsu.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.8) Gecko/20100227 Thunderbird/3.0.3 MIME-Version: 1.0 To: Chris Mason CC: Linux Btrfs Subject: [PATCH 11/18] btrfs: Simplify btrfs_search_slot() for performance 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 (demeter.kernel.org [140.211.167.41]); Thu, 25 Mar 2010 12:34:15 +0000 (UTC) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index c4bc570..4f258ba 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1724,15 +1724,12 @@ again: if (!p->skip_locking) p->locks[level] = 1; - if (cow) { - /* - * if we don't really need to cow this block - * then we don't want to set the path blocking, - * so we test it here - */ - if (!should_cow_block(trans, root, b)) - goto cow_done; - + /* + * if we don't really need to cow this block + * then we don't want to set the path blocking, + * so we test it here + */ + if (cow && should_cow_block(trans, root, b)) { btrfs_set_path_blocking(p); err = btrfs_cow_block(trans, root, b, @@ -1743,17 +1740,18 @@ again: ret = err; goto done; } - } -cow_done: - BUG_ON(!cow && ins_len); - if (level != btrfs_header_level(b)) - WARN_ON(1); - level = btrfs_header_level(b); - p->nodes[level] = b; - if (!p->skip_locking) - p->locks[level] = 1; + if (unlikely(level != btrfs_header_level(b))) { + WARN_ON(1); + level = btrfs_header_level(b); + if (!p->skip_locking) + p->locks[level] = 1; + } + p->nodes[level] = b; + } + + BUG_ON(!cow && ins_len); btrfs_clear_path_blocking(p, NULL); /*