From patchwork Fri Mar 29 23:03:21 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 2368291 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 15A04DF264 for ; Sun, 31 Mar 2013 10:04:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751333Ab3CaKEg (ORCPT ); Sun, 31 Mar 2013 06:04:36 -0400 Received: from mail-pd0-f176.google.com ([209.85.192.176]:61516 "EHLO mail-pd0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750980Ab3CaKEf (ORCPT ); Sun, 31 Mar 2013 06:04:35 -0400 Received: by mail-pd0-f176.google.com with SMTP id r11so803801pdi.7 for ; Sun, 31 Mar 2013 03:04:34 -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=iBh/8y0T1LL5EKVnEa9JJOkMdkMwsnzUWfPWfFH3Hfo=; b=RiVoPEqKG3jx5CfEZQP0cYIVG2bi+MiEmtoA3/XPccXHzz4jpwixWBvztJxuhQd6NE Ydm2tIPQ0MjrFPNKAG2DDmv51JIn0srOtXLWTl/6jxF6vC1PGcGVymsXCfMyvf4NT3fH Pc3KsiCDZ7n+wtudfMxAmcM2ysdlpu0zbykPyB+iVRa7XL8WS9ts9zaBdnT4nI3n68/L NzafKOWQfXFzJyjRFiw49ko1pn3ubQLFBSqT+0N7+QKXt8URtSxkSQ83lDR8b7UV2SmH hxH7BAf0T9Ciqearx9BS1qJ24lUuwrvsiNpbiWzIH3SFqfsWrRclfLuUrq1rP783vbtB SS3w== X-Received: by 10.66.154.65 with SMTP id vm1mr13387817pab.110.1364724274883; Sun, 31 Mar 2013 03:04:34 -0700 (PDT) Received: from localhost.localdomain.localdomain ([112.3.240.238]) by mx.google.com with ESMTPS id k4sm9533317pbi.45.2013.03.31.03.04.32 (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 31 Mar 2013 03:04:34 -0700 (PDT) From: Wang Shilong To: wangshilong1991@gmail.com, linux-btrfs@vger.kernel.org Cc: sensille@gmx.net, list.btrfs@jan-o-sch.net, wangsl-fnst@cn.fujitsu.com Subject: [PATCH V3] Btrfs: kill some BUG_ONs() in the find_parent_nodes() Date: Sat, 30 Mar 2013 07:03:21 +0800 Message-Id: <1364598201-28723-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 --- Changelog: V2->V3: correct wrong check about ulist_add() and revert the check about ret=0 --- fs/btrfs/backref.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index bd605c8..3dd0693 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 < 0) + goto out; } if (ref->count && ref->parent) { struct extent_inode_elem *eie = NULL; @@ -920,6 +921,8 @@ again: ret = ulist_add_merge(refs, ref->parent, (uintptr_t)ref->inode_list, (u64 *)&eie, GFP_NOFS); + if (ret < 0) + goto out; if (!ret && extent_item_pos) { /* * we've recorded that parent, so we must extend @@ -930,7 +933,6 @@ again: eie = eie->next; eie->next = ref->inode_list; } - BUG_ON(ret < 0); } kfree(ref); }