From patchwork Mon Mar 25 12:11:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 2330831 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id EADADDF24C for ; Mon, 25 Mar 2013 12:17:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757248Ab3CYMR1 (ORCPT ); Mon, 25 Mar 2013 08:17:27 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:55057 "EHLO mail-pb0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757065Ab3CYMR1 (ORCPT ); Mon, 25 Mar 2013 08:17:27 -0400 Received: by mail-pb0-f45.google.com with SMTP id ro8so4165751pbb.4 for ; Mon, 25 Mar 2013 05:17:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:mime-version :content-type:content-transfer-encoding; bh=fLdL8UJLwMWhA/8xNocAY65oTLLgKErqFDh1vWjJOYs=; b=J7ynhgeMlCTh4gl1l8hArfnrQaTByqU/w4RR9vqybW+HjqBGDQw48kyTsAq0hawW6D 6zoSBE7NtE94o6284xfLy/hHXKTnWih5/f+jxFQjM6IXrdC6JPGoe6VRzpCjaVIUpm6F CWL+Ows87HDZ0mc6511xiCcpfFZpi6SraRobQiHnXX4dwNLV6QIpUaUUXDcT9nay/WOT KvxmVRaIH/+96UBH1CuF5VUurnXsXMlCznyR+XBtJJUNOKtQSV5aGizX817WK6BRy6jE bEMrX+boexsV/kiFuRB3Ul33vloXinEdDwjdXijPQs+DQmpru4p0YNF12fMQzOfVgg0M SsLA== X-Received: by 10.66.122.37 with SMTP id lp5mr17462602pab.159.1364213506162; Mon, 25 Mar 2013 05:11:46 -0700 (PDT) Received: from localhost.localdomain.localdomain ([112.3.240.11]) by mx.google.com with ESMTPS id y13sm13300407pbv.0.2013.03.25.05.11.43 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 25 Mar 2013 05:11:45 -0700 (PDT) From: Wang Shilong To: linux-btrfs@vger.kernel.org Cc: wangshilong1991@gmail.com, sensille@gmx.net, list.btrfs@jan-o-sch.net Subject: [PATCH V2 2/2] Btrfs: kill some BUG_ONs() in the find_parent_nodes() Date: Mon, 25 Mar 2013 20:11:41 +0800 Message-Id: <1364213501-2422-1-git-send-email-wangshilong1991@gmail.com> X-Mailer: git-send-email 1.7.11.7 MIME-Version: 1.0 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Wang Shilong The reason that BUG_ON() happens in these places is just because of ENOMEM. We try ro return ENOMEM rather than trigger BUG_ON(), the caller will abort the transaction thus avoiding the kernel panic. Signed-off-by: Wang Shilong Reviewed-by: Miao Xie Reviewed-by: Jan Schmidt --- fs/btrfs/backref.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index bd605c8..5ff46ee 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -900,7 +900,8 @@ again: if (ref->count && ref->root_id && ref->parent == 0) { /* no parent == root of tree */ ret = ulist_add(roots, ref->root_id, 0, GFP_NOFS); - BUG_ON(ret < 0); + if (ret) + goto out; } if (ref->count && ref->parent) { struct extent_inode_elem *eie = NULL; @@ -920,7 +921,9 @@ again: ret = ulist_add_merge(refs, ref->parent, (uintptr_t)ref->inode_list, (u64 *)&eie, GFP_NOFS); - if (!ret && extent_item_pos) { + if (ret) + goto out; + if (extent_item_pos) { /* * we've recorded that parent, so we must extend * its inode list here @@ -930,7 +933,6 @@ again: eie = eie->next; eie->next = ref->inode_list; } - BUG_ON(ret < 0); } kfree(ref); }