From patchwork Mon May 31 08:58:47 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yan, Zheng" X-Patchwork-Id: 103234 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 o4V903aF012609 for ; Mon, 31 May 2010 09:00:03 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755719Ab0EaJAA (ORCPT ); Mon, 31 May 2010 05:00:00 -0400 Received: from rcsinet10.oracle.com ([148.87.113.121]:29244 "EHLO rcsinet10.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754459Ab0EaI77 (ORCPT ); Mon, 31 May 2010 04:59:59 -0400 Received: from rcsinet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by rcsinet10.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id o4V8xt00013642 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 31 May 2010 08:59:57 GMT Received: from acsmt354.oracle.com (acsmt354.oracle.com [141.146.40.154]) by rcsinet15.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id o4V6ZYl5010543; Mon, 31 May 2010 08:59:55 GMT Received: from abhmt016.oracle.com by acsmt353.oracle.com with ESMTP id 310222621275296340; Mon, 31 May 2010 01:59:00 -0700 Received: from [192.168.0.100] (/125.71.157.77) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 31 May 2010 01:59:00 -0700 Message-ID: <4C037A47.4030305@oracle.com> Date: Mon, 31 May 2010 16:58:47 +0800 From: "Yan, Zheng" User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100430 Fedora/3.0.4-2.fc12 Thunderbird/3.0.4 MIME-Version: 1.0 To: linux-btrfs@vger.kernel.org CC: Chris Mason , error27@gmail.com Subject: [PATCH] btrfs: Fix null dereference in relocation.c X-Auth-Type: Internal IP X-Source-IP: rcsinet15.oracle.com [148.87.113.117] X-CT-RefId: str=0001.0A090207.4C037A8D.014A:SCFMA4539811,ss=1,fgs=0 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]); Mon, 31 May 2010 09:00:04 +0000 (UTC) diff -urp 1/fs/btrfs/relocation.c 2/fs/btrfs/relocation.c --- 1/fs/btrfs/relocation.c 2010-05-26 00:13:07.227605825 +0800 +++ 2/fs/btrfs/relocation.c 2010-05-31 16:35:23.489829633 +0800 @@ -784,16 +784,17 @@ again: struct btrfs_extent_ref_v0 *ref0; ref0 = btrfs_item_ptr(eb, path1->slots[0], struct btrfs_extent_ref_v0); - root = find_tree_root(rc, eb, ref0); - if (!root->ref_cows) - cur->cowonly = 1; if (key.objectid == key.offset) { + root = find_tree_root(rc, eb, ref0); if (root && !should_ignore_root(root)) cur->root = root; else list_add(&cur->list, &useless); break; } + if (is_cowonly_root(btrfs_ref_root_v0(eb, + ref0))) + cur->cowonly = 1; } #else BUG_ON(key.type == BTRFS_EXTENT_REF_V0_KEY);