From patchwork Mon Mar 25 11:09:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 2330491 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 3F82F3FC54 for ; Mon, 25 Mar 2013 11:09:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757080Ab3CYLJP (ORCPT ); Mon, 25 Mar 2013 07:09:15 -0400 Received: from mail-pa0-f48.google.com ([209.85.220.48]:33428 "EHLO mail-pa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756602Ab3CYLJM (ORCPT ); Mon, 25 Mar 2013 07:09:12 -0400 Received: by mail-pa0-f48.google.com with SMTP id hz10so971841pad.21 for ; Mon, 25 Mar 2013 04:09:12 -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; bh=nqCWemF/qocRrfpSxyFz+Xval28jD3MrqnKPITKVNAg=; b=uJIThfVuNq5x0tFZZ0unOPaFkidG5x1vyMuKSpNX/tcmepLoQt7VyVHQzV60162nkW oU3I6DDqnQpg9bVqQaum+Osp3zDpAqYagPosZ4TneAa5uK8YKCA0TTrhUp+utqtCJqkw sjR40hok0xtCrO7KNh7Rillrj8aiv5fs8jtQ4IbiOr9RDo6coQbfQRe0lPIE8xmJrSk1 dHPF9+la71ffAFeM65xYFfXFj48TS7qu3OKbI8+OdUQ900lqRuWquxSUuZQWyIvQ9r5o 7Stk5ijEZJHxQwvGntf5I4jpfeplABs3+WPZmTmm/OYBjYYVc/g4I2vPNnWDqOont+Bm 9IyQ== X-Received: by 10.68.95.1 with SMTP id dg1mr16555030pbb.161.1364209752133; Mon, 25 Mar 2013 04:09:12 -0700 (PDT) Received: from localhost.localdomain.localdomain ([112.3.240.11]) by mx.google.com with ESMTPS id 4sm13087577pbn.23.2013.03.25.04.09.10 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 25 Mar 2013 04:09:11 -0700 (PDT) From: Wang Shilong To: linux-btrfs@vger.kernel.org Cc: wangshilong1991@gmail.com, sensille@gmx.net Subject: [PATCH 2/2] Btrfs: kill some BUG_ONs() in the find_parent_nodes() Date: Mon, 25 Mar 2013 19:09:07 +0800 Message-Id: <1364209747-1623-1-git-send-email-wangshilong1991@gmail.com> X-Mailer: git-send-email 1.7.11.7 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 | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index bd605c8..a5e2beb 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,6 +921,8 @@ again: ret = ulist_add_merge(refs, ref->parent, (uintptr_t)ref->inode_list, (u64 *)&eie, GFP_NOFS); + if (ret) + 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); }