From patchwork Thu Dec 3 18:22:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949263 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79840C0007A for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 446812085B for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731580AbgLCSXx (ORCPT ); Thu, 3 Dec 2020 13:23:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48310 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727156AbgLCSXu (ORCPT ); Thu, 3 Dec 2020 13:23:50 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E8BBC061A4F for ; Thu, 3 Dec 2020 10:23:04 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id u4so2999848qkk.10 for ; Thu, 03 Dec 2020 10:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iKLj6+/uDMAOxZtOXFOiq0hL6TkEN0Z1qIX5Qv9mpj0=; b=WhZTSOBQ1dtglqAObMhcodk4iSQn6XAE7S1bUlL6dBBhoPekjYTsfavRcACSZWv85n RbraDug/9m/YYOUjDRMfwuvAJlOb0+XlgIURgEHTfEbJqrEprzAmGybehBXggeW8NBPn EfEkifE76ayW58gSAQOvJZyJbPP/6CGJQELIBSFxL6E+rMsrQHV55YdoDPps78thn3sJ cKE14IHlGHdgbMmeMOVhN6AfhKgjeBacgBkB5mNQduhc74Bfio93k2AFlodKCzZpjbSM hyGUO8EblFJrkrXvZqVAM8WleAd7AXRC63FoxCSZkgvWQ358OyaePo615i4BqYIcW0a0 uWhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iKLj6+/uDMAOxZtOXFOiq0hL6TkEN0Z1qIX5Qv9mpj0=; b=BAUqxXkYTokYQ4y3neeVAdvR6Uqze2yTXMo1B7E6MzJbjE2V+xNalCPDlkDEGSYEAY wm0vJHSlilHEqbzW1+eQWogpdBelxMLDcfPpEtPHNASUSvqup6TCmmEvbpJitE0Q0bN5 bmvZVOwgGi3FSEk4Fre6fBHb0YS5mzB0AFRvr4XfuCPMhsyPnpojYftSvhQd9Uh684Ll 8+GOmnVUbaY/IgteFFsSzYMO7ZMRVjSh5OZnJ3qoa3HbJ/r+rkLUsFuIoC9nIooK25T5 NH3CSMZ7PCD2/r2yxYLCCsr2K0p9cs79TfUB1iHk264gqywvOmNFFNTow46RguUE2MOP Uztw== X-Gm-Message-State: AOAM533k85YnMKyhj5pbdIzRIzbWiWu58uURHaqe0ZqyhmC+/SMTpUGF 9h14QATJ5P1w+3kBmJOGsDs90oprOxrUoI7k X-Google-Smtp-Source: ABdhPJzL6iVzGhNRhXdWlpTts3jBmGno87oLas1H+8p4/lyTlopE2G9NsOU6u+VhN6yO8nbEBr1IRQ== X-Received: by 2002:a37:68ce:: with SMTP id d197mr4201722qkc.178.1607019783105; Thu, 03 Dec 2020 10:23:03 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 200sm2170003qkl.60.2020.12.03.10.23.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:02 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 01/53] btrfs: fix error handling in commit_fs_roots Date: Thu, 3 Dec 2020 13:22:07 -0500 Message-Id: <267b07e04d3d7bfa99a3fcffdc6b8f56cf1fdd44.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org While doing error injection I would sometimes get a corrupt file system. This is because I was injecting errors at btrfs_search_slot, but would only do it one time per stack. This uncovered a problem in commit_fs_roots, where if we get an error we would just break. However we're in a nested loop, the main loop being a loop to find all the dirty fs roots, and then subsequent root updates would succeed clearing the error value. This isn't likely to happen in real scenarios, however we could potentially get a random ENOMEM once and then not again, and we'd end up with a corrupted file system. Fix this by moving the error checking around a bit to the nested loop, as this is the only place where something will fail, and return the error as soon as it occurs. With this patch my reproducer no longer corrupts the file system. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 8e0f7a1029c6..a614f7699ce4 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1319,7 +1319,6 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) struct btrfs_root *gang[8]; int i; int ret; - int err = 0; spin_lock(&fs_info->fs_roots_radix_lock); while (1) { @@ -1331,6 +1330,8 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) break; for (i = 0; i < ret; i++) { struct btrfs_root *root = gang[i]; + int err; + radix_tree_tag_clear(&fs_info->fs_roots_radix, (unsigned long)root->root_key.objectid, BTRFS_ROOT_TRANS_TAG); @@ -1353,14 +1354,14 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) err = btrfs_update_root(trans, fs_info->tree_root, &root->root_key, &root->root_item); - spin_lock(&fs_info->fs_roots_radix_lock); if (err) - break; + return err; + spin_lock(&fs_info->fs_roots_radix_lock); btrfs_qgroup_free_meta_all_pertrans(root); } } spin_unlock(&fs_info->fs_roots_radix_lock); - return err; + return 0; } /* From patchwork Thu Dec 3 18:22:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949265 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C43B4C18E57 for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 949342085B for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731565AbgLCSXt (ORCPT ); Thu, 3 Dec 2020 13:23:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727770AbgLCSXq (ORCPT ); Thu, 3 Dec 2020 13:23:46 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D063FC061A51 for ; Thu, 3 Dec 2020 10:23:05 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id q22so3020777qkq.6 for ; Thu, 03 Dec 2020 10:23:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sVF29zjIMzK8Aj5Dvh77oVxPiV6X9DMRXLxv8SQexm0=; b=jnU5rLDL9/Ii/0EPYIy4bAFsjL8gtfJx5C3Gwdw9CenVglYu3ffeZYPQm12KdhMhpj VhKWTRvA7dMtnkhwHw4KVA8gm6DIFiF9emh4bA/UCpkJApxJ6URLisWQU2yWMeQUwnuz xeWXstlnWAwxcAQt4cdHJy4q2fn6pqnzvWFfjdpGFwvFDH9rzWLjlytZ2a/DO2DqZFx2 4gMaGi/tCy+WS4mWOVS9OMZkhe5Fkmk6EJ0329hqRBWd6gOP/L4kbRlCDx3yUCR0ywMJ 6ci2gKz8u5hYx8kH0DHvTgDNlKqDrBrSc8DR1WrOb3nAV1CDP7OBoyGnlYTpQyKhQbdV VhlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sVF29zjIMzK8Aj5Dvh77oVxPiV6X9DMRXLxv8SQexm0=; b=f0NyXzxBCRI1BxG95Clmz4bToHcAOOWXgt9i7HAw+Zh727iZXrHJMaDAoYXnNFTx+D tOfHKtcp7mZq9mdgiA+jglqw54qsjX+vOxWoLJS7kSGLg1zQn3K5yderQtno0FneMu+u X2kta7gBvHKEKJRROS+cSb5ZwwKrS4h4kNWjqi8jzWWBF/IsMoDp1P8QkwlQmlBBhTd4 SD5WZ270alNWOUZniWBaakOfTNe3snOKIRhbO8VQjAKq7bn1wvbCrFfYfKm/FaU0RaL9 5HhePtYkBfY0vAesbdwE9kW2u+HhP8x3C3ULmSu4aNctU4R+k3/B7oR+Hs1ib8Vke9y7 mtyQ== X-Gm-Message-State: AOAM530YWNbev79kqeym+N3t+tu0GuOpxzRnAh8y7oHtEub517g284i+ m6APHYWTeAQ9Nbz1ME6cPf3B3CMX4BaoPI6Y X-Google-Smtp-Source: ABdhPJzoY3G5mYgW3WddSZAgvRlrCDLI8T47AUO6sVqMoZr0eG9ofj69Kv9jfT9+I04hu7twyIYuSQ== X-Received: by 2002:a37:a2c5:: with SMTP id l188mr4248079qke.250.1607019784775; Thu, 03 Dec 2020 10:23:04 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y192sm2350719qkb.12.2020.12.03.10.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:04 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 02/53] btrfs: allow error injection for btrfs_search_slot and btrfs_cow_block Date: Thu, 3 Dec 2020 13:22:08 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org The following patches are going to address error handling in relocation, in order to test those patches I need to be able to inject errors in btrfs_search_slot and btrfs_cow_block, as we call both of these pretty often in different cases during relocation. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/ctree.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index e5a0941c4bde..f40d3a2590a5 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1494,6 +1494,7 @@ noinline int btrfs_cow_block(struct btrfs_trans_handle *trans, return ret; } +ALLOW_ERROR_INJECTION(btrfs_cow_block, ERRNO); /* * helper function for defrag to decide if two blocks pointed to by a @@ -2800,6 +2801,7 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, btrfs_release_path(p); return ret; } +ALLOW_ERROR_INJECTION(btrfs_search_slot, ERRNO); /* * Like btrfs_search_slot, this looks for a key in the given tree. It uses the From patchwork Thu Dec 3 18:22:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949261 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9EA8CC193FE for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6AD51207D0 for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731584AbgLCSXy (ORCPT ); Thu, 3 Dec 2020 13:23:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731579AbgLCSXx (ORCPT ); Thu, 3 Dec 2020 13:23:53 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 97860C061A52 for ; Thu, 3 Dec 2020 10:23:07 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id dm12so1440812qvb.3 for ; Thu, 03 Dec 2020 10:23:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=GNddX/0e9kcBUMopVlzs7hVvBNncJDN40C9lxwqurQ8=; b=zhu6/QNN7ftZlFOjMcqfTw+ERm5zTdaX2K+JhyJv+MlMJhr0YsHu6ImgJyuxviKowx p+QmeNf94TAItYUXjCl9YVLifpy6k6Ii8R3GdnbcMjjzPaEPuFsRWXkO9QVMiFAneySD TmFpIXgkr6Alj89f3cgLWjeapcMkFGtMiFXRqbZkEHh+RiFZQBxhBLqje286IiBwZ9oF oq+skhL+N3miZBgTLoL2Jwf2mF2X1eHkp6HglFcNlTu/WPtN/e2239Piew0BjVyC0oDO iE0z1SHUw0rsw2xzARhzQZ4SHsjdawD4v9Ni16IPyehltlQfuxSFNVT0rMamM1E99wa9 BxCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GNddX/0e9kcBUMopVlzs7hVvBNncJDN40C9lxwqurQ8=; b=mpsHhV1mMyilJ6JFjWjNKZRLthAZQxmLJAq6JHULNu4HZ2jWGtQnkBGF0i5YGr+Gst iW9ypYmSOOcW7mVaq1XDeMMSNDmhpB+yB4/kZoxtaJzxRDHQ6M+gSZuqB6mzt5CsgP8Y L7CyrFtLmyTf3Brb1FeuFkptIz5RcCXPigMNA0ls7wBQAHPdY+VkzwR3fzRJeUnCe7EB bFCgIYhH/8ksn+j4In3eEOWt1LrcRN+tDQbqPVdWhjeXsid9y6vbNwRAtwKcTtiVHaTR UkVkDmTKElyZ6NgiLrz9Tr3dRM4oMxUdwhS+0t23adzH/aOhoxP1/7XWSij57VVzKEI7 DjsQ== X-Gm-Message-State: AOAM5319D+eEeLtdyZ+mTiZF7o/hCfhcw4ApTXujF0+7OlHQ0MHmamnJ tj1uUOZhOUKJQP4NeXjcKTZzhCUjdUEpgWbH X-Google-Smtp-Source: ABdhPJyoPyLAevg8RlWsihoKE3LSijEuRnus91rccKvvOWVSGD1UrPmNo+cGXgUeY1f6wu3tki4PcQ== X-Received: by 2002:ad4:4725:: with SMTP id l5mr134070qvz.51.1607019786469; Thu, 03 Dec 2020 10:23:06 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id l7sm1240650qtc.74.2020.12.03.10.23.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:05 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 03/53] btrfs: modify the new_root highest_objectid under a ref count Date: Thu, 3 Dec 2020 13:22:09 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Qu pointed out a bug in one of my error handling patches, which made me notice that we modify the new_root->highest_objectid _after_ we've dropped the ref to the new_root. This could lead to a possible UAF, fix this by modifying the ->highest_objectid before we drop our reference to the new_root. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/ioctl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 703212ff50a5..f240beed4739 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -717,6 +717,12 @@ static noinline int create_subvol(struct inode *dir, btrfs_record_root_in_trans(trans, new_root); ret = btrfs_create_subvol_root(trans, new_root, root, new_dirid); + if (!ret) { + mutex_lock(&new_root->objectid_mutex); + new_root->highest_objectid = new_dirid; + mutex_unlock(&new_root->objectid_mutex); + } + btrfs_put_root(new_root); if (ret) { /* We potentially lose an unused inode item here */ @@ -724,10 +730,6 @@ static noinline int create_subvol(struct inode *dir, goto fail; } - mutex_lock(&new_root->objectid_mutex); - new_root->highest_objectid = new_dirid; - mutex_unlock(&new_root->objectid_mutex); - /* * insert the directory item */ From patchwork Thu Dec 3 18:22:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949267 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F01EDC19425 for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C019E207D0 for ; Thu, 3 Dec 2020 18:23:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731567AbgLCSXx (ORCPT ); Thu, 3 Dec 2020 13:23:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727770AbgLCSXu (ORCPT ); Thu, 3 Dec 2020 13:23:50 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F327C061A53 for ; Thu, 3 Dec 2020 10:23:10 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id o1so2053173qtp.5 for ; Thu, 03 Dec 2020 10:23:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3MBAVyNUqf/0LMFLeiGY+TpoYSaKveLLXpRtIg0JpiI=; b=tmPFKYRTkXMfYqcMCeyWCtkSTnkkvo52Tz+Uv5ZK3BVQljGItX+woFpoYGVCXJRpbe 8jJ6Qy4dj0jpDErVlmufnIqltPX7/HyDMI29JYzd4PCL5sGqBxzipJEb1JX4kjr06EMB /qMEwRlLpeB15D+IZAyRBB+84udFonHI4oc39F+dLskiJtFp6O6MyJODJFn941XI1quu lZHtnQSyo7cJAAMnL4UgK9k/xfPhypoOBUCHIEjaXN2ZHfFWhxsJT+ntZTiYxwBEOztA TwYWbzZmuvLrixrwd3mLEekw5/YwvNvmlO1begI7fXs3eMdri8CPXLnomJFChV6VRw79 yzFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3MBAVyNUqf/0LMFLeiGY+TpoYSaKveLLXpRtIg0JpiI=; b=sZ+bEO2g8b9ptcZItmHqa8apkve0FCHavOeOVqxYM0ukipTMAaJcby8SMAJoNCVdZw 3pn4qi4MGqa3jR7MNkC8qCK/ya/tD+Q6KxNEdqfuX91M8ew2789aqpxwMkJHezhG9aha HjyzY3MHk44ODffe2IwJGFTyEe/ycCZ3agdIO8x/vi/VdZ4YebgqCIf6dvVAnmhlcbMP 8qrNzRA9zqZylV22pJ+95LNQMZf4bz4FGRuFpVubXRjX2c+q7csud5ngY2X2kgsjGbeq 2xLRqD12Kh5htltRRsg6apCLCG58TkRzqSvrnMwROirQ0u5vb9KflTL12lVOBg1fpZQi 2f/A== X-Gm-Message-State: AOAM532rIFQnfXmwyeLfzHdGEp6bRh78j0STUt/KzUURHaD7T5lqAJFh jcm7I284vdDG99g9GY2ot2nQ6AiVghJQwP7z X-Google-Smtp-Source: ABdhPJx1Bb13o61XnMsC9L5MZsP80xmWD9XLndG2HKhMuvw/gIuhE1I/WZ8YSIYyRSjYkLqpJvLdjg== X-Received: by 2002:ac8:5308:: with SMTP id t8mr4547421qtn.85.1607019788097; Thu, 03 Dec 2020 10:23:08 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id q18sm2343840qkn.96.2020.12.03.10.23.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:07 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 04/53] btrfs: fix lockdep splat in btrfs_recover_relocation Date: Thu, 3 Dec 2020 13:22:10 -0500 Message-Id: <8c488d649b55f7f23de4fe232bf857512ce2f9d4.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org While testing the error paths of relocation I hit the following lockdep splat ====================================================== WARNING: possible circular locking dependency detected 5.10.0-rc6+ #217 Not tainted ------------------------------------------------------ mount/779 is trying to acquire lock: ffffa0e676945418 (&fs_info->balance_mutex){+.+.}-{3:3}, at: btrfs_recover_balance+0x2f0/0x340 but task is already holding lock: ffffa0e60ee31da8 (btrfs-root-00){++++}-{3:3}, at: __btrfs_tree_read_lock+0x27/0x100 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (btrfs-root-00){++++}-{3:3}: down_read_nested+0x43/0x130 __btrfs_tree_read_lock+0x27/0x100 btrfs_read_lock_root_node+0x31/0x40 btrfs_search_slot+0x462/0x8f0 btrfs_update_root+0x55/0x2b0 btrfs_drop_snapshot+0x398/0x750 clean_dirty_subvols+0xdf/0x120 btrfs_recover_relocation+0x534/0x5a0 btrfs_start_pre_rw_mount+0xcb/0x170 open_ctree+0x151f/0x1726 btrfs_mount_root.cold+0x12/0xea legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 vfs_kern_mount.part.0+0x71/0xb0 btrfs_mount+0x10d/0x380 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 path_mount+0x433/0xc10 __x64_sys_mount+0xe3/0x120 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #1 (sb_internal#2){.+.+}-{0:0}: start_transaction+0x444/0x700 insert_balance_item.isra.0+0x37/0x320 btrfs_balance+0x354/0xf40 btrfs_ioctl_balance+0x2cf/0x380 __x64_sys_ioctl+0x83/0xb0 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xa9 -> #0 (&fs_info->balance_mutex){+.+.}-{3:3}: __lock_acquire+0x1120/0x1e10 lock_acquire+0x116/0x370 __mutex_lock+0x7e/0x7b0 btrfs_recover_balance+0x2f0/0x340 open_ctree+0x1095/0x1726 btrfs_mount_root.cold+0x12/0xea legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 vfs_kern_mount.part.0+0x71/0xb0 btrfs_mount+0x10d/0x380 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 path_mount+0x433/0xc10 __x64_sys_mount+0xe3/0x120 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xa9 other info that might help us debug this: Chain exists of: &fs_info->balance_mutex --> sb_internal#2 --> btrfs-root-00 Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(btrfs-root-00); lock(sb_internal#2); lock(btrfs-root-00); lock(&fs_info->balance_mutex); *** DEADLOCK *** 2 locks held by mount/779: #0: ffffa0e60dc040e0 (&type->s_umount_key#47/1){+.+.}-{3:3}, at: alloc_super+0xb5/0x380 #1: ffffa0e60ee31da8 (btrfs-root-00){++++}-{3:3}, at: __btrfs_tree_read_lock+0x27/0x100 stack backtrace: CPU: 0 PID: 779 Comm: mount Not tainted 5.10.0-rc6+ #217 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014 Call Trace: dump_stack+0x8b/0xb0 check_noncircular+0xcf/0xf0 ? trace_call_bpf+0x139/0x260 __lock_acquire+0x1120/0x1e10 lock_acquire+0x116/0x370 ? btrfs_recover_balance+0x2f0/0x340 __mutex_lock+0x7e/0x7b0 ? btrfs_recover_balance+0x2f0/0x340 ? btrfs_recover_balance+0x2f0/0x340 ? rcu_read_lock_sched_held+0x3f/0x80 ? kmem_cache_alloc_trace+0x2c4/0x2f0 ? btrfs_get_64+0x5e/0x100 btrfs_recover_balance+0x2f0/0x340 open_ctree+0x1095/0x1726 btrfs_mount_root.cold+0x12/0xea ? rcu_read_lock_sched_held+0x3f/0x80 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 vfs_kern_mount.part.0+0x71/0xb0 btrfs_mount+0x10d/0x380 ? __kmalloc_track_caller+0x2f2/0x320 legacy_get_tree+0x30/0x50 vfs_get_tree+0x28/0xc0 ? capable+0x3a/0x60 path_mount+0x433/0xc10 __x64_sys_mount+0xe3/0x120 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xa9 This is thankfully straightforward to fix, simply release the path before we setup the reloc_ctl. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/volumes.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7930e1c78c45..49ba941f0314 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4318,6 +4318,8 @@ int btrfs_recover_balance(struct btrfs_fs_info *fs_info) btrfs_warn(fs_info, "balance: cannot set exclusive op status, resume manually"); + btrfs_release_path(path); + mutex_lock(&fs_info->balance_mutex); BUG_ON(fs_info->balance_ctl); spin_lock(&fs_info->balance_lock); From patchwork Thu Dec 3 18:22:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949275 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A96CAC4361B for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4AC012085B for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387833AbgLCSY0 (ORCPT ); Thu, 3 Dec 2020 13:24:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728120AbgLCSYZ (ORCPT ); Thu, 3 Dec 2020 13:24:25 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36790C061A54 for ; Thu, 3 Dec 2020 10:23:11 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id h20so3025182qkk.4 for ; Thu, 03 Dec 2020 10:23:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=f34mcb9XXh/cL7nrpP5fwhxQKsWJY1NBHrErhfZO+94=; b=gYxG9tpQ0cRG1dFzwCuNr3l6f7BM5W7RezP8mwBUbZUD906H9gZQyf99TYITPkr+CB VpHexGIPlUjn++wOBBkpQWkfo32Ko7CGB1BdFDbJV6WrhpftfFBtSOR12rTDv/7MAjQN Q70POUA6H6ytnVEkVF47KlEeppv3ku5PavFS7sg8Pd/YsP+tJzz2DOHH5I0xBtA836s/ 8MSilc63IwWAv304RTmyjrw+IfAVZClGudvySmc6Awvl2JxzPuENapL0zuxxV91Sfgfn c24h2PVDXBa7iCgZ25Ftv0IeCLMWk9ttbdaJWhsm8VvJTHgbkNRsrfoHJC2xVvG+w6qB e33w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=f34mcb9XXh/cL7nrpP5fwhxQKsWJY1NBHrErhfZO+94=; b=aPUE7TWuL4BCHfS3mV/3N8ofT4od3uK0C0rz3Hg+M4NvXYyReNBGd0CVBnve9MJPgx Joi+RqXbxGe7WIA3cna1qIkZhBc4WEOPTDcawyrYhDbwtlJ26aogYSKNrJWBshyMpsPv gpGwy0+Ai7Mma/qJ52goqc+lYx2PMi0oPVryu34D8z/3+MKDzJspueH/Vcgqn2qdIas+ awE9urU0YCqa1EMOkK8TnMrIj5zpEYylBnlVoiouxH38GVpy+/8LwteTmKLNXO3ZbkgS f/F93JQrwb0hk4DfQwIPTAhgaNEuLbKNGihgwOvmH+RS0+0YJWWA4Qrk362laLWtdEU+ Apog== X-Gm-Message-State: AOAM530UAXSoX2WG8hdoVUuOn/SYIc/JkuKfAMeQw+o0MsiuSo0Kf5yO V0kakb0mM7l3ltuWcKyeRbOLU39nvw0B7dlX X-Google-Smtp-Source: ABdhPJylp6ES3mTgiiEeANlrpx4HYiWQpnWjt5jQ77uUiMxxtvrcpL9sA4Shk2Kn4HejAOqtw6YKUw== X-Received: by 2002:a37:4649:: with SMTP id t70mr4164661qka.99.1607019789761; Thu, 03 Dec 2020 10:23:09 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id s92sm395699qtd.95.2020.12.03.10.23.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:09 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 05/53] btrfs: keep track of the root owner for relocation reads Date: Thu, 3 Dec 2020 13:22:11 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org While testing the error paths in relocation, I hit the following lockdep splat ====================================================== WARNING: possible circular locking dependency detected 5.10.0-rc3+ #206 Not tainted ------------------------------------------------------ btrfs-balance/1571 is trying to acquire lock: ffff8cdbcc8f77d0 (&head_ref->mutex){+.+.}-{3:3}, at: btrfs_lookup_extent_info+0x156/0x3b0 but task is already holding lock: ffff8cdbc54adbf8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_lock+0x27/0x100 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (btrfs-tree-00){++++}-{3:3}: down_write_nested+0x43/0x80 __btrfs_tree_lock+0x27/0x100 btrfs_search_slot+0x248/0x890 relocate_tree_blocks+0x490/0x650 relocate_block_group+0x1ba/0x5d0 kretprobe_trampoline+0x0/0x50 -> #1 (btrfs-csum-01){++++}-{3:3}: down_read_nested+0x43/0x130 __btrfs_tree_read_lock+0x27/0x100 btrfs_read_lock_root_node+0x31/0x40 btrfs_search_slot+0x5ab/0x890 btrfs_del_csums+0x10b/0x3c0 __btrfs_free_extent+0x49d/0x8e0 __btrfs_run_delayed_refs+0x283/0x11f0 btrfs_run_delayed_refs+0x86/0x220 btrfs_start_dirty_block_groups+0x2ba/0x520 kretprobe_trampoline+0x0/0x50 -> #0 (&head_ref->mutex){+.+.}-{3:3}: __lock_acquire+0x1167/0x2150 lock_acquire+0x116/0x3e0 __mutex_lock+0x7e/0x7b0 btrfs_lookup_extent_info+0x156/0x3b0 walk_down_proc+0x1c3/0x280 walk_down_tree+0x64/0xe0 btrfs_drop_subtree+0x182/0x260 do_relocation+0x52e/0x660 relocate_tree_blocks+0x2ae/0x650 relocate_block_group+0x1ba/0x5d0 kretprobe_trampoline+0x0/0x50 other info that might help us debug this: Chain exists of: &head_ref->mutex --> btrfs-csum-01 --> btrfs-tree-00 Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(btrfs-tree-00); lock(btrfs-csum-01); lock(btrfs-tree-00); lock(&head_ref->mutex); *** DEADLOCK *** 5 locks held by btrfs-balance/1571: #0: ffff8cdb89749ff8 (&fs_info->delete_unused_bgs_mutex){+.+.}-{3:3}, at: btrfs_balance+0x563/0xf40 #1: ffff8cdb89748838 (&fs_info->cleaner_mutex){+.+.}-{3:3}, at: btrfs_relocate_block_group+0x156/0x300 #2: ffff8cdbc2c16650 (sb_internal#2){.+.+}-{0:0}, at: start_transaction+0x413/0x5c0 #3: ffff8cdbc135f538 (btrfs-treloc-01){+.+.}-{3:3}, at: __btrfs_tree_lock+0x27/0x100 #4: ffff8cdbc54adbf8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_lock+0x27/0x100 stack backtrace: CPU: 1 PID: 1571 Comm: btrfs-balance Not tainted 5.10.0-rc3+ #206 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014 Call Trace: dump_stack+0x8b/0xb0 check_noncircular+0xcf/0xf0 ? trace_call_bpf+0x139/0x260 __lock_acquire+0x1167/0x2150 lock_acquire+0x116/0x3e0 ? btrfs_lookup_extent_info+0x156/0x3b0 __mutex_lock+0x7e/0x7b0 ? btrfs_lookup_extent_info+0x156/0x3b0 ? btrfs_lookup_extent_info+0x156/0x3b0 ? release_extent_buffer+0x124/0x170 ? _raw_spin_unlock+0x1f/0x30 ? release_extent_buffer+0x124/0x170 btrfs_lookup_extent_info+0x156/0x3b0 walk_down_proc+0x1c3/0x280 walk_down_tree+0x64/0xe0 btrfs_drop_subtree+0x182/0x260 do_relocation+0x52e/0x660 relocate_tree_blocks+0x2ae/0x650 ? add_tree_block+0x149/0x1b0 relocate_block_group+0x1ba/0x5d0 elfcorehdr_read+0x40/0x40 ? elfcorehdr_read+0x40/0x40 ? btrfs_balance+0x796/0xf40 ? __kthread_parkme+0x66/0x90 ? btrfs_balance+0xf40/0xf40 ? balance_kthread+0x37/0x50 ? kthread+0x137/0x150 ? __kthread_bind_mask+0x60/0x60 ? ret_from_fork+0x1f/0x30 As you can see this is bogus, we never take another tree's lock under the csum lock. This happens because sometimes we have to read tree blocks from disk without knowing which root they belong to during relocation. We defaulted to an owner of 0, which translates to an fs tree. This is fine as all fs trees have the same class, but obviously isn't fine if the block belongs to a cow only tree. Thankfully cow only trees only have their owners root as a reference to them, and since we already look up the extent information during relocation, go ahead and check and see if this block might belong to a cow only tree, and if so save the owner in the struct tree_block. This allows us to read_tree_block with the proper owner, which gets rid of this lockdep splat. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/relocation.c | 47 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 19b7db8b2117..2b30e39e922a 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -98,6 +98,7 @@ struct tree_block { u64 bytenr; }; /* Use rb_simple_node for search/insert */ struct btrfs_key key; + u64 owner; unsigned int level:8; unsigned int key_ready:1; }; @@ -2393,8 +2394,8 @@ static int get_tree_block_key(struct btrfs_fs_info *fs_info, { struct extent_buffer *eb; - eb = read_tree_block(fs_info, block->bytenr, 0, block->key.offset, - block->level, NULL); + eb = read_tree_block(fs_info, block->bytenr, block->owner, + block->key.offset, block->level, NULL); if (IS_ERR(eb)) { return PTR_ERR(eb); } else if (!extent_buffer_uptodate(eb)) { @@ -2493,7 +2494,8 @@ int relocate_tree_blocks(struct btrfs_trans_handle *trans, /* Kick in readahead for tree blocks with missing keys */ rbtree_postorder_for_each_entry_safe(block, next, blocks, rb_node) { if (!block->key_ready) - btrfs_readahead_tree_block(fs_info, block->bytenr, 0, 0, + btrfs_readahead_tree_block(fs_info, block->bytenr, + block->owner, 0, block->level); } @@ -2801,21 +2803,59 @@ static int add_tree_block(struct reloc_control *rc, u32 item_size; int level = -1; u64 generation; + u64 owner = 0; eb = path->nodes[0]; item_size = btrfs_item_size_nr(eb, path->slots[0]); if (extent_key->type == BTRFS_METADATA_ITEM_KEY || item_size >= sizeof(*ei) + sizeof(*bi)) { + unsigned long ptr = 0, end; + ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); + end = (unsigned long)ei + item_size; if (extent_key->type == BTRFS_EXTENT_ITEM_KEY) { bi = (struct btrfs_tree_block_info *)(ei + 1); level = btrfs_tree_block_level(eb, bi); + ptr = (unsigned long)(bi + 1); } else { level = (int)extent_key->offset; + ptr = (unsigned long)(ei + 1); } generation = btrfs_extent_generation(eb, ei); + + /* + * We're reading random blocks without knowing their owner ahead + * of time. This is ok most of the time, as all reloc roots and + * fs roots have the same lock type. However normal trees do + * not, and the only way to know ahead of time is to read the + * inline ref offset. We know it's an fs root if + * + * 1. There's more than one ref. + * 2. There's a SHARED_DATA_REF_KEY set. + * 3. FULL_BACKREF is set on the flags. + * + * Otherwise it's safe to assume that the ref offset == the + * owner of this block, so we can use that when calling + * read_tree_block. + */ + if (btrfs_extent_refs(eb, ei) == 1 && + !(btrfs_extent_flags(eb, ei) & + BTRFS_BLOCK_FLAG_FULL_BACKREF) && + ptr < end) { + struct btrfs_extent_inline_ref *iref; + int type; + + iref = (struct btrfs_extent_inline_ref *)ptr; + type = btrfs_get_extent_inline_ref_type(eb, iref, + BTRFS_REF_TYPE_BLOCK); + if (type == BTRFS_REF_TYPE_INVALID) + return -EINVAL; + if (type == BTRFS_TREE_BLOCK_REF_KEY) + owner = btrfs_extent_inline_ref_offset(eb, + iref); + } } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) { btrfs_print_v0_err(eb->fs_info); btrfs_handle_fs_error(eb->fs_info, -EINVAL, NULL); @@ -2837,6 +2877,7 @@ static int add_tree_block(struct reloc_control *rc, block->key.offset = generation; block->level = level; block->key_ready = 0; + block->owner = owner; rb_node = rb_simple_insert(blocks, block->bytenr, &block->rb_node); if (rb_node) From patchwork Thu Dec 3 18:22:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949269 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04376C0007A for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A26AC208A9 for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387984AbgLCSYc (ORCPT ); Thu, 3 Dec 2020 13:24:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731579AbgLCSYb (ORCPT ); Thu, 3 Dec 2020 13:24:31 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8837CC061A55 for ; Thu, 3 Dec 2020 10:23:12 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id b144so2964779qkc.13 for ; Thu, 03 Dec 2020 10:23:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EJCA1WFu34YlfNRq8jOTmY3WvoNsmIlp/39i55U+He4=; b=ajwR7Pd8j6JTRfLqCNbyHS6gh1WS1FDk8oUnGr8uiqrTPDvIPO3SWo3C3zBfn/hfgN 83ruSFXrzSfUeRB49dSPUagWayZkh3QsP4LxRjThCihTglZdK8Qgqr+LCyj+i6E7adLN GSPAAMDeIHj/84dzBs8lW3HKpwuZvHeU7RnMmg9BBYu02PmcaCEkwy+g4LYxmEmj97cx 08NyUJQdmh059nskKqn0PnUOJoU8CG3/BV5HvxjUv2VUVFL6DoGa8mcczAOjBWKEqH3v 2Chq/fQn4cWsrNkWq0M0rKNLLT5xHNXXS+7B1r/+uHI63rsIo8t+vbYPM59NMFVRG7MC VMbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EJCA1WFu34YlfNRq8jOTmY3WvoNsmIlp/39i55U+He4=; b=F5WsHd5VlDqLPo78PMtZO4vyATWIimboB1twqePK5kIcPBf9qr04xUwqoOy5N73yDM s9xsrN05LykHNGB2Y99i72tVlIxfE7IOqrRpgAMh/6CSnYB6kxEGiG4N7hpVtkxb8Z5h SBTOhsxO7RO7ttM0eFdVABpdYxFa/jNrQX4TeCmhmtzsqUGgKg6b3pLJCsHsh3LgUSCd fAeYUYvsTfKu71dVNVpI5N8yu2DRi5tdoYI5W5zhkD/JAKedGY+ZT12txHLN696oolfR 0U9AOSYoNN8RLRSq3MrjcXEytqxm8IG88+ssZINniPzaNqBs9oVbou4bVMgFxiY0uHyY QCiQ== X-Gm-Message-State: AOAM533Hppo0KbY4q65r6Qd2egF+m/ebNSVTljXtPF/x86rLSJVRbPgB y7aTj5FGG3/toirDg8Lr3AlDEt7KHyKCj7Lx X-Google-Smtp-Source: ABdhPJyEMtfFF8uX7t3PQkGaAbPK2sPzsphVRdTSP4qgbKwzzXzByosxFPXZMDtkalYKO/UGszkCJA== X-Received: by 2002:a05:620a:12e9:: with SMTP id f9mr4182583qkl.86.1607019791518; Thu, 03 Dec 2020 10:23:11 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id k46sm2135628qtb.93.2020.12.03.10.23.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:10 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 06/53] btrfs: noinline btrfs_should_cancel_balance Date: Thu, 3 Dec 2020 13:22:12 -0500 Message-Id: <4c788ce2fa56e8621079509c87221ac0d2d27c39.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I was attempting to reproduce a problem that Zygo hit, but my error injection wasn't firing for a few of the common calls to btrfs_should_cancel_balance. This is because the compiler decided to inline it at these spots. Keep this from happening by explicitly noinline'ing the function so that error injection will always work. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 2b30e39e922a..ce935139d87b 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2617,7 +2617,7 @@ int setup_extent_mapping(struct inode *inode, u64 start, u64 end, /* * Allow error injection to test balance cancellation */ -int btrfs_should_cancel_balance(struct btrfs_fs_info *fs_info) +noinline int btrfs_should_cancel_balance(struct btrfs_fs_info *fs_info) { return atomic_read(&fs_info->balance_cancel_req) || fatal_signal_pending(current); From patchwork Thu Dec 3 18:22:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949271 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE5C8C4167B for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7670C208BA for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387918AbgLCSY3 (ORCPT ); Thu, 3 Dec 2020 13:24:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728120AbgLCSY3 (ORCPT ); Thu, 3 Dec 2020 13:24:29 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 508E6C061A56 for ; Thu, 3 Dec 2020 10:23:15 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id z3so2040373qtw.9 for ; Thu, 03 Dec 2020 10:23:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=U/ZltL4YxiXvMtQIs4ID4XcnLkWVuTx7SSXbu0ywjvI=; b=kHc6k7Apvca2bugkO+JpvgxF9dYy2n8MEtUL5fzUG4PETlxV3vUSKEZ6os+pLfvl7S McAzCPQ+TKaMeuwNURSy1HjIjuzWRZEGKKnU1H8jsHitXzkWleQPyOXyqqFksEfoUUVW ptvAyyvzTN+5fiiLNuK746HPSuyuuAlYh9rrqhFhh3s9ckQEKJaBOTm4w4+/ql/VrxET x84wuEJSXBYmQJc21Q/RlprIOHdSW+0HE+Whrmd2Sa9kZe/WOXiTTsqxbipEjePA5bqX PYY2VEswaokYXhFNuuKVRN275Q1yneYD4AjyFqoqaME86XOSWE+gFYR/2JxReQsXNnGE ldYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=U/ZltL4YxiXvMtQIs4ID4XcnLkWVuTx7SSXbu0ywjvI=; b=lB363ElzoyFr+CWV05WoE53avre3ks1LNqmllz7aWHtQi9VvEtTFYH3hi1lh3edLfR 4XA4Y2gkSNHgJCPx/9Kg+PtH6XJ54bhTaNzL35DWt+2a5SDGQJZYCVkxYchWrV9QvX9R cklFi2zGiB1kZHla6FjPeYG9/vBvHceJ4Y5VoGTFkvzUsd6xKrXi7PA3f43j02rzyz8d /vjrbXiMA53CL2yJHkt2VER9eSdwM374vMBCxBV8cH02QZuqDmcpUOK9g3W2doKKmK8N K4RIzCf/ntFV233wKcwXEQHv8a3N9a4m4YyALVU9EwzhOgDFQ6Z9B2Uxpzd9rF9IAxSJ xJ/Q== X-Gm-Message-State: AOAM533F0yKuHKz4N0db0R4h3go0M7VaBNNy97peKP9pAplvbwSY/pT+ iSu7S1SlkA56YCDqz4vmEiS7FMriwDo/i9cW X-Google-Smtp-Source: ABdhPJzkgQSf0gqYFDbVuME71Qr/paeYoDE5viWSHRkinCrMncRRv+wwBhwkhOQZTR3iTTFS8H9nzA== X-Received: by 2002:aed:32c7:: with SMTP id z65mr4589728qtd.266.1607019793243; Thu, 03 Dec 2020 10:23:13 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id z20sm2144376qtb.31.2020.12.03.10.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:12 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 07/53] btrfs: do not cleanup upper nodes in btrfs_backref_cleanup_node Date: Thu, 3 Dec 2020 13:22:13 -0500 Message-Id: <3196793231c00ea35b74770f034c3ee70df1973c.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Zygo reported the following panic when testing my error handling patches for relocation ------------[ cut here ]------------ kernel BUG at fs/btrfs/backref.c:2545! invalid opcode: 0000 [#1] SMP KASAN PTI CPU: 3 PID: 8472 Comm: btrfs Tainted: G W 14 Hardware name: QEMU Standard PC (i440FX + PIIX, Call Trace: btrfs_backref_error_cleanup+0x4df/0x530 build_backref_tree+0x1a5/0x700 ? _raw_spin_unlock+0x22/0x30 ? release_extent_buffer+0x225/0x280 ? free_extent_buffer.part.52+0xd7/0x140 relocate_tree_blocks+0x2a6/0xb60 ? kasan_unpoison_shadow+0x35/0x50 ? do_relocation+0xc10/0xc10 ? kasan_kmalloc+0x9/0x10 ? kmem_cache_alloc_trace+0x6a3/0xcb0 ? free_extent_buffer.part.52+0xd7/0x140 ? rb_insert_color+0x342/0x360 ? add_tree_block.isra.36+0x236/0x2b0 relocate_block_group+0x2eb/0x780 ? merge_reloc_roots+0x470/0x470 btrfs_relocate_block_group+0x26e/0x4c0 btrfs_relocate_chunk+0x52/0x120 btrfs_balance+0xe2e/0x18f0 ? pvclock_clocksource_read+0xeb/0x190 ? btrfs_relocate_chunk+0x120/0x120 ? lock_contended+0x620/0x6e0 ? do_raw_spin_lock+0x1e0/0x1e0 ? do_raw_spin_unlock+0xa8/0x140 btrfs_ioctl_balance+0x1f9/0x460 btrfs_ioctl+0x24c8/0x4380 ? __kasan_check_read+0x11/0x20 ? check_chain_key+0x1f4/0x2f0 ? __asan_loadN+0xf/0x20 ? btrfs_ioctl_get_supported_features+0x30/0x30 ? kvm_sched_clock_read+0x18/0x30 ? check_chain_key+0x1f4/0x2f0 ? lock_downgrade+0x3f0/0x3f0 ? handle_mm_fault+0xad6/0x2150 ? do_vfs_ioctl+0xfc/0x9d0 ? ioctl_file_clone+0xe0/0xe0 ? check_flags.part.50+0x6c/0x1e0 ? check_flags.part.50+0x6c/0x1e0 ? check_flags+0x26/0x30 ? lock_is_held_type+0xc3/0xf0 ? syscall_enter_from_user_mode+0x1b/0x60 ? do_syscall_64+0x13/0x80 ? rcu_read_lock_sched_held+0xa1/0xd0 ? __kasan_check_read+0x11/0x20 ? __fget_light+0xae/0x110 __x64_sys_ioctl+0xc3/0x100 do_syscall_64+0x37/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xa9 This occurs because of this check if (RB_EMPTY_NODE(&upper->rb_node)) BUG_ON(!list_empty(&node->upper)); As we are dropping the backref node, if we discover that our upper node in the edge we just cleaned up isn't linked into the cache that we are now done with this node, thus the BUG_ON(). However this is an erroneous assumption, as we will look up all the references for a node first, and then process the pending edges. All of the 'upper' nodes in our pending edges won't be in the cache's rb_tree yet, because they haven't been processed. We could very well have many edges still left to cleanup on this node. The fact is we simply do not need this check, we can just process all of the edges only for this node, because below this check we do the following if (list_empty(&upper->lower)) { list_add_tail(&upper->lower, &cache->leaves); upper->lowest = 1; } If the upper node truly isn't used yet, then we add it to the cache->leaves list to be cleaned up later. If it is still used then the last child node that has it linked into its node will add it to the leaves list and then it will be cleaned up. Fix this problem by dropping this logic altogether. With this fix I no longer see the panic when testing with error injection in the backref code. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/backref.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 02d7d7b2563b..56f7c840031e 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -2541,13 +2541,6 @@ void btrfs_backref_cleanup_node(struct btrfs_backref_cache *cache, list_del(&edge->list[UPPER]); btrfs_backref_free_edge(cache, edge); - if (RB_EMPTY_NODE(&upper->rb_node)) { - BUG_ON(!list_empty(&node->upper)); - btrfs_backref_drop_node(cache, node); - node = upper; - node->lowest = 1; - continue; - } /* * Add the node to leaf node list if no other child block * cached. From patchwork Thu Dec 3 18:22:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949279 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79211C18E57 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3A18A208A9 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389182AbgLCSYf (ORCPT ); Thu, 3 Dec 2020 13:24:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388028AbgLCSYf (ORCPT ); Thu, 3 Dec 2020 13:24:35 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05E83C08C5F2 for ; Thu, 3 Dec 2020 10:23:16 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id f15so2028106qto.13 for ; Thu, 03 Dec 2020 10:23:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=mPX5Za2NooXPbg+T4vFkZbU7CR5nDWX/OvCiwKAeGGo=; b=aLVk024lERVqvieh5pgZuWJdLHwbn5VZnFF752ziUc5/e3gSX6PoWRidP5tx2HBVq4 WLmTbaxSWBkfA6zPrJBwI2ZH2yAVFo+so09h1whOi7C9rZvN0iP3yEgn/o8ZYymF+xmf pdZg2mMfH/MLavN5ozz+WzFizkEBhzmQs0XHx3RnU2ZhvKCn/2Z810pgGTc03hDUoKrJ 0PtXzU+ueLEnhudrgbf3OPabxh9vsH0YZI+i2brM9MzJlVYrnsPOK/LVlgZnhoeaK0er j3fxyFoMIHaizZJE8Ws8c4bzOAPGKlsuUybT0ChHtlHOcRu9PkfjjQIRs3Pwi1jHp4k4 fkeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mPX5Za2NooXPbg+T4vFkZbU7CR5nDWX/OvCiwKAeGGo=; b=PC/HMti+iS0J1BlLPSFYmzsIz6pick42YsSmDsxNjRhZ9fzB8FBbETu+6LFLWmiLm2 C+kuIfw9tBN8U2iLhBZHGCpJwCG49JUmyISp4RnKMPyfaDQ4/lXA0DifApNSf0XW6mmi SYrC+QwMcJfocS2K9flQkjeSLHLjPVw44lDe6k257orRp5LSpdlLyZ9XA9B59MK7yqJD QBwxZ5A+G8o/Sp0SbaWuts2tUAQWGTiW01ATIvYYSth7rjYKCpHAfoPiy7CIum5sVvPx rIzJVaMOnk/9UMRioNfcV5rTqworUzomjRmmGZtw8b2VEKBMn5YsuRrJEymXlJhG977T 0Nlw== X-Gm-Message-State: AOAM532wVeVTfgHZYnIY0odTCkKw3TGCa5Hc0Frbt9iAghV/387wgqY2 8rUU3v2xRCyEzDu8TIb95JdVmbc+Hw/VPboP X-Google-Smtp-Source: ABdhPJzs91mAEGuTah1b1St5jV2l4o12RFPCBpTHa7luDZpweNCczzRoJrGHs548T5Uhbv9xRWNhDA== X-Received: by 2002:ac8:5990:: with SMTP id e16mr4523223qte.52.1607019794898; Thu, 03 Dec 2020 10:23:14 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 131sm1996721qkg.69.2020.12.03.10.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:14 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 08/53] btrfs: pass down the tree block level through ref-verify Date: Thu, 3 Dec 2020 13:22:14 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I noticed that sometimes I would have the wrong level printed out with ref-verify while testing some error injection related problems. This is because we only get the level from the main extent item, but our references could go off the current leaf into another, and at that point we lose our level. Fix this by keeping track of the last tree block level that we found, the same way we keep track of our bytenr and num_bytes, in case we happen to wander into another leaf while still processing the references for a bytenr. Signed-off-by: Josef Bacik Reviewed-by: Johannes Thumshirn --- fs/btrfs/ref-verify.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c index 4b9b6c52a83b..409b02566b25 100644 --- a/fs/btrfs/ref-verify.c +++ b/fs/btrfs/ref-verify.c @@ -495,14 +495,15 @@ static int process_extent_item(struct btrfs_fs_info *fs_info, } static int process_leaf(struct btrfs_root *root, - struct btrfs_path *path, u64 *bytenr, u64 *num_bytes) + struct btrfs_path *path, u64 *bytenr, u64 *num_bytes, + int *tree_block_level) { struct btrfs_fs_info *fs_info = root->fs_info; struct extent_buffer *leaf = path->nodes[0]; struct btrfs_extent_data_ref *dref; struct btrfs_shared_data_ref *sref; u32 count; - int i = 0, tree_block_level = 0, ret = 0; + int i = 0, ret = 0; struct btrfs_key key; int nritems = btrfs_header_nritems(leaf); @@ -515,15 +516,15 @@ static int process_leaf(struct btrfs_root *root, case BTRFS_METADATA_ITEM_KEY: *bytenr = key.objectid; ret = process_extent_item(fs_info, path, &key, i, - &tree_block_level); + tree_block_level); break; case BTRFS_TREE_BLOCK_REF_KEY: ret = add_tree_block(fs_info, key.offset, 0, - key.objectid, tree_block_level); + key.objectid, *tree_block_level); break; case BTRFS_SHARED_BLOCK_REF_KEY: ret = add_tree_block(fs_info, 0, key.offset, - key.objectid, tree_block_level); + key.objectid, *tree_block_level); break; case BTRFS_EXTENT_DATA_REF_KEY: dref = btrfs_item_ptr(leaf, i, @@ -549,7 +550,8 @@ static int process_leaf(struct btrfs_root *root, /* Walk down to the leaf from the given level */ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, - int level, u64 *bytenr, u64 *num_bytes) + int level, u64 *bytenr, u64 *num_bytes, + int *tree_block_level) { struct extent_buffer *eb; int ret = 0; @@ -565,7 +567,8 @@ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, path->slots[level-1] = 0; path->locks[level-1] = BTRFS_READ_LOCK; } else { - ret = process_leaf(root, path, bytenr, num_bytes); + ret = process_leaf(root, path, bytenr, num_bytes, + tree_block_level); if (ret) break; } @@ -974,6 +977,7 @@ int btrfs_build_ref_tree(struct btrfs_fs_info *fs_info) { struct btrfs_path *path; struct extent_buffer *eb; + int tree_block_level = 0; u64 bytenr = 0, num_bytes = 0; int ret, level; @@ -998,7 +1002,7 @@ int btrfs_build_ref_tree(struct btrfs_fs_info *fs_info) * different leaf from the original extent item. */ ret = walk_down_tree(fs_info->extent_root, path, level, - &bytenr, &num_bytes); + &bytenr, &num_bytes, &tree_block_level); if (ret) break; ret = walk_up_tree(path, &level); From patchwork Thu Dec 3 18:22:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949277 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4D26C19437 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6533F2085B for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389303AbgLCSYh (ORCPT ); Thu, 3 Dec 2020 13:24:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388028AbgLCSYg (ORCPT ); Thu, 3 Dec 2020 13:24:36 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E13EC08E85F for ; Thu, 3 Dec 2020 10:23:18 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id v11so2028036qtq.12 for ; Thu, 03 Dec 2020 10:23:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=DMvNnOrRtu4yLJxhDVPBS7UDJWnYlz36sTOfG9aJkV8=; b=N4huRTxttzYL5voQ7SxS0dxMWFqXMJMAPON28fEEf7iPpAV2c0QJmTuuum1XJ/4/P1 n7XLIQWmoZByw36cCqZrg7bLKf3D7m5B+6zlgXIlx34bZ4A50FGEpD0g+uR1UkXgidfX Xh2vQZvxZ5to8nqnD8OWIQ+AUps6Txd5rl/1bRJrs+XVtzGQrRBsyhkHbiw30a/noOtC J4r6rV9IdpKT1XqO5aIghGNZPkF25Y5BfK7tZc3kOjdcP1a/eG2k4AWjSyBOh69Hd6im yIyv/wB/N609A/XivjogShtkUbsnU2vsTLFWQySutZumUKWrbFh2XcfFeXhh078uC9AP HxwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DMvNnOrRtu4yLJxhDVPBS7UDJWnYlz36sTOfG9aJkV8=; b=tMN05gM83CFFc0kFv0kIPAZwpzEgwF6GPbf2JqoX3CCB2Toy9qd9ydmHrxXqGzLGQE 9ZN2ULQ6ldfLUGbv8RpRRkqo/REkPF/EpATW+IXDcME0SIZ19NbLx8dz0MmqSO4l25Rv CVKwdGS4YGMSlHAiL64m3jbJzhRW7A7T9P/GpNXeHSY9FvLJ4uII87jny0nAEAhSGbPc tE4je6chr1xBbZ9V+v+HfYlC6enJJAeg2aAaxzbpf9XT571RbwUsGZaqybvRGRxVbues 8pxWnJG9PwBp8baUocgxyeTx+waZ2ypho0Mg9vi2+bOahjO5FXDOqhiFAM7/S0AbUnuC VRXg== X-Gm-Message-State: AOAM531CxuVBHNaJ7JrAv9jN2XM1W2orOX6+UhnqKP7A18YP9oaHuGGj bkhOlNiMyk8CKZWrvjMcb2XduFofc4NwOO8N X-Google-Smtp-Source: ABdhPJxpUBs0ev/bC+N+RUNcNQZ+T9STbHQRZM75jxUDuX0VSEtUSDFYNI6q7HYJY9r8agAxgU5zBw== X-Received: by 2002:ac8:5c0e:: with SMTP id i14mr4436193qti.328.1607019796757; Thu, 03 Dec 2020 10:23:16 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 199sm2159551qkm.62.2020.12.03.10.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:16 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 09/53] btrfs: make sure owner is set in ref-verify Date: Thu, 3 Dec 2020 13:22:15 -0500 Message-Id: <46f35e067b444528e4c1f3ffb511ce69937dd150.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I noticed that shared ref entries in ref-verify didn't have the proper owner set, which caused me to think there was something seriously wrong. However the problem is if we have a parent we simply weren't filling out the owner part of the reference, even though we have it. Fix this by making sure we set all the proper fields when we modify a reference, this way we'll have the proper owner if a problem happens and we don't waste time thinking we're updating the wrong level. Signed-off-by: Josef Bacik --- fs/btrfs/ref-verify.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c index 409b02566b25..2b490becbe67 100644 --- a/fs/btrfs/ref-verify.c +++ b/fs/btrfs/ref-verify.c @@ -669,18 +669,18 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info, u64 bytenr = generic_ref->bytenr; u64 num_bytes = generic_ref->len; u64 parent = generic_ref->parent; - u64 ref_root; - u64 owner; - u64 offset; + u64 ref_root = 0; + u64 owner = 0; + u64 offset = 0; if (!btrfs_test_opt(fs_info, REF_VERIFY)) return 0; if (generic_ref->type == BTRFS_REF_METADATA) { - ref_root = generic_ref->tree_ref.root; + if (!parent) + ref_root = generic_ref->tree_ref.root; owner = generic_ref->tree_ref.level; - offset = 0; - } else { + } else if (!parent) { ref_root = generic_ref->data_ref.ref_root; owner = generic_ref->data_ref.ino; offset = generic_ref->data_ref.offset; @@ -696,13 +696,10 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info, goto out; } - if (parent) { - ref->parent = parent; - } else { - ref->root_objectid = ref_root; - ref->owner = owner; - ref->offset = offset; - } + ref->parent = parent; + ref->owner = owner; + ref->root_objectid = ref_root; + ref->offset = offset; ref->num_refs = (action == BTRFS_DROP_DELAYED_REF) ? -1 : 1; memcpy(&ra->ref, ref, sizeof(struct ref_entry)); From patchwork Thu Dec 3 18:22:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949283 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C8DFC1B087 for ; Thu, 3 Dec 2020 18:24:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C0CEF2085B for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389327AbgLCSYi (ORCPT ); Thu, 3 Dec 2020 13:24:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389281AbgLCSYg (ORCPT ); Thu, 3 Dec 2020 13:24:36 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7FAAC08E860 for ; Thu, 3 Dec 2020 10:23:19 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id u4so3000644qkk.10 for ; Thu, 03 Dec 2020 10:23:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Pg4Rs440j7qytVG8dQXueQyKh7OJmkNUbqs81SrLs48=; b=L6SBdEBzTrNveSsHOXSqxaK5/QzdkAiZhuZYubks6wdC78QVp5JcPECfIyKA3t7A36 bq57KP+4W++pOCp0uQxMWt9oDTcrnmj7ySuwqEi3BWCkkWuhGz5etVWMx7itIpfDKZli 7yNuU6Kon2HjfQJkDcQg80Gw6amuOYOKNN+4kxP93E20VcrYmJxd9v5KDI1Shl20R+fT 2ojFO8dbN0KZLnHKIFU+YNZYd6VBlit+k99MQQ5OQ3BmIdiyHanGtPZBZlremdCZFyLH VqCZNxruvRX7l3DD1D07u+609HTl74R14zmJrciDcDEQKt96iUNm7cKWBCGzCiD+B7u8 xr5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Pg4Rs440j7qytVG8dQXueQyKh7OJmkNUbqs81SrLs48=; b=bdJzsrugPw83d/wqnxYK7OPfF1M8Q6QcfwOyON2BQs5Mn0e2yeX75/i62MYbDdznZw RAY8x/8F1pDjUvZSfAwk3OMxE1oRq2BW8DAoiG/dZQEjwMT0oZAzur8Hgg3mO8ipKFq6 OMGpqDXNObH87Df1jbEQCaZAW6V8K8iTJrB8fL4hLX38uEoD6u7RGgpePNaW9isfB+f7 GrWU71hDGdrjZRMTmJTa+qrXcqfbXmlBVSHizoXHtqKquPQm8fqCiDedPKRoUdUI51Ms xCUvaj3WF8cabuyksI/l6t/cGv/Hg6XcI+fa4kXJ/42TugC0CRXHXO70vOkHmtgxAsOf IkvQ== X-Gm-Message-State: AOAM531/DEhS5r1G/qRkxIdQTQtYaDopcqp2nkw85pvxuHUc4onGhyG9 X35OTWzFnE3Z7wXBR7oM+AjuyityouUnqIbx X-Google-Smtp-Source: ABdhPJzFaeRerk+4Kig7ACsXpIlV3GTOkgzPUm+mNqfsVO7e8+GX+TmxBk4xAsVHgsTt4p69/tgMQQ== X-Received: by 2002:a05:620a:4e5:: with SMTP id b5mr4157254qkh.255.1607019798714; Thu, 03 Dec 2020 10:23:18 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id j21sm1871512qtp.10.2020.12.03.10.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:18 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 10/53] btrfs: don't clear ret in btrfs_start_dirty_block_groups Date: Thu, 3 Dec 2020 13:22:16 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we fail to update a block group item in the loop we'll break, however we'll do btrfs_run_delayed_refs and lose our error value in ret, and thus not clean up properly. Fix this by only running the delayed refs if there was no failure. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 52f2198d44c9..0886e81e5540 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2669,7 +2669,8 @@ int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans) * Go through delayed refs for all the stuff we've just kicked off * and then loop back (just once) */ - ret = btrfs_run_delayed_refs(trans, 0); + if (!ret) + ret = btrfs_run_delayed_refs(trans, 0); if (!ret && loops == 0) { loops++; spin_lock(&cur_trans->dirty_bgs_lock); From patchwork Thu Dec 3 18:22:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949273 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 29647C0018C for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D971C2085B for ; Thu, 3 Dec 2020 18:24:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387967AbgLCSYb (ORCPT ); Thu, 3 Dec 2020 13:24:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728120AbgLCSYb (ORCPT ); Thu, 3 Dec 2020 13:24:31 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93E1CC08E861 for ; Thu, 3 Dec 2020 10:23:21 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id z3so2040619qtw.9 for ; Thu, 03 Dec 2020 10:23:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=k1hxcsJJMk0pDGd/bRGloTbtUHmPw3bnputB8RyBCEY=; b=kOh5ya8vHdJpMJOrJ3HCpEmhF064utkPXo/V1Wi9lWSCspMEDWWqvLghvsyaerclt+ PxR1F1VArM0gVKMkkushzZTM/cPV7bYYeSgwKFwHJBBNAaHrHC1grt3j26IWae6bn8i2 6shni9QacACIBvycZuDs2Eh4tlsy84Oe2u4CPzK8lpKYpmLWcW9a+LOCI2iJJLhpKHpc Bwvxx5llQBGP83ISF9mlx6+Cg086NO0cs7h9KAgA8e/ic4xkN3WjTy9veSknWYMQkwFb M7tACzmcOok6qfnYbleEBSePFvoVOyvY2lz9DUpMGzEDqLWbu9cdD8KCM2AYdEr4z52t d1ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=k1hxcsJJMk0pDGd/bRGloTbtUHmPw3bnputB8RyBCEY=; b=NZEV1Ifuw6yeX7zC6/u+dlAF5JSmQ5sXkoXCDlvwmMglg28spSOXlVCuwcaHmqN3zm vY3sQl3rMOADbNGxqtkwqGSuPNEJVzQbVl+3sWl1FKfComS/X99qza0lku1qGi+XTYSS rbzrdYw3/lsez2pLpdhkQylsy2YljDFtmSzDb1XmB4qa1XrhSLtKYEPUDRQMGqqpslef EBCb+6K0gXB/h9s36blO+2v+Q9WBpT+0c/EZDArkrQEXGi8+5PVGnm7Y+6EpE2+8nAIN rTV5EJXt/HnboaHC7KZN60Qf/qzpb1UDGLIFIMtLEBLNwlQVCSfQOVnX/VRCzVq4Htrw 759g== X-Gm-Message-State: AOAM530zGCIfkhpy4377Cern3hM39wNIlMioCHZ+nT6D39/XJPCjWPD9 Zq/Ta2VlU2ryidYO5klXcNjVQSov3tzXGNaC X-Google-Smtp-Source: ABdhPJyKpQscEC7PLXTaR31UflR6CxpRI5PDfj/izD6UUheC6XP/T9tbk52VQ5AnJ8MQNTLHqa4HOA== X-Received: by 2002:ac8:5a04:: with SMTP id n4mr4689843qta.21.1607019800401; Thu, 03 Dec 2020 10:23:20 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id i84sm1962571qke.33.2020.12.03.10.23.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:19 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 11/53] btrfs: convert some BUG_ON()'s to ASSERT()'s in do_relocation Date: Thu, 3 Dec 2020 13:22:17 -0500 Message-Id: <75c7203dee9bda02d57b197d78689fdbb2598f23.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org A few of these are checking for correctness, and won't be triggered by corrupted file systems, so convert them to ASSERT() instead of BUG_ON() and add a comment explaining their existence. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index ce935139d87b..d0ce771a2a8d 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2183,7 +2183,11 @@ static int do_relocation(struct btrfs_trans_handle *trans, int slot; int ret = 0; - BUG_ON(lowest && node->eb); + /* + * If we are lowest then this is the first time we're processing this + * block, and thus shouldn't have an eb associated with it yet. + */ + ASSERT(!lowest || !node->eb); path->lowest_level = node->level + 1; rc->backref_cache.path[node->level] = node; @@ -2268,7 +2272,11 @@ static int do_relocation(struct btrfs_trans_handle *trans, free_extent_buffer(eb); if (ret < 0) goto next; - BUG_ON(node->eb != eb); + /* + * We've just cow'ed this block, it should have updated + * the correct backref node entry. + */ + ASSERT(node->eb == eb); } else { btrfs_set_node_blockptr(upper->eb, slot, node->eb->start); @@ -2304,7 +2312,12 @@ static int do_relocation(struct btrfs_trans_handle *trans, } path->lowest_level = 0; - BUG_ON(ret == -ENOSPC); + + /* + * We should have allocated all of our space in the block rsv and thus + * shouldn't ENOSPC. + */ + ASSERT(ret != -ENOSPC); return ret; } From patchwork Thu Dec 3 18:22:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949281 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4CA1CC193FE for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 11CB6208BA for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388511AbgLCSYe (ORCPT ); Thu, 3 Dec 2020 13:24:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388028AbgLCSYd (ORCPT ); Thu, 3 Dec 2020 13:24:33 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93012C08E862 for ; Thu, 3 Dec 2020 10:23:23 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id r6so2066106qtm.3 for ; Thu, 03 Dec 2020 10:23:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vx6FQGPAtVmSplymEMoDA9sA2iSVI0CL70LRafsPBms=; b=RJIVeATXaJuz1161UtnuwLlJYTbms7FzkVSyNUy2h4JKN+INTkXJ9/pqfLdWoYNC36 vWvU3mKEnX+OzINMhwPbT4cJZanBVRyu+oQ8/Zdl99+ArXqrNt8XfeH84rEJnqdLsiCI dIy/+SlWe5mSMjnON2Lkhbe0Kcr5zgrIU9TsdnetzNQx5p6GQ9lvhMVYG7oL3YoJSdOB SAdN6f6cWaKPktmwOSSe3XyiX9zW/qbcIxIxUUpPkJTZUQuL46zJ5aODa3zY1ZOliXLz cJ3nWPQqVJc0e1n6Fy2Yj1Psnf3f1ejjsWorqnBS7d/JT8C5IhF/yFRSV4c8aLdiaWQU ZGxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vx6FQGPAtVmSplymEMoDA9sA2iSVI0CL70LRafsPBms=; b=dBsLlgBy9KHJTMirRJbAjeRe7NvvaKMNGYuZm4V+I/9bZroBTGEM2ugAY9lgaoiuwM mZ+m94Rx+UXP1sBumdZXelAFuOUwE6tUnpKSdBQcELX+OMeiWnfkz8DfWPzs0CTAgI9n jOOKrm94/g01uCr47LsSjGN83LgJWgi0Hq5m76WxnDdgNCthXokmS6KGLvjCY6Rmu/r4 caSgJCZTCZWwFaRnRH8PmBExTRdUhNdTuxUO/te2g9b93HmUsPcq5o4Bm+TfyrrfiBpo +0QWeVzuUmxTLkpoUxlgCaZWoGteByiCXb8DWdEsnVscBtJfqk2aY6+6fk/tH3Llgk/U mzRw== X-Gm-Message-State: AOAM530dlwwFQt3Y6+QgzHKPCp43xnWSzP/nqS8eU5wMjG3zW5N8+1U9 4ctaJwiUDyu/TMs/hgCVKkNHGkmzvWjmt2ok X-Google-Smtp-Source: ABdhPJysD9FibAcmsPz+wKGgyJCOU/vBXubGfhcDUk98jhclG6Yvyeo0roF93ap/gCU/0kRsiYFEwg== X-Received: by 2002:ac8:4a92:: with SMTP id l18mr4595166qtq.212.1607019802511; Thu, 03 Dec 2020 10:23:22 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id e10sm1977783qkn.126.2020.12.03.10.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:21 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 12/53] btrfs: convert BUG_ON()'s in relocate_tree_block Date: Thu, 3 Dec 2020 13:22:18 -0500 Message-Id: <9d163d83ab27b126c6940ca48fb0bcc71cdea0ae.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We have a couple of BUG_ON()'s in relocate_tree_block() that can be tripped if we have file system corruption. Convert these to ASSERT()'s so developers still get yelled at when they break the backref code, but error out nicely for users so the whole box doesn't go down. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index d0ce771a2a8d..4333ee329290 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2456,8 +2456,28 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, if (root) { if (test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) { - BUG_ON(node->new_bytenr); - BUG_ON(!list_empty(&node->list)); + /* + * This block was the root block of a root, and this is + * the first time we're processing the block and thus it + * should not have had the ->new_bytenr modified and + * should have not been included on the changed list. + * + * However in the case of corruption we could have + * multiple refs pointing to the same block improperly, + * and thus we would trip over these checks. ASSERT() + * for the developer case, because it could indicate a + * bug in the backref code, however error out for a + * normal user in the case of corruption. + */ + ASSERT(node->new_bytenr == 0); + ASSERT(list_empty(&node->list)); + if (node->new_bytenr || !list_empty(&node->list)) { + btrfs_err(root->fs_info, + "bytenr %llu has improper references to it", + node->bytenr); + ret = -EUCLEAN; + goto out; + } btrfs_record_root_in_trans(trans, root); root = root->reloc_root; node->new_bytenr = root->node->start; From patchwork Thu Dec 3 18:22:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949287 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A072C197BF for ; Thu, 3 Dec 2020 18:24:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F3695208A9 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389338AbgLCSYk (ORCPT ); Thu, 3 Dec 2020 13:24:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389281AbgLCSYj (ORCPT ); Thu, 3 Dec 2020 13:24:39 -0500 Received: from mail-qt1-x843.google.com (mail-qt1-x843.google.com [IPv6:2607:f8b0:4864:20::843]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94233C08E863 for ; Thu, 3 Dec 2020 10:23:25 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id d5so2071892qtn.0 for ; Thu, 03 Dec 2020 10:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mJb3v8YrDM6oIBLA+rQC8rdqGFp2dm7825IM173Exrw=; b=G1WXBzVhRkL/PqolStGFw0ua1W2Re/PdKo7GUjMp/7E76BS0uX1ICQrxOeXPvYslmA 1OgkJkr5frjOL3DBiPKTrd7OFI4OYIcvXEBx1WbqByQ/HdnaLdKvN7PKuB6/qZNvFi1N NWFvUI8t9/Pp2gJKM2/irO0f9ASHJkEuOGrWTTe43TFrv0B3tq03fRcViE9zdyQS+C+X FIK9BTl3QET7Sjfkk0bvPZCfhn8bGIkxqICnkAczIs+sW9cjW5nefNiJaMR7+PZBhbU6 DOBA72pPrhPvMxP7Eo7maDtpQ6FZxBTc0ezzFTWaXxJr2O5qOVP6LLyZgdTSRrdG1EGj t8ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mJb3v8YrDM6oIBLA+rQC8rdqGFp2dm7825IM173Exrw=; b=eypx01ed7udojD/O/KzvykJqFJlfwxZd+JjKHnMbrWMtG4+nr/mpW98lv+KGy4a3bx 66eBCnMCTRZ17AyrLlt0k3EPIgaK7MapJrx3nan25PseF0KsoreNNLyF2ZPhuXck8Psx +yMXJzorC1Hyq4wZEiMgEnKsOFVxCrFCuQqotEz37CpbcZQ68IzmsWgfTrRISOJ1Zuek Z6QUQIhLSSQnsNyMkZTpolgWzddN+LZMq539F239BEkAGFEORt9JyyVKKc6zKzbSJyyD qqUVBP8yh4C2XuBb0WlaSjXGQa06Ny9JxcE1qhYSnRF5AIAhApg9h7/g5hWhf8gQ79r0 S7Dw== X-Gm-Message-State: AOAM533mIiAxZ2f6kOOfB/eR+jfMYhypgDwPCbVtiwGOOrGGYL1GjdgG 5kmDVzLYZWLgGXdxIsMbnj0bMVL42b2Fen8J X-Google-Smtp-Source: ABdhPJzQPy+EnGA9hnp9h3Z9CK7m1ggmr7EiJ8Bz5vrlcPheWO1+5wDe2uR7pRePXWQBvUbIpffZvg== X-Received: by 2002:ac8:1010:: with SMTP id z16mr4433015qti.48.1607019804541; Thu, 03 Dec 2020 10:23:24 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id a6sm1926090qkg.136.2020.12.03.10.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:23 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo , Johannes Thumshirn Subject: [PATCH v4 13/53] btrfs: return an error from btrfs_record_root_in_trans Date: Thu, 3 Dec 2020 13:22:19 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We can create a reloc root when we record the root in the trans, which can fail for all sorts of different reasons. Propagate this error up the chain of callers. Future patches will fix the callers of btrfs_record_root_in_trans() to handle the error. Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index a614f7699ce4..28e7a7464b60 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -400,6 +400,7 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, int force) { struct btrfs_fs_info *fs_info = root->fs_info; + int ret = 0; if ((test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && root->last_trans < trans->transid) || force) { @@ -448,11 +449,11 @@ static int record_root_in_trans(struct btrfs_trans_handle *trans, * lock. smp_wmb() makes sure that all the writes above are * done before we pop in the zero below */ - btrfs_init_reloc_root(trans, root); + ret = btrfs_init_reloc_root(trans, root); smp_mb__before_atomic(); clear_bit(BTRFS_ROOT_IN_TRANS_SETUP, &root->state); } - return 0; + return ret; } From patchwork Thu Dec 3 18:22:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949285 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFEABC19425 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 936F9208A9 for ; Thu, 3 Dec 2020 18:24:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389309AbgLCSYh (ORCPT ); Thu, 3 Dec 2020 13:24:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389218AbgLCSYg (ORCPT ); Thu, 3 Dec 2020 13:24:36 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 467D6C08E864 for ; Thu, 3 Dec 2020 10:23:27 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id b144so2965656qkc.13 for ; Thu, 03 Dec 2020 10:23:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YMJzoHKSSI7RbPlEuFhavW+kdWjtGbNSGbkUS0XuGdY=; b=Yab72AMVo+/9gyMEs9mpcrLeJ2AmstfCviL1II+kFShlU3YRgZ9rL7dDvIaFvilJmy nAtvAmF+bhLXa4e83vRKijlL0nvrcDUr6qnZSE9WffiLwyvmKFkuPuYZj86yS6rYnjdx ZW6grsa09HNFmFs6A+r/BwCuxQtVrI1N96VCcyLsbkQ4oiVUENhDLIqI8N76t/qquGjB 94qjyljZrBwMTvr1uBeSexjy4nGIkYomft4gUDMBHQ6F3c0PkUPtZz9FDRXWIfRhmtZI X8mh0AIwG94sCT8wDeF4IynvqsJwIZCK5lawrEAcuxfqNKKhN9DzU4sCR5aO1Vkn80jw MB6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YMJzoHKSSI7RbPlEuFhavW+kdWjtGbNSGbkUS0XuGdY=; b=XF4Z6ER/mGXFDMl5UIfExXP77YHK9uGFsKfe/O/RIOLQ8QwxYiB0pkRLAwrZbv7tP0 let2fn3mxaiC9JehKhVSQjMdUrb+xVJCp5rQLRpnmp5nDwtf5SsaZUdRUHdWXFu79Aj+ u3zcBqXikYwz1CYlvlfpXj4DhgZeQI0AVjEqVsUwUvqi8wxO4K7TY46HcLCZtYNaC+0L AcenXAFGdcAoehn/di4xBrMfEYLm7Lgjx9+chfd9Im8gCsXvz9v2Ev4h0ChBAtqK20kP +F68JVkCLVhNi6VgbUe5WXq6xDi1D+4OdGleZN6Wf7SNEmyWkq80nqF2I/GDHhDlX9rd QGcw== X-Gm-Message-State: AOAM530xibZqP/s1bIKzRduKUjxUN7MV11Zr25l+Y7qWQ9aQLUzildbh SPkyPY9Xa8et36xbE89oJ1SfsuEjQyODOE0z X-Google-Smtp-Source: ABdhPJw1pURiujLPCFz106LeqVFNA078jeq7Rw8sXSJAhev+500EM+I0w+B2eL5X6INEFrYdma4PbA== X-Received: by 2002:a37:634d:: with SMTP id x74mr4262719qkb.478.1607019806202; Thu, 03 Dec 2020 10:23:26 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id z73sm2199110qkb.112.2020.12.03.10.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:25 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 14/53] btrfs: handle errors from select_reloc_root() Date: Thu, 3 Dec 2020 13:22:20 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Currently select_reloc_root() doesn't return an error, but followup patches will make it possible for it to return an error. We do have proper error recovery in do_relocation however, so handle the possibility of select_reloc_root() having an error properly instead of BUG_ON(!root). I've also adjusted select_reloc_root() to return ERR_PTR(-ENOENT) if we don't find a root, instead of NULL, to make the error case easier to deal with. I've replaced the BUG_ON(!root) with an ASSERT(ret != -ENOENT), as this indicates we messed up the backref walking code, but could indicate corruption so we do not want to have a BUG_ON() here. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 4333ee329290..66515ccc04fe 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2027,7 +2027,7 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, break; } if (!root) - return NULL; + return ERR_PTR(-ENOENT); next = node; /* setup backref node path for btrfs_reloc_cow_block */ @@ -2198,7 +2198,18 @@ static int do_relocation(struct btrfs_trans_handle *trans, upper = edge->node[UPPER]; root = select_reloc_root(trans, rc, upper, edges); - BUG_ON(!root); + if (IS_ERR(root)) { + ret = PTR_ERR(root); + + /* + * This can happen if there's fs corruption, but if we + * have ASSERT()'s on then we're developers and we + * likely made a logic mistake in the backref code, so + * check for this error condition. + */ + ASSERT(ret != -ENOENT); + goto next; + } if (upper->eb && !upper->locked) { if (!lowest) { From patchwork Thu Dec 3 18:22:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949303 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B82B6C19437 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 34A64207D0 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2501992AbgLCSY5 (ORCPT ); Thu, 3 Dec 2020 13:24:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731603AbgLCSY4 (ORCPT ); Thu, 3 Dec 2020 13:24:56 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0DD8C08E9AA for ; Thu, 3 Dec 2020 10:23:28 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id q22so3021988qkq.6 for ; Thu, 03 Dec 2020 10:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=DQmnmJJRzCO1HJNP9kj80ZUMjn3DX6w29lkFoMNs1+c=; b=VDz3rWSllZT/Ocou7PTeiy7n2UcQZdYZSPUx6CfxrNEYHuYp0Jo5+fRCF7z3wnIlTa 7wtwgmRuYWvJZvWKjRmNzeSX77KiEkyNrFbC+F2qZXvmB6NA655nRkxVRlYAcMMAArQC hrg1Gm5+JYEThgXDIRSq+EsmnkHb08Gr3IvumwhuZr3b9Waq/a/aMtIFHc9MZN9v8fqM zCxFMgnXemHWiCRQLnVipkeZVIKGK8QfQG4+Jlk7/k+CrqPpPjDxcdadykrqOgFKI6jv AVNFmoCpn1NHHR+Mm/djgKtLkH41S13VAs/eoNiei6xuHhF/6RCVazDcZkzVxWqkXdpL OytQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DQmnmJJRzCO1HJNP9kj80ZUMjn3DX6w29lkFoMNs1+c=; b=JIKlKWfoedyZfyuvHSiaPNvTYDJNoenEKgpwwZnAIrhu1bwzQG/69lfBe8cJDJvOyr d/lFXPykP0Cz6X3EVVgxHwPr5oMOvueOcwCgtcALVrDYkGBJPoQm/yiUQeFBP5S9hsvG 2ZP/jP/9XFQUhSGQBvMer2wtxxXQd/CNjPi4mY55+WDDkk7gmTECjMwmnQzgK71VberK HTRsXy6P48jla4JCwzH+y4Ko0E6ywdyXOYgDOpcCX73zhYSkwwztnvYxNNFQzpc8NqAc l9+AmkcjpQsUDQuHi86bu6VbFcihsvIfGDQFFCpxmaSOM9dh53sLw/Xq1R4dOWFdjrYT yWkQ== X-Gm-Message-State: AOAM532aAs8s92Aibq0InkXqHWnAB33zmU5D+SE47Og47Lvr+JM814rz nKLyOjAW/AajjCOw3FGZTX50xdCDn82rLOLS X-Google-Smtp-Source: ABdhPJxla79PgrPKvCjPKHTu0GKXqeCe89ZPNyUyFxXyW48Z3AyW5SdPtMd/2d1jvSNba2qRcPGNEQ== X-Received: by 2002:a37:7cd:: with SMTP id 196mr4240048qkh.246.1607019807863; Thu, 03 Dec 2020 10:23:27 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id o22sm2214171qto.96.2020.12.03.10.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:27 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 15/53] btrfs: convert BUG_ON()'s in select_reloc_root() to proper errors Date: Thu, 3 Dec 2020 13:22:21 -0500 Message-Id: <6f12922c8edd64c9df4b09068a1ac15159523d3a.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We have several BUG_ON()'s in select_reloc_root() that can be tripped if you have extent tree corruption. Convert these to ASSERT()'s, because if we hit it during testing it really is bad, or could indicate a problem with the backref walking code. However if users hit these problems it generally indicates corruption, I've hit a few machines in the fleet that trip over these with clearly corrupted extent trees, so be nice and spit out an error message and return an error instead of bringing the whole box down. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/relocation.c | 47 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 66515ccc04fe..05b80b9ab1e1 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1996,8 +1996,33 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, cond_resched(); next = walk_up_backref(next, edges, &index); root = next->root; - BUG_ON(!root); - BUG_ON(!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)); + + /* + * If there is no root, then our references for this block are + * incomplete, as we should be able to walk all the way up to a + * block that is owned by a root. + * + * This path is only for SHAREABLE roots, so if we come upon a + * non-SHAREABLE root then we have backrefs that resolve + * improperly. + * + * Both of these cases indicate file system corruption, or a bug + * in the backref walking code. + */ + if (!root) { + ASSERT(0); + btrfs_err(trans->fs_info, + "bytenr %llu doesn't have a backref path ending in a root", + node->bytenr); + return ERR_PTR(-EUCLEAN); + } + if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) { + ASSERT(0); + btrfs_err(trans->fs_info, +"bytenr %llu has multiple refs with one ending in a non shareable root", + node->bytenr); + return ERR_PTR(-EUCLEAN); + } if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) { record_reloc_root_in_trans(trans, root); @@ -2008,8 +2033,22 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, root = root->reloc_root; if (next->new_bytenr != root->node->start) { - BUG_ON(next->new_bytenr); - BUG_ON(!list_empty(&next->list)); + /* + * We just created the reloc root, so we shouldn't have + * ->new_bytenr set and this shouldn't be in the changed + * list. If it is then we have multiple roots pointing + * at the same bytenr which indicates corruption, or + * we've made a mistake in the backref walking code. + */ + ASSERT(next->new_bytenr == 0); + ASSERT(list_empty(&next->list)); + if (next->new_bytenr || !list_empty(&next->list)) { + btrfs_err(trans->fs_info, +"bytenr %llu possibly has multiple roots pointing at the same bytenr %llu", + node->bytenr, next->bytenr); + return ERR_PTR(-EUCLEAN); + } + next->new_bytenr = root->node->start; btrfs_put_root(next->root); next->root = btrfs_grab_root(root); From patchwork Thu Dec 3 18:22:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949289 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 300A3C4167B for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DA031207D0 for ; Thu, 3 Dec 2020 18:25:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2436605AbgLCSYs (ORCPT ); Thu, 3 Dec 2020 13:24:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2436511AbgLCSYq (ORCPT ); Thu, 3 Dec 2020 13:24:46 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E07ABC08ED7E for ; Thu, 3 Dec 2020 10:23:30 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id x25so3038572qkj.3 for ; Thu, 03 Dec 2020 10:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GZtS+/iNcUGZ7qi8wPR9jUj/YATP0ShgqNn+aX93evM=; b=EoYIvTlsFM55mpmYQeqjWGPLdoJZN1QvpiKRHsFk0lzDjWi02eLCdHU6KAnqY4+Xkd TR8F4SGlVQFlUiiuppllZhGswsHXT0fS65wrD+MW3Jh9aBYWw7Du60t7vPTnjtZEiFEZ PXDpQOL67K9dCyv1rtAdjYgDkxSexWr/2bqkFs6xzsyzZRBbR6vBUjv/kMWrjJavNN5n kihJUz4kIQLTcwKdo8Pik5MBvWX1FoTL6ek0qz6DAMmqSMILAo1ZTYOYcPgtAsbUuYVX vz9dNpG5nu4lF2wsCVM7fPsYB0W+2XlG3cfqmpfuv64ZJwNmpACWk4tmETbjgJyPGkNa g+5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GZtS+/iNcUGZ7qi8wPR9jUj/YATP0ShgqNn+aX93evM=; b=J/D9rHuwq9m0GZwUC0O6HF9NtMMGBFdpDj7YyVgqkSoz4Kqx0rmjqlFJRsqwhAMdJl aNy3A4aWkQvaS/S/LOkO4NiS7gOc8sCAXD2eUdcx3/zXX1O6qjqfwSwu9Q8YUPNlARSR YVGMhcMhjosDLD8v/wt0dfloMJotw89rUySkY/OP1VUkzbldzCpeeoWkMGc2PzK/BrhE gJ68mkjoPIc59FWVaT9CQSNpOM0opA1HhUJLn5L60YHLgRaFJQSMXlHRtCYOai4OqdIM Y03n596fD4ehr0FpWZtljEsOtVs30iwINuSb0HsAB/yS/tzj5tb0oHRLak+1ih1UbCTh 57yw== X-Gm-Message-State: AOAM533NKW7TDMp80AMq3GLmdVGxLjnFnn4gLxhVILScBErp2BCTdH+s ZcWmg8EvXkbS0QNcHcZk12+ylXXAokh1wByO X-Google-Smtp-Source: ABdhPJyEdaw8gZkhMDd/2Zxj2PKSimps3IcAfA3m8RdUe4eeRC03dkqn6qIn4otSYNmFrCLdXW33VQ== X-Received: by 2002:a37:ac8:: with SMTP id 191mr4038603qkk.381.1607019809853; Thu, 03 Dec 2020 10:23:29 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id x21sm2023229qkx.31.2020.12.03.10.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:28 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 16/53] btrfs: check record_root_in_trans related failures in select_reloc_root Date: Thu, 3 Dec 2020 13:22:22 -0500 Message-Id: <216e7d9de97a4d6db2f9de7a09ca1d5d7b8f8b24.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We will record the fs root or the reloc root in the trans in select_reloc_root. These will actually return errors in the following patches, so check their return value here and return it up the stack. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 05b80b9ab1e1..a3ad44605695 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1990,6 +1990,7 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, struct btrfs_backref_node *next; struct btrfs_root *root; int index = 0; + int ret; next = node; while (1) { @@ -2025,11 +2026,15 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, } if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) { - record_reloc_root_in_trans(trans, root); + ret = record_reloc_root_in_trans(trans, root); + if (ret) + return ERR_PTR(ret); break; } - btrfs_record_root_in_trans(trans, root); + ret = btrfs_record_root_in_trans(trans, root); + if (ret) + return ERR_PTR(ret); root = root->reloc_root; if (next->new_bytenr != root->node->start) { From patchwork Thu Dec 3 18:22:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949323 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6CF0C433FE for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B622B208A9 for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731628AbgLCSZJ (ORCPT ); Thu, 3 Dec 2020 13:25:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731615AbgLCSZG (ORCPT ); Thu, 3 Dec 2020 13:25:06 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DBC6C094240 for ; Thu, 3 Dec 2020 10:23:32 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id ek7so1433932qvb.6 for ; Thu, 03 Dec 2020 10:23:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=CYBNnUQukD2ZtIFsYDYk/jkUwQ6GKfqMwWqwi5Rsq7o=; b=EObopIPz9NBddvnrGt7tiDnjoVHBxPv6C/CkS1DFxBgWlMcO3BSvJ+293cJRuxizwK XcIFWp1OMy2RWhdlOE94iX7YJpWkFlUxwhygezm5RejeuQLlIsg1q1ZxEb4qfKHetra1 oBGK4LiAVpfki3xiC/lcbacaHfmCPjdTtVauwBplBkWqZC+TsjRvp+Imsde+pB2Zx3nJ ZfQo8Ap3iCWwd+cOAkyY2lm2WMZMnkvl9SZElOjf/i8u0KWesLmW4W20W25FtBv3L47I /cbzwRVlOL0lgqY1RRC4qurtTiRhYe39BwR8CMSJSIUozRFrNm1KqSPPL+9EWLHk9jWE Y3tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CYBNnUQukD2ZtIFsYDYk/jkUwQ6GKfqMwWqwi5Rsq7o=; b=qHaCVp+YiA2AZ9QRkoFRgOVx2izFGLlPm8+pNaLYu1vwgBwv8pGqoCsaw+3gVfWcqd HJKG15MU3v834K8Zgi8sYmG1Fyy7qZfUV2nNFPwNxVN+yA4MSjq8yYt4QBYrJpQsR9PM TUJTzSPBeUvmerEVD7ZnuqCeWkq1e4DmrTjrs9H1T5+0fHaGmsgYAYjmGv6vBcjbiTyq 90OBrWMGbIe8SVoC8KAu8UOCncjd/ffSrHWrAoOfggv4ciqbOMNdpeekuR50FtjNxzGI q08wkxT2kugXfoHEi78v0A5F1Vzfs8U+tCqDLMHsdW2/xAOftf28PgB8ULfj33fJZKI0 Rx/w== X-Gm-Message-State: AOAM530MJIZkZrue+IQCnz6T9zX8reOCDdYX4FM3YtwjFK/4VY4G43dI mHs5dvpknxEtFlfUtxai/vKheINf6YCmxzSE X-Google-Smtp-Source: ABdhPJznqk6nUq7CuWaJgMdTAZ+FKOma18DXDna0dN6EGM0tAZN1TuYZ4wESjJWEbFX5tf7OV8WmTA== X-Received: by 2002:a0c:e0c9:: with SMTP id x9mr182494qvk.56.1607019811460; Thu, 03 Dec 2020 10:23:31 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id z73sm2199380qkb.112.2020.12.03.10.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:30 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 17/53] btrfs: do proper error handling in record_reloc_root_in_trans Date: Thu, 3 Dec 2020 13:22:23 -0500 Message-Id: <02ccc686cbc2210d1ce995e2066085bfdee68fde.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Generally speaking this shouldn't ever fail, the corresponding fs root for the reloc root will already be in memory, so we won't get -ENOMEM here. However if there is no corresponding root for the reloc root then we could get -ENOMEM when we try to allocate it or we could get -ENOENT when we look it up and see that it doesn't exist. Convert these BUG_ON()'s into ASSERT()'s + proper error handling for the case of corruption. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/relocation.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index a3ad44605695..90a0a8500a83 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1973,8 +1973,27 @@ static int record_reloc_root_in_trans(struct btrfs_trans_handle *trans, return 0; root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, false); - BUG_ON(IS_ERR(root)); - BUG_ON(root->reloc_root != reloc_root); + + /* + * This should succeed, since we can't have a reloc root without having + * already looked up the actual root and created the reloc root for this + * root. + * + * However if there's some sort of corruption where we have a ref to a + * reloc root without a corresponding root this could return -ENOENT. + */ + if (IS_ERR(root)) { + ASSERT(0); + return PTR_ERR(root); + } + if (root->reloc_root != reloc_root) { + ASSERT(0); + btrfs_err(fs_info, + "root %llu has two reloc roots associated with it", + reloc_root->root_key.offset); + btrfs_put_root(root); + return -EUCLEAN; + } ret = btrfs_record_root_in_trans(trans, root); btrfs_put_root(root); From patchwork Thu Dec 3 18:22:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949295 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C174C0007A for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 41A66207D0 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2501979AbgLCSYu (ORCPT ); Thu, 3 Dec 2020 13:24:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2501872AbgLCSYo (ORCPT ); Thu, 3 Dec 2020 13:24:44 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37905C094241 for ; Thu, 3 Dec 2020 10:23:34 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id q22so3022301qkq.6 for ; Thu, 03 Dec 2020 10:23:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A5vSOS93iKVwVV3ZIjr9t6hOh6M/56M/0Y08asFy1x4=; b=px8Q/x2Ac1Fs0XW8KCd4dz9TrICGhWCnBtEUFYuL9xjBGjM8JeDa1AoI0q6nuxlkTG sL1bPfpTTCkZMpJTte314Sq7QuilMKwH6vtAf4ZMI4fA43lG0IxnE1Oyfm9bJwcc+m0A /gTVuGcx7xfBgtMoHNOtTPEYJahDyN5hgAkbb3lNsyV024s2/i3q9OVFHoNd4PPddBGs ioXF9nRUuFl3UOqVuermjIN29OKhQwMdU0uPtfEf0uxSxItkJ1SHBSyfhwzuiIEvC9JO QDxssFwXnihkl/ZtiZjQJxHM4yiOwUI4KXCS+tJbPB2XA3RT13zIQNfn/1CN34Z06jAE HrNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A5vSOS93iKVwVV3ZIjr9t6hOh6M/56M/0Y08asFy1x4=; b=nvFRiF/16O/e6dDJnRY2L0zRWBMR6AmcCiyPO6FUCCjCU1QoOQQtweXzsfJRliD4uE LI+Lv3J5eWkoLH0lWkTvIlkqqncKYZy50oKSMbnAtapC/JyFlDHXM20ZZbbiuC8kml/o VL8WmufKF7KqPE1nkGdoquJZqerXZ5/E36Eo4FVFevbj4n3Y33TdFpWhmTR1Fx4tOVhQ tLZrg0Hr8dDY6cR4tuNA2T3gzVzFmH/E2y6ZF6uG3tza+x3Ae3wYD7iCxKFm2IrUzj9t 6o41OBXcdLFRls6fXCbsGnYWOCCxaY5fIsQK+3MV1HN3PLUnIbfNkcwLyuT03LPwvL2z xo4Q== X-Gm-Message-State: AOAM532ylr5zPQig0lmBoG7Q7pBSsZk4CTOp03SR4JdV5T9a08groXpa V0zer/c/Bjd3uPhC/9Cbuev2GgqVxMarZaZT X-Google-Smtp-Source: ABdhPJwLGqavZFSftVOh2i34ODBRuI7iw64/GpFWkltoabxyYMUJO/0yWsRyIxlw2XOCWH8q4lHOJw== X-Received: by 2002:a05:620a:1531:: with SMTP id n17mr4271581qkk.474.1607019813201; Thu, 03 Dec 2020 10:23:33 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id e19sm1985175qtp.83.2020.12.03.10.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:32 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 18/53] btrfs: handle btrfs_record_root_in_trans failure in btrfs_rename_exchange Date: Thu, 3 Dec 2020 13:22:24 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in btrfs_rename_exchange. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 0ce42d52d53e..d34cba37a08f 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8878,8 +8878,11 @@ static int btrfs_rename_exchange(struct inode *old_dir, goto out_notrans; } - if (dest != root) - btrfs_record_root_in_trans(trans, dest); + if (dest != root) { + ret = btrfs_record_root_in_trans(trans, dest); + if (ret) + goto out_fail; + } /* * We need to find a free sequence number both in the source and From patchwork Thu Dec 3 18:22:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949309 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8F3BAC2BB40 for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 46FEC207D0 for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502014AbgLCSZL (ORCPT ); Thu, 3 Dec 2020 13:25:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731615AbgLCSZJ (ORCPT ); Thu, 3 Dec 2020 13:25:09 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 760FCC094242 for ; Thu, 3 Dec 2020 10:23:36 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id k4so2038087qtj.10 for ; Thu, 03 Dec 2020 10:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=alicy9h9SDs6lc9wx8Vi/NzCeV4MDRigSf43yxYRDKg=; b=ARwyqd8p66kcBOBVbA9U+8WEPbLZBMdRb7rzKIGWmHeExoV0fK8HSBpWuR+MJ1fSO4 33gDolnqmJraPj9dx91HbyFivtv0WajQUsKRO8O4DGtvJeY3BYOTv1esYpNeIkYgDSYV IUCT8Ngb6XdjoO3tziqPIpNPOztZoQO+dgxTgNYRkq7MzfyX77R+bGDQoynjfMMC00MM oWcFDdx3KX+FDywVc/dGFnGL46tUNdlKo52xMdNKh1qrPvZ1XczWtvb1W2TGIOMBGKeX X0eWcNfBlcZdI8vQm5PospWN7OpWM1wB7oEb2RsbGOVDi66hVNVdYZUBecPipwSTqMOo uk4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=alicy9h9SDs6lc9wx8Vi/NzCeV4MDRigSf43yxYRDKg=; b=gG/5Uuj9pXeGQiW6XorUvjM7yjeEhN977lgdHQWl+pmsWfV0YDyjBaJnIhbjEPYh8n niZdqGxHg6hhD0pXDEuxiN0ZPOgMGmGmo398i709FUtPdw20Mz+RkpI5PFMNMiymQKF3 a/hmmJKykNQB7m2iVdkEDgfPzjKlXE/CVP2IljHEcUwyRv7nVmtK7dAqPCAhrgBy/ugQ 9UdQdXM01IbOsp0NLhDqYsibyrwqMibNZ9c85K1+PZEYKLMmLBoV/4IxDj2o0fKT9us+ znGsG6Bj3q0NMc8Ij18DvNm7tUrRwxmHYKLLMirChcozicJq0pXRYYs3X7WgbQva3jQN VlzA== X-Gm-Message-State: AOAM532CgRSoJ+6AIvzaF6zJlMEPJfGfdRMzxYjg8qUsoy8IIId2PeNN zFddnRfbcTdqq1Dt8vxfHOHzUgRoLvCnuaMH X-Google-Smtp-Source: ABdhPJy6z2WVLLnwzHUqghuh0jbJ6bW6JW5iqjFDQl/ODvkTf0cXFaGvvEPHpfWF7atZKzYms9sgQQ== X-Received: by 2002:ac8:4405:: with SMTP id j5mr4471957qtn.47.1607019814926; Thu, 03 Dec 2020 10:23:34 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y189sm2367836qka.30.2020.12.03.10.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:34 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 19/53] btrfs: handle btrfs_record_root_in_trans failure in btrfs_rename Date: Thu, 3 Dec 2020 13:22:25 -0500 Message-Id: <7808aa3b4846c26363dab6127195d813954f7a78.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in btrfs_rename. Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index d34cba37a08f..40601a0ff4f2 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -9186,8 +9186,11 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, goto out_notrans; } - if (dest != root) - btrfs_record_root_in_trans(trans, dest); + if (dest != root) { + ret = btrfs_record_root_in_trans(trans, dest); + if (ret) + goto out_fail; + } ret = btrfs_set_inode_index(BTRFS_I(new_dir), &index); if (ret) From patchwork Thu Dec 3 18:22:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949293 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07A70C4361B for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ABF4120C56 for ; Thu, 3 Dec 2020 18:25:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2501964AbgLCSYr (ORCPT ); Thu, 3 Dec 2020 13:24:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2436500AbgLCSYq (ORCPT ); Thu, 3 Dec 2020 13:24:46 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6200C094243 for ; Thu, 3 Dec 2020 10:23:37 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id q7so1417817qvt.12 for ; Thu, 03 Dec 2020 10:23:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eVw+4yG4AsOpvC9Z2rvn/D+LlOaO6eS1UP7OemY6wRk=; b=yYZY/lWxclMR2FAxCJe85WWU5Tblh1ruloCqIw7ig+crEbIaOu6G/pwmLdelCq5n7D 656Kv/wTfxG+WackEpnBOAi37wqffpeu1WK2dflwvzvuRuvFyOftJ3lzTBa8OWrHDOis iKkH82h/bOV0tSxQXODZTKeIDS1c8Gnkt6N8XK6WsBaFgDIaeT3Y1NwdGrV1NY2/oKf7 a+OasfK50obyKsOx/3flSDX2K0mZH9B+kxXLXDsGgANCApm8fUff3JIa2H5ahveetv1+ 1SfRCn6N+9Fn2dSoejMuhEwFqQc0/eUq78NPH8ut6n9iLsjPlndfUjSyycG28djbU0gO BDUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eVw+4yG4AsOpvC9Z2rvn/D+LlOaO6eS1UP7OemY6wRk=; b=Jfb4dQZEo7Tv+IR/FCqDI6V9U3Qd5WV4SAqDo/vs1KUdsnsny2FP8PSkarJmDP/K3H Zy8k46EHtqxpziFE1iTZPzUHKI0Asup+4MFlXewoS4F5X6MPuAw+yLDR6By9Cxf8Gh3v 4woR8/Fp60WJ0A9HpAr6PHmXtFaTJE9AcaP20qYd4GT1w01/wUjDmh5V9NmO/j3v2zB+ jJX7gZNSw0vb8ll+4/5/IwftDlyc0f/1YMwlBubLLZ7TVWVlkyilaw3u6KFDbIpemjT/ rA36CIsfspHtxVlla/jdFCwSIVfRFQlCo0upNSgKUMBcMCwHAuHcHcoGU1+s5utroP3J DpJQ== X-Gm-Message-State: AOAM5331Revp6Gau5zozMBwLXvn2yFiprWeNlEdVNheY+LkCuczatGga EHVz2PJxDELbBToEhK8FeIVGcrStzznl6Gla X-Google-Smtp-Source: ABdhPJyzEx2XWx+360iwucdRR7T5CA8okIxBspvdbHwkR3fXpjTVFLfSDt4a1+j6smug8i9lccCOfQ== X-Received: by 2002:a0c:f7cc:: with SMTP id f12mr371731qvo.0.1607019816719; Thu, 03 Dec 2020 10:23:36 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 100sm1936388qta.20.2020.12.03.10.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:36 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 20/53] btrfs: handle btrfs_record_root_in_trans failure in btrfs_delete_subvolume Date: Thu, 3 Dec 2020 13:22:26 -0500 Message-Id: <584edc07c62a703689486c2a4b1bdbd6f359de64.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in btrfs_delete_subvolume. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/inode.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 40601a0ff4f2..1f9fa63ef194 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4157,7 +4157,11 @@ int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry) goto out_end_trans; } - btrfs_record_root_in_trans(trans, dest); + ret = btrfs_record_root_in_trans(trans, dest); + if (ret) { + btrfs_abort_transaction(trans, ret); + goto out_end_trans; + } memset(&dest->root_item.drop_progress, 0, sizeof(dest->root_item.drop_progress)); From patchwork Thu Dec 3 18:22:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949317 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 877C2C2BBCF for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5082D2085B for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502036AbgLCSZP (ORCPT ); Thu, 3 Dec 2020 13:25:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502018AbgLCSZM (ORCPT ); Thu, 3 Dec 2020 13:25:12 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 74F18C09424A for ; Thu, 3 Dec 2020 10:23:39 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id y18so2982483qki.11 for ; Thu, 03 Dec 2020 10:23:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UP22N1wW4BouddiNGmO6P25lyeEkJRg0GBlKgir49N8=; b=odlvaZc2WWNgLaTvU2kNVTM5TN8roRIPmox3t0yOsCrwgSDgFriDINZJd67eAZ0DjM DMs6ZQw/M/V4gAYqJSFsiuxWfBbAvprAfEPCLfw7i9iJmpwsMH7Gs6TvUTCL6Bha1NH8 jEsPORefw0GHPO3Xf0GNLCXbVPAhJCUaJEY6rpdBw1ooTISAS1hUEYoKBGtPVa6RfSB7 /qHzsFKRkUS3mBjzr7csK8w5FA6YU6xElcfDWsqGKgJKgx8C6/cZrafTMv9pQ9cUh9Jp 5SFeOLcHJAZDQYSdY3YMWhq5/7xI7aO3upZhFU9NvC84kR1XqLHFfgeeYZxfn4NPU/Hk NI3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UP22N1wW4BouddiNGmO6P25lyeEkJRg0GBlKgir49N8=; b=srd/i8TJweNpCKIivviXiUZNAbl4UHYl7xahbE4p3Lfwse2Emdi9+Dvzpd+jp0bL3B iEPJPwddxFswRisfZky0Q4PfOh+DBfhKWwkUwPKb21V9Og013dj7A2kx2KdBbkdYudkc 7CLw2FyrmR04Lnep3gq0ls0BIrJWy/ELYNUNEH5Z96NYMAkViEcJ4SkgGYbFlewbTCtT /u3L/A7Bbpsden3F7B4IYXO72vDI/bmpIazGIZXC30HyixSf/27AsKJ2GBiq793MkcKJ f/xGjhX0IpY1DXzFfqkNgFH1RNzvxVgSvpx8kRknaddYDOmCs8uFDXQEelBQ/tiB1l60 Cdgw== X-Gm-Message-State: AOAM531Pk83O5r74++xpEiRncXPTAykkfmHmN1Anausg4yAnaYY6YkoH invgu+ZhsVOtb0mz0W0+iW3RiURrCS+p+Mmb X-Google-Smtp-Source: ABdhPJx7rNj0VVkymn1tEUxwShgIyYO8rMZq2SK85cPxxvwTU+0dQRFZlqC5MIVHoHORQnmCmuNzSw== X-Received: by 2002:ae9:f507:: with SMTP id o7mr4129152qkg.420.1607019818401; Thu, 03 Dec 2020 10:23:38 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y3sm2237081qkl.110.2020.12.03.10.23.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:37 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 21/53] btrfs: handle btrfs_record_root_in_trans failure in btrfs_recover_log_trees Date: Thu, 3 Dec 2020 13:22:27 -0500 Message-Id: <587afabcc7e1faf4c860917eeddfebc2b0bf81e0.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in btrfs_recover_log_trees. This appears tricky, however we have a reference count on the destination root, so if this fails we need to continue on in the loop to make sure the properly cleanup is done. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/tree-log.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 254c2ee43aae..77adeb3c988d 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -6286,8 +6286,12 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) } wc.replay_dest->log_root = log; - btrfs_record_root_in_trans(trans, wc.replay_dest); - ret = walk_log_tree(trans, log, &wc); + ret = btrfs_record_root_in_trans(trans, wc.replay_dest); + if (ret) + btrfs_handle_fs_error(fs_info, ret, + "Couldn't record the root in the transaction."); + else + ret = walk_log_tree(trans, log, &wc); if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) { ret = fixup_inode_link_counts(trans, wc.replay_dest, From patchwork Thu Dec 3 18:22:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949291 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44085C0018C for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1207B208A9 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2436707AbgLCSYs (ORCPT ); Thu, 3 Dec 2020 13:24:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2436551AbgLCSYq (ORCPT ); Thu, 3 Dec 2020 13:24:46 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11C7BC09424B for ; Thu, 3 Dec 2020 10:23:41 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id h20so3026792qkk.4 for ; Thu, 03 Dec 2020 10:23:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=OZ5WmzNLf5+KfavbqzHhLM8WSJX3ryg1x+vWlPdM3x4=; b=S6txz0Tn0/7Djo+cKBi6zJoUwBG2L93Sh76s5yd+p4gRGpGMo1pe13VmM+ljqB2Xax yWytZGT+XZMNsf0y0e4HHG/GjbXsIdfoYHjz62s6m62qE0D7+93rafhcd7329ZSWHknu M3O6aErEO1d9qaaEXlXPuc0H/cdJA4IBth35KaXWi/+fzIWkK8OB9bJ9pCQJR1zaz/m6 TKl8zVl7INQBAd3hJKcIkRNu998CIU6shS/jHmQ7WbOL1oa1RerL1JWr+6Gd5G82j3wg 3zM760glj5vmpLus3bILpzNhq3RHcdkoi+w1/UsswO0mfig/fRUVPrfC8yKQwqAgryY1 tuVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OZ5WmzNLf5+KfavbqzHhLM8WSJX3ryg1x+vWlPdM3x4=; b=DAgJNYbJKJai4+BPVabNrnFxxE2Qp9gHm5FWk3WlJ7XMjAcmUz6Ryc8nWWks8X9tT4 bl+HDz2r4AmCMy2YYgCrXzJ8Gzx5EppdcHrhb/DviEXZqhcBQmLi9y33LNAc3vorhCvH HvxP//vRQSG1fjpmstAOcJSQBzS7SkZvQkv6GNd5E46L0z0oJ7IZPXt8MZjPlQ2Om4gS 9X4f7ZgxCHJQysj4KLe2/JUi9TIQT6peexEn+5BmZiZSPNsAttAT9vL3wP05oFzdB55L sgg+rD7KMOQ5VDhSDDoep9RaS7AXORCqFtvVt9fFPhXR7UPzdx0YNRJB37c9/qAdJkvm x3Ig== X-Gm-Message-State: AOAM531dHZ3+tEDOilmFOj1wyvLwvpLea3/T2z4kvDKhmx7oK81hOl/j 6omGWfXkyBoN+ili1f5pwN/xEZhjzy3eARRI X-Google-Smtp-Source: ABdhPJwcj03qu0EEShr10FHGIY7M0FB6NpfM1Fi9AuNW0+epBfcCUJmndPlAO+GYwKRsThTG2KWa/A== X-Received: by 2002:a05:620a:1387:: with SMTP id k7mr4097024qki.338.1607019820021; Thu, 03 Dec 2020 10:23:40 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id r201sm2069643qka.114.2020.12.03.10.23.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:39 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 22/53] btrfs: handle btrfs_record_root_in_trans failure in create_subvol Date: Thu, 3 Dec 2020 13:22:28 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in create_subvol. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index f240beed4739..6b08fc026846 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -714,7 +714,12 @@ static noinline int create_subvol(struct inode *dir, /* Freeing will be done in btrfs_put_root() of new_root */ anon_dev = 0; - btrfs_record_root_in_trans(trans, new_root); + ret = btrfs_record_root_in_trans(trans, new_root); + if (ret) { + btrfs_put_root(new_root); + btrfs_abort_transaction(trans, ret); + goto fail; + } ret = btrfs_create_subvol_root(trans, new_root, root, new_dirid); if (!ret) { From patchwork Thu Dec 3 18:22:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949315 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 53F97C2BBCA for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 20F13208A9 for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502034AbgLCSZO (ORCPT ); Thu, 3 Dec 2020 13:25:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502022AbgLCSZM (ORCPT ); Thu, 3 Dec 2020 13:25:12 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA821C09424C for ; Thu, 3 Dec 2020 10:23:42 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id y197so3006637qkb.7 for ; Thu, 03 Dec 2020 10:23:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IURlmIE58ARQOAEaOHeShyPcEluY8RP7eeBOsM9Ef/s=; b=YLv91oAPgtWSegN2cBRSBJzwUqLBLq6n4T7Dcl3xfvw5qedD56Fuftko6N40i56fVQ 59wZWzQvPraEaxd1VM8z/tdatylX61LTNwuXnH1rED7GXEYfW+jDWwURWFoc1Q+NEIog H0Nwj3n336WiGhkCQbQOWs+7mdHMvuwp4WAOjDyANolFn4Ep5Radb28UDcldWbn50sPh RWmL10du3thSpY9cYGMkQNngfY9WkCHiHBIQ5yIT+6t7VVCdDMp7DteS4eotz4yJqceB EhMuhqZ7FRdmd1ePNDotqYQjfgY4uwxEgWkVB9xVSSlJTU3B5EA4zDBix3Biu50JFf05 I6iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IURlmIE58ARQOAEaOHeShyPcEluY8RP7eeBOsM9Ef/s=; b=bY1c18VQafeHFWBx21Q2981MVyY36wJrUpwXQw0AE8Iy4DxNoPM7PBNl+7iX9Fs6sg ctcJ8vqxqlFtufbo5rbzWDjoRy3F5icFnr7thJAJSCwobB7AePHUOodL34av9aabRPEA rPFZx5ZTvXMxIHw6ueAEqBbkaDI/DAviTs6IbI1sEMr20AP4uYJCGX1pTbHejjp2bazR ozN8yqwNubZXM72qFnaxKX1UMRwVhAx7L0nc1/i319VVuLvdMnUMQyCLdkP6WiIjpmDI TQA4SHTMkCCFaw/kwC0KjgwIxK2+EMRxDVVhZ1FNrT69QhjJRrGzKs0NI5/cM+epieXg 98mA== X-Gm-Message-State: AOAM532ZEcE2G/YLMGBSY1+UXpB//uCbgYHZBesvAWc8bPF3/G8Jxlg3 fm5J3IySeR+cze8laM/OvoO0Z+DLWcMATsBl X-Google-Smtp-Source: ABdhPJyUveGZcnKSdaNRLJ9/JgIlLM/GZYyLz41TVqVyckIFicqkkfjoh8XAvX5u+F6E4JdXezD89Q== X-Received: by 2002:a05:620a:11a4:: with SMTP id c4mr4263262qkk.8.1607019821625; Thu, 03 Dec 2020 10:23:41 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 67sm2271147qkk.120.2020.12.03.10.23.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:41 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 23/53] btrfs: btrfs: handle btrfs_record_root_in_trans failure in relocate_tree_block Date: Thu, 3 Dec 2020 13:22:29 -0500 Message-Id: <9052fe172f26e1b3e2098c214e87b315df7fe3ee.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in relocate_tree_block. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 90a0a8500a83..4356af112025 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2552,7 +2552,9 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, ret = -EUCLEAN; goto out; } - btrfs_record_root_in_trans(trans, root); + ret = btrfs_record_root_in_trans(trans, root); + if (ret) + goto out; root = root->reloc_root; node->new_bytenr = root->node->start; btrfs_put_root(node->root); From patchwork Thu Dec 3 18:22:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949335 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA18CC18E57 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9F6A8207D0 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731602AbgLCSYz (ORCPT ); Thu, 3 Dec 2020 13:24:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726222AbgLCSYz (ORCPT ); Thu, 3 Dec 2020 13:24:55 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65E09C09424D for ; Thu, 3 Dec 2020 10:23:44 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id ek7so1434287qvb.6 for ; Thu, 03 Dec 2020 10:23:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Mlb9YVtmht+31htgKs19UPJsESfebdEWDybZUIVc2fU=; b=YGpRlX/nLuP5rSJ7fiPEMPA+O48T7pN0sVLdmsvwrkqfwX/k+RPFA+zcJkZcXSOXxY OYWrC3WO6D+e3y1vcm+B+c3/VKhgNrbAOVlgCBYs9ClfkP2HrR7id2OO5WgnAj83mYov 8Af2VnG6J5CLUWGD+DUyDUXP/aOHbjjJm0HhKsRFdg3pqi+cR4C82NayUCTNcQ/y4Jb8 GBHgGt5MQVjfiE21/heBTBypCZeNbAMzuZv4ToKauKPoL8prNoL4THhVh5+SiIze3yeu Ko10MIAF6t3t1dQpY0/CsD1BmKpa7BZKOYkphn9QkZspyMrFM3AWUEjkfP7ymy0c+IrL 835g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Mlb9YVtmht+31htgKs19UPJsESfebdEWDybZUIVc2fU=; b=D/MGVN4g6CUGlzMsAGOtlpMWElCVWghTOwn5iDlxpDSE3FHCqHIWUSKiX1ctOVSe81 S8mwjv2p1g3vGt7OkxonER3MDtA29bli58WYBZ0ksdDWDAcEpiIhYzMDdHZdJQdFTytY v72Bq8iiO9neBsFkieHTpdkukYsarVfBrrtsNfP8+4HFFLZVvszC3AsYs8V/2ZIwJzgO X2qXMerTYI62fUbIRUbzT/VWM2matebIDZhyRZxmqHupi6C+ESNFlabNOo4AzHezzQPp yYyrFWZRIi0pDNGzi87v9YZjQdFQxPKh3zdO3VYzfixF3s78O9S9po4n9dR3YCqBm2nU BLkw== X-Gm-Message-State: AOAM531PSg3uHfzHgLrR9UoLa8inqhml6aNE6XfGmpu+aC8e/cY3vZpu SsdCNPABxwSmVHZXLolB8UcT3rmQLssUD1Sy X-Google-Smtp-Source: ABdhPJwBwlzU57XcFteuRCdN04ta6yR8udvSjsM15brkWwZvVpb6OijcTzcJs0M4KDCXMyqjG3L19Q== X-Received: by 2002:a05:6214:126:: with SMTP id w6mr282001qvs.35.1607019823369; Thu, 03 Dec 2020 10:23:43 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id w192sm2260617qka.68.2020.12.03.10.23.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:42 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 24/53] btrfs: handle btrfs_record_root_in_trans failure in start_transaction Date: Thu, 3 Dec 2020 13:22:30 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_record_root_in_trans will return errors in the future, so handle the error properly in start_transaction. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 28e7a7464b60..c17ab5194f5a 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -734,7 +734,11 @@ start_transaction(struct btrfs_root *root, unsigned int num_items, * Thus it need to be called after current->journal_info initialized, * or we can deadlock. */ - btrfs_record_root_in_trans(h, root); + ret = btrfs_record_root_in_trans(h, root); + if (ret) { + btrfs_end_transaction(h); + return ERR_PTR(ret); + } return h; From patchwork Thu Dec 3 18:22:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949355 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3ABDC3526C for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7FB382085B for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502064AbgLCSZV (ORCPT ); Thu, 3 Dec 2020 13:25:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502057AbgLCSZU (ORCPT ); Thu, 3 Dec 2020 13:25:20 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F070DC061A4E for ; Thu, 3 Dec 2020 10:23:45 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id y11so1417514qvu.10 for ; Thu, 03 Dec 2020 10:23:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ym7/WXb8gAZ2ujvy+FZpJ1LHWlDq8VwatqmJRPcAIv8=; b=iddeWcxeFddSXXR90WINyyeMACo38wHV+T/lXAlTKeJzdubgrJQ5yC1i4C5I3gILiq DJLE7X+q8K3mb2AAftqOiX3UgdMwdyLs5+O5xbfuZSedNSCh4eyJ9ZIExJrbjnfxwpDa W2o4YLUfw6uOeTSQCQJ3Hhp5o4RUzEbtTF20bHuQuI+jtd4CZ+kL45d+RWoKiH/ITI8m W7j4RL82bBu6lnsqTHwDlULKIK8fFB4qT+WWlTaiSolQFtq/rQSMgKDEfFAu4uZdAZgL yPvicaiSkWp3NudzJoH9iZmr4CUOCQ60MNixR7j9FRO6nJzacgtOTYr6FkmcBIQOblZ5 zcVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ym7/WXb8gAZ2ujvy+FZpJ1LHWlDq8VwatqmJRPcAIv8=; b=eJl9+YGndFx6juN4Mk9oGcLV7GvPMQ6GW3FOQw+j7YHM3yicUsb9d6ygnjcy+YpaRR EK5+Kr1dgMncOA7ULmCnHPwMbrq2z3rMmE+jEt50h/S2I1uPQ1AR68el5TLKvqZxwNyx 0l09xNWbjnYqgRTP4w1Gk5tToSD2K9JIRyFt+OtSZj48XGM1hU/GSQ9X7XOP9Z7I2dkg SGGDHYd6ZPIiPnI3l7+KVPVSw0z4g7DFMxaQbEUG7Ol9GZOwDxDyCUa5v/n3KeN1avYX GUMj2NRkIf1rgJUQ5Wp9CQUFlb2S0KmzncVRXg9z5EFpgwIeAj1RlEcAd3vZi5gWETKt 94Ig== X-Gm-Message-State: AOAM531nB6pEtEXTfA+f2kVrMoYK913U4G31N32Eb6UiYX0eeJgthMWd EchIxEdTKGhWty/GVVbOekO5evllbH7pkzoM X-Google-Smtp-Source: ABdhPJwwzHKUK3OahL/b0O6EjXMVRkfEznX8X7T6ktCQuPCYPWxkCFtCYFIPaMkz/ahC6X94dM6UJg== X-Received: by 2002:a05:6214:13c3:: with SMTP id cg3mr194377qvb.42.1607019824946; Thu, 03 Dec 2020 10:23:44 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id e19sm1985823qtp.83.2020.12.03.10.23.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:44 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 25/53] btrfs: handle record_root_in_trans failure in qgroup_account_snapshot Date: Thu, 3 Dec 2020 13:22:31 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org record_root_in_trans can fail currently, so handle this failure properly. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index c17ab5194f5a..db676d99b098 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1436,7 +1436,9 @@ static int qgroup_account_snapshot(struct btrfs_trans_handle *trans, * recorded root will never be updated again, causing an outdated root * item. */ - record_root_in_trans(trans, src, 1); + ret = record_root_in_trans(trans, src, 1); + if (ret) + return ret; /* * We are going to commit transaction, see btrfs_commit_transaction() @@ -1488,7 +1490,7 @@ static int qgroup_account_snapshot(struct btrfs_trans_handle *trans, * insert_dir_item() */ if (!ret) - record_root_in_trans(trans, parent, 1); + ret = record_root_in_trans(trans, parent, 1); return ret; } From patchwork Thu Dec 3 18:22:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949321 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 388ECC197BF for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 058E1208BA for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2501999AbgLCSY5 (ORCPT ); Thu, 3 Dec 2020 13:24:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2501981AbgLCSY4 (ORCPT ); Thu, 3 Dec 2020 13:24:56 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4A63C09424E for ; Thu, 3 Dec 2020 10:23:47 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id y11so1417607qvu.10 for ; Thu, 03 Dec 2020 10:23:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=yQW5HdN7qO3+mPtg3gOgxaceIpJN+421WcNEAltwLCs=; b=fAsqEjhAWXel+zfkGaS/FkkAB28G+FMgsEe64Z3LJAohYMyEHsOB2q7rzZYZPXp2eX TzM4x6bA9MdY7Hy5RcXcvsL63hXR9ZVi7eHej3vALDzB0R3FYOkoV5cI53uLhVo+n6Ly uiCuQpUHprBF+PltJFHxuEKgTgDiNJK9Ed9K3bcwdwEXw0gU/KQ3yu2icFLPa1B+EkZd pPcqQKN1oESVoI52UiV+1P/7myMzt3YpU8MmwxgpmJPhuIJD5UiMBJV6hTLIE1nbK2XJ BRbsEFek8i4E61jVL855qfa4mjehfpjNoy7c1uBlD5c2C/pkmbhmh2D0YyS4WrF7496T eOZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yQW5HdN7qO3+mPtg3gOgxaceIpJN+421WcNEAltwLCs=; b=b4XYkF171Fq4ka6YPb12T5Xk83/upt7Qw+WqHrBYrGVqZygxdzF6gv6sXG64cpIal4 1JefBpVp1BvJevEQusb27BLvhR3fK4jn7bLt5TOYdY9Hiu+BEJD3yxELYacoX5aPlTli 2rkBRpeuC06TEfB7nQAPeM+qPC6+yWuYfjg0N7ptpPsjahkKabcUDOw9VhpQqITg0YT6 Vy2YoMqJ5/EovnTeKCIPdZ473BdWarBnlr92mxGuR0NZp/CHWYEVHsbK8q4JC4ntFgX9 H+mVzrBo0TbEjZB1ZAWa3YKBGYodSG5XBkzDvwrIm8NHuS0gZIARLuUHcNQoo1BNUAkE gF6Q== X-Gm-Message-State: AOAM532xP6lu4ZZHqH1O8FsQGDgUKI+L7eR6qWbBBQ2XiLHCESdnDe2J 8V4qxAMrBNecnFvhvXfbCrcjAdr/pqSgfz1y X-Google-Smtp-Source: ABdhPJz+PK1/KTEeLOBUS8LYhP/WTTTRuugcv2e/dpPRqFoHgTzcfd6tM4tNLC/UIlnGfEqakpqNBA== X-Received: by 2002:a0c:c30d:: with SMTP id f13mr301427qvi.29.1607019826568; Thu, 03 Dec 2020 10:23:46 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id o9sm2021498qte.35.2020.12.03.10.23.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:46 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 26/53] btrfs: handle record_root_in_trans failure in btrfs_record_root_in_trans Date: Thu, 3 Dec 2020 13:22:32 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org record_root_in_trans can fail currently, handle this failure properly. Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index db676d99b098..087d919de9fb 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -480,6 +480,7 @@ int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans, struct btrfs_root *root) { struct btrfs_fs_info *fs_info = root->fs_info; + int ret; if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) return 0; @@ -494,10 +495,10 @@ int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans, return 0; mutex_lock(&fs_info->reloc_mutex); - record_root_in_trans(trans, root, 0); + ret = record_root_in_trans(trans, root, 0); mutex_unlock(&fs_info->reloc_mutex); - return 0; + return ret; } static inline int is_transaction_blocked(struct btrfs_transaction *trans) From patchwork Thu Dec 3 18:22:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949327 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E0BFC3526E for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 15A802085B for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502073AbgLCSZZ (ORCPT ); Thu, 3 Dec 2020 13:25:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48576 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502050AbgLCSZV (ORCPT ); Thu, 3 Dec 2020 13:25:21 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 79DDDC061A51 for ; Thu, 3 Dec 2020 10:23:49 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id y18so2982994qki.11 for ; Thu, 03 Dec 2020 10:23:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q6SwMiIl7xCj/qRuKVOl1tDZKoRT8yn5nA+uaKsjDZ0=; b=HasKLKTaFv+n6cUXrWqDHUre4tLgOqnmYPMU9fW24g2Ez0tYkOubZkZRgNQ+i/ORUx MEmwUEUpNOFZcwwMQjWChUViXvfmXC4GCjb39oYIVJm4oaHUSDcFJRQwrABgpoBAQbdp yAorKtu1ZmXrJiKecUB0CR3JKZit/c3D+yYgcEx68gQCK+k+YmDuHGgrLdOgNSubQWqa ZJiOW1DVsdD4JuMlyhCqUjTsu3ngDagLEHjABnM59sz5iQxXd3R4ZAVF2pie1CQ0SOXt AZPz2kyquc/D9VrtLJhEO+BArl1B3M1mYxeetfJ3vMTm9hvA34dJuEd9TFlu9kbQkpJh 2Iow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q6SwMiIl7xCj/qRuKVOl1tDZKoRT8yn5nA+uaKsjDZ0=; b=aUqDRHnTcCgWwWd2SeI4oH9k/GO5GFFZv86c1hFPldKgXMW+ao6qB0cRNjKH/SUf28 hEQ/bhppu5iszOdbh/8bX6XUySVoURas3RmDYRTmuxwvF3y0ZddlofyRrm8h3PdJitZO Xlp9cE8Zrw+mjxuME3Tu2M/HQvYH7ZsYg6ftnZZrz1nGbWpwNnokyT+R9BrozJmMEjXW ppPlED8HjnzU7e8DIM67/5s7OAjp7L2yLAeh7z+6HOfBJmRyZYrnG3iVzsf6IHjIKSWT kp5oZvI4C8sSFOCNOZNrkBWZEWjQMoW1HtNfKdonQxBhx70xw/oTzNh4/9MBoOmm69y6 /v5w== X-Gm-Message-State: AOAM53132iMwmITTThxEH4MUcP9qi495aaZVgvpRW3H69iq8/+yPf6ou rM+tv5UkrKj1F1XolwGIcNtNDdjswQQO1f+G X-Google-Smtp-Source: ABdhPJwOSp43jgSn1QUNYs/K3Dxug/3vU5qGlO9KHNmfBsvrReBlu7O7ToT4siY/5aVWc3qfkKjifA== X-Received: by 2002:a05:620a:8d0:: with SMTP id z16mr4355977qkz.492.1607019828385; Thu, 03 Dec 2020 10:23:48 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 131sm2031359qkh.115.2020.12.03.10.23.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:47 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 27/53] btrfs: handle record_root_in_trans failure in create_pending_snapshot Date: Thu, 3 Dec 2020 13:22:33 -0500 Message-Id: <5916e756f3262f282bacfb8b85b4ee7b306a6cd1.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org record_root_in_trans can currently fail, so handle this failure properly. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 087d919de9fb..5393c0c4926c 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1568,8 +1568,9 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, dentry = pending->dentry; parent_inode = pending->dir; parent_root = BTRFS_I(parent_inode)->root; - record_root_in_trans(trans, parent_root, 0); - + ret = record_root_in_trans(trans, parent_root, 0); + if (ret) + goto fail; cur_time = current_time(parent_inode); /* @@ -1605,7 +1606,11 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans, goto fail; } - record_root_in_trans(trans, root, 0); + ret = record_root_in_trans(trans, root, 0); + if (ret) { + btrfs_abort_transaction(trans, ret); + goto fail; + } btrfs_set_root_last_snapshot(&root->root_item, trans->transid); memcpy(new_root_item, &root->root_item, sizeof(*new_root_item)); btrfs_check_and_init_root_item(new_root_item); From patchwork Thu Dec 3 18:22:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949307 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2771C1B0D8 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 99D43208A9 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502005AbgLCSY6 (ORCPT ); Thu, 3 Dec 2020 13:24:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2501981AbgLCSY5 (ORCPT ); Thu, 3 Dec 2020 13:24:57 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 363D0C061A4F for ; Thu, 3 Dec 2020 10:23:51 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id b9so2072941qtr.2 for ; Thu, 03 Dec 2020 10:23:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lWlZsEARxMqv1Xgx8gX5c3Cln+ZPxSohBZjzdTTjAUQ=; b=y8yJi5Mzff9hMBpmaa4OvuvU3Jzt09UXQSnuGfCtjY7P2/i/1WAirSvOM7VgVnHM94 RX6vlG78fj8uIsXjmm0EXfGx8CziSVsYDtuRcZdSVg/ze75WCco/Tw5mCKLIhPrgHhUk AHo9uk7NuMgjyCPXRt+lc/A+6miERgZuOQJfAyx9VJYCh9VxGI9hURh6/HahKTEhDU7q rHj6i3mWiPuUuEMEk6BaXBSf3dgGMifmUKKLB/vgDQ9VDHTABA8ZiG4RoJgkrGAeTH8+ PXuzHqcUSpm64ywMIUQ7dg2yUFXtk78PXgWBavYslqA3Ylop60HdMwy0GRiBiS2BhoPY 9pNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lWlZsEARxMqv1Xgx8gX5c3Cln+ZPxSohBZjzdTTjAUQ=; b=HSdSZlUAbOq2VixCSKln5HLYAq8Pt7+cGUTBSWSPMX9ND6fm4xxfuOhytyAAgaMqDL uoytMp7aVy+BRdWQ9CAJ5vjOCk+ZSTl/TvxFNddvnxQy7PsDINvS75EpQVgR69zMg3gS BIaTfW+DIbbg/SGLwKMgQIxMzEpAAHiDycvxsGR21Nq/3lV3F5wL5VhpJuRUJVR9I9sL X0+M8RhB0P4AwtZbSyn8BVg42EaT1eHRKi7YhyHHLQIUQ7mbgrlKI0HCahyYTOxayKgQ 6UnfW1mJ+PluPRLO6YIczhAvvyQglynYgZ2a12KzqZe4xZV6CPLRwXElvB0uzp0X/XWq XhZA== X-Gm-Message-State: AOAM531fNZncHLLRLd3F/bttQ6lkBWDe6FYU2fk4g+8iAOGOr2gJFJlC +G9ecj3rtgedgyoZlcnHEk+3238daKK78GVJ X-Google-Smtp-Source: ABdhPJy/1C3bLS+WItZ/+jSYZa8Jil/70Py/pTMUS4qOr/3SdmhB3EsnYZXQ5WNCN2Svw3xeJ1eeiA== X-Received: by 2002:ac8:710c:: with SMTP id z12mr4578643qto.38.1607019830166; Thu, 03 Dec 2020 10:23:50 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id n21sm2235540qke.21.2020.12.03.10.23.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:49 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 28/53] btrfs: do not panic in __add_reloc_root Date: Thu, 3 Dec 2020 13:22:34 -0500 Message-Id: <7426d987d831d4a6a95510c9f94f2bbbf633e14a.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we have a duplicate entry for a reloc root then we could have fs corruption that resulted in a double allocation. This shouldn't happen generally so leave an ASSERT() for this case, but return an error instead of panicing in the normal user case. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 4356af112025..a68ae34596d2 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -638,9 +638,11 @@ static int __must_check __add_reloc_root(struct btrfs_root *root) node->bytenr, &node->rb_node); spin_unlock(&rc->reloc_root_tree.lock); if (rb_node) { - btrfs_panic(fs_info, -EEXIST, + ASSERT(0); + btrfs_err(fs_info, "Duplicate root found for start=%llu while inserting into relocation tree", node->bytenr); + return -EEXIST; } list_add_tail(&root->root_list, &rc->reloc_roots); From patchwork Thu Dec 3 18:22:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949343 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25D0DC4361B for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E0CF3208A9 for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502055AbgLCSZT (ORCPT ); Thu, 3 Dec 2020 13:25:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48582 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502047AbgLCSZR (ORCPT ); Thu, 3 Dec 2020 13:25:17 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3139C061A53 for ; Thu, 3 Dec 2020 10:23:52 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id u4so3002520qkk.10 for ; Thu, 03 Dec 2020 10:23:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=OjSJwdT0JFQIv9nKJ1FZxFDxGJCV49ejVoo5IbSve4Q=; b=1Veavp+iLmAiIEBFxh2zRgx3OIOQe9xt/gpH4gUnZLFeJx7UOkgeHuSX0mNRsl/qv2 M3Jt7aIP0T7H9XDHBagn+xQKMtECDFKwq49XBhsf/h2jRvnQCbibrzH6TQgR9L05NEMl IK2Tqnn+ONE4wtdRv0egZdN6fK61E9qazc7oa/hUI/q7l2WQRtRv285tvIoFjNGjzL32 rY6p0k2lp9aoDNgckugfbpBxQ1eTBsReC+8Mvh8rDZbBeItctIySVhY2/x8+H4Owi2mx G7+vQXwHilxMBnZmGBNjeWBMdDJEUlL/XR64AkAr18AEY/EL/HSXwFpxl6Fof0EDs6sN SIqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OjSJwdT0JFQIv9nKJ1FZxFDxGJCV49ejVoo5IbSve4Q=; b=BPZevmiEhEpSTrFfpaJq1582TFQM0I3EkCtRkrO4P83no+l+zv+cfLDbNZkwPE6qUx dLmNRpOdRe0AmjaSn0T8+HaIetE8vAfmCuAuCrsU86K227tvMBap7JPBBPfImwG6lPo3 oVJHggrOkw7AC9azSjB1h5y0cWufGwadQsXvBBDyJ+4HJKWB3s3zML1h7OOJuSmBYBIB 2oORUPwtAxvdat0olKqsZf4X7IydktveLY8jEkY5v9fxXzXbaYz9jLLEWOMdrzunXJ3o +nQD79WBuecm2DlrHi+2ihSb4nMtRiSciw5i7BOQDRx+B1d8mhFaAb2P/Gm98gO3OJF/ Zq1Q== X-Gm-Message-State: AOAM530BHMn0NaSnpHeAkFRgtj8DtBuxEu8BPSYwaIiTiCvETKu6VzQI VPPxQjvTdqYgQSx25d5kC6Ndqvaueb0x2buo X-Google-Smtp-Source: ABdhPJwVcJDIkg4qxkDvZ3300M+8QP1z8OjCpntjC9x3RPXlyhWTEOVLYHto7UzDi0y95yAFfBC6BQ== X-Received: by 2002:a05:620a:218b:: with SMTP id g11mr4335928qka.190.1607019831890; Thu, 03 Dec 2020 10:23:51 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id z23sm1950280qtq.66.2020.12.03.10.23.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:51 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 29/53] btrfs: have proper error handling in btrfs_init_reloc_root Date: Thu, 3 Dec 2020 13:22:35 -0500 Message-Id: <0cfd5682c79058aa62da679130bc3e2e961715ea.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org create_reloc_root will return errors in the future, and __add_reloc_root can return -ENOMEM or -EEXIST, so handle these errors properly. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index a68ae34596d2..265b34984701 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -860,9 +860,14 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, reloc_root = create_reloc_root(trans, root, root->root_key.objectid); if (clear_rsv) trans->block_rsv = rsv; + if (IS_ERR(reloc_root)) + return PTR_ERR(reloc_root); ret = __add_reloc_root(reloc_root); - BUG_ON(ret < 0); + if (ret) { + btrfs_put_root(reloc_root); + return ret; + } root->reloc_root = btrfs_grab_root(reloc_root); return 0; } From patchwork Thu Dec 3 18:22:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949297 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A285BC193FE for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 75435208A9 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731593AbgLCSYx (ORCPT ); Thu, 3 Dec 2020 13:24:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726222AbgLCSYw (ORCPT ); Thu, 3 Dec 2020 13:24:52 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3447C061A52 for ; Thu, 3 Dec 2020 10:23:54 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id ec16so1450857qvb.0 for ; Thu, 03 Dec 2020 10:23:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Z53JWTRrA00gsfSkVqMYxS1g8LLxe9WIsLGcmEtddno=; b=jTK6a//PzmgyQjcIJd7KvmIuRgjVG3sqJ1lMxbQ5PAB9BqWAFqi69p4MFu3W4Cn+Xg BajSyta4zEqLQz1d513uMCfh2o+CokKNP6KEzcBtEXXmcxzu0q5xwfKqp9W0fQmdAAOf Hjiyyf9YDSNaWD/sTXzsTX4sAvvpwXx8kRGsFkfoUxcBg/m97fx3TcyL2Sv3Ny4j8CAl gWnCf6WhUuYynKbzxM745BEhIQRxO/HP1r7PHvgn9HFWseOh2dKwf/IZ+WNyJwQn3UaH PTYPpI7qfSxrrqMwixzZYyWDkJ5BEMKX0DqapITEswrDXDdZhiBEolby1i2pBtJk1sAc kvpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Z53JWTRrA00gsfSkVqMYxS1g8LLxe9WIsLGcmEtddno=; b=ncJvmS46lpzP+cXz/7+qK3Y0z4pmPzBK5fbbFVLG6U4D/0WmXOe9pWcUV88SRxyOg3 89gL3Nx55UraNgEmYJ5hUpTjf6bdOQ4GAqah177hIMx+qm4QFIvuCLC0GBLmenL6Tww7 AZ7zOI2uGoG0FIz22+1dep1BOIHY4nrtsRD+DQ0lCNHDkBkjmHuCGmdeRqDXB06C0KP7 gRBqQZbM51EYTqbElmiGhgr5BBqVdQ1sZRFFh1pqGnBW6n3PtXrotr6SsqjYhBJtlRGf FhQDwwxGJ6njZMraQymOZm23YaJYQZha2k9q6PoxX2NnehJ9NCG22fyVl6pMD2Nt/rpN ymQA== X-Gm-Message-State: AOAM530+YFI4AMIYDVAz6twSKvRlPE6pgkoM5IugNVn6WwQSwPkQS6IB 8IMReG9EjYrhUXDpl3fHbjm9+DvpyqHmDwuE X-Google-Smtp-Source: ABdhPJwp8dhG3+WNfRJhYayVNve906wRQKLg1IwlU08As2FY8ynZ0HDYi+fy71gPeATocZqC0c9zXA== X-Received: by 2002:a0c:a9d0:: with SMTP id c16mr173387qvb.5.1607019833542; Thu, 03 Dec 2020 10:23:53 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id e126sm2227217qkb.90.2020.12.03.10.23.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:52 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 30/53] btrfs: do proper error handling in create_reloc_root Date: Thu, 3 Dec 2020 13:22:36 -0500 Message-Id: <6e4ab12fa0b551a422e150876eb0ed9c121473f9.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We do memory allocations here, read blocks from disk, all sorts of operations that could easily fail at any given point. Instead of panicing the box, simply return the error back up the chain, all callers at this point have proper error handling. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 265b34984701..627c1bcfdd33 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -737,10 +737,11 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans, struct extent_buffer *eb; struct btrfs_root_item *root_item; struct btrfs_key root_key; - int ret; + int ret = 0; root_item = kmalloc(sizeof(*root_item), GFP_NOFS); - BUG_ON(!root_item); + if (!root_item) + return ERR_PTR(-ENOMEM); root_key.objectid = BTRFS_TREE_RELOC_OBJECTID; root_key.type = BTRFS_ROOT_ITEM_KEY; @@ -752,7 +753,9 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans, /* called by btrfs_init_reloc_root */ ret = btrfs_copy_root(trans, root, root->commit_root, &eb, BTRFS_TREE_RELOC_OBJECTID); - BUG_ON(ret); + if (ret) + goto fail; + /* * Set the last_snapshot field to the generation of the commit * root - like this ctree.c:btrfs_block_can_be_shared() behaves @@ -773,7 +776,8 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans, */ ret = btrfs_copy_root(trans, root, root->node, &eb, BTRFS_TREE_RELOC_OBJECTID); - BUG_ON(ret); + if (ret) + goto fail; } memcpy(root_item, &root->root_item, sizeof(*root_item)); @@ -793,14 +797,20 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans, ret = btrfs_insert_root(trans, fs_info->tree_root, &root_key, root_item); - BUG_ON(ret); + if (ret) + goto fail; + kfree(root_item); reloc_root = btrfs_read_tree_root(fs_info->tree_root, &root_key); - BUG_ON(IS_ERR(reloc_root)); + if (IS_ERR(reloc_root)) + return reloc_root; set_bit(BTRFS_ROOT_SHAREABLE, &reloc_root->state); reloc_root->last_trans = trans->transid; return reloc_root; +fail: + kfree(root_item); + return ERR_PTR(ret); } /* From patchwork Thu Dec 3 18:22:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949351 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55DB1C3526B for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1B50F2085B for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502058AbgLCSZU (ORCPT ); Thu, 3 Dec 2020 13:25:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48584 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502048AbgLCSZR (ORCPT ); Thu, 3 Dec 2020 13:25:17 -0500 Received: from mail-qk1-x742.google.com (mail-qk1-x742.google.com [IPv6:2607:f8b0:4864:20::742]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 735D5C09424F for ; Thu, 3 Dec 2020 10:23:56 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id d9so3002398qke.8 for ; Thu, 03 Dec 2020 10:23:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vsrfk6ueoE77Saz+ki+XrNDk2dErjLeVhhzz9vbaZ34=; b=TBUgdK2MnkJ5db2K/n1+davJE3vHF4AyBaYAJXGJq2cfQ+0D36iAUjUjcmE23mSuET z4WFDvpcMHOllFBV+HGT2rCt8bxMP2RO3iAR/hI5zZ/hWIJYCO9NXYYyHhaWGgkbBVGE wDSftIQrCg81kGYWjQF8jxSVMQh5ha5w20V2+k3iZ4NTp7qSS+SRnlWurbFpyGmDgHW3 YdHL0GnH/WO1Zvd9DrJu1ATirVvr+pPWJyQx5Sl6xn0JQekFJMt43pwQQYbnldk6LjSe gCUI/rTlp8hO6wdHsnCHum52g1cD22a348Bgs4UcHOd0xF3zMyp9VhOTIoSVeCoM6fsf BySQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vsrfk6ueoE77Saz+ki+XrNDk2dErjLeVhhzz9vbaZ34=; b=rXXyz34rq4DvZfC9PRZgkJoI2/AnG4ZwkKB/KYl1yjQly3S8D+W/Cs3yo0EXuxBX5z birLPhKg/Nabv9F8y/l0dz9uf5FOiXizWXmu9u0SysqU0kq5YgQ9MR9q0ndQTADvLhx3 okV5NytygLoucJobL5iHO5vhN1hzD4eW0JTJH9pttdgdq9AbpbGOJSNmgTLUCu/M4/yq ivQ4XUc4sQ9ENUAFfLVOjfPPTU3F63qfLx/zCrgHBkjdH/LODL1UMgPOc+P5jKgkZ02p VUPoulFS1FujPc1z7yJ9AXwiirCxKgTuQ2neqkSC1V+E7ac1tkJ9LrtVPiKNx5RzM4TD O8UQ== X-Gm-Message-State: AOAM532l+6O9jC9x3U0epsLgWpHeFAPHMGQ2EzKycmRFHU/Yfj+Czk/q GwRAv1WSU9n1MutMd6aQv6Y0Pd19aqYo3TR+ X-Google-Smtp-Source: ABdhPJx7rECroY7Uc2Nh9zmVyPHQ6ftOHu23i3XM3vPti2q3cq/RiVcFysLqk6eTKH+uVOeIrbH+vQ== X-Received: by 2002:a37:aad2:: with SMTP id t201mr4084190qke.61.1607019835357; Thu, 03 Dec 2020 10:23:55 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id o23sm2212859qkk.84.2020.12.03.10.23.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:54 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Zygo Blaxell Subject: [PATCH v4 31/53] btrfs: validate ->reloc_root after recording root in trans Date: Thu, 3 Dec 2020 13:22:37 -0500 Message-Id: <5e855332210cd2114c1ee798a0f3a3f2a7a43bb7.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we fail to setup a ->reloc_root in a different thread that path will error out, however it still leaves root->reloc_root NULL but would still appear set up in the transaction. Subsequent calls to btrfs_record_root_in_transaction would succeed without attempting to create the reloc root, as the transid has already been update. Handle this case by making sure we have a root->reloc_root set after a btrfs_record_root_in_transaction call so we don't end up deref'ing a NULL pointer. Reported-by: Zygo Blaxell Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 627c1bcfdd33..5770f4212772 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2073,6 +2073,13 @@ struct btrfs_root *select_reloc_root(struct btrfs_trans_handle *trans, return ERR_PTR(ret); root = root->reloc_root; + /* + * We could have raced with another thread which failed, so + * ->reloc_root may not be set, return -ENOENT in this case. + */ + if (!root) + return ERR_PTR(-ENOENT); + if (next->new_bytenr != root->node->start) { /* * We just created the reloc root, so we shouldn't have @@ -2572,6 +2579,14 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, ret = btrfs_record_root_in_trans(trans, root); if (ret) goto out; + /* + * Another thread could have failed, need to check if we + * have ->reloc_root actually set. + */ + if (!root->reloc_root) { + ret = -ENOENT; + goto out; + } root = root->reloc_root; node->new_bytenr = root->node->start; btrfs_put_root(node->root); From patchwork Thu Dec 3 18:22:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949301 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 062EEC1B087 for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C6716208BA for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502013AbgLCSY6 (ORCPT ); Thu, 3 Dec 2020 13:24:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502001AbgLCSY6 (ORCPT ); Thu, 3 Dec 2020 13:24:58 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 162DFC094250 for ; Thu, 3 Dec 2020 10:23:58 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id p12so1414593qvj.13 for ; Thu, 03 Dec 2020 10:23:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g/v7OXjRav6KqGI7SIs6G5lf5b7HJWr83Ws2znh3xAg=; b=M3CRL2IdF5KKyYda1Foi8Gpr1wojFLF08nFEl1UDJppiMEfpiXPwKSQFZ2oGWmrf17 LYLE5cRq7oHqakvHVPZU/PN/L0bvUzY8pvxRgQbYgtIf5QiRkh143YZ+39cVDN6k9qZu y2BXVCj1gPF5lryw7QBNlFVItl1DqbtX4gR5xD1wPSD3tePw0jCvw8CMOYEPLcSdGzQK iB5T/ekXlzmU4c8SXxEjMFFhNnIBbuY5pGsB0J4D+obpx7itmTXMh/h92dzh9CmbeeLe t32/CrAjDDJEwNY2oBSJolRmFIYZWgbfGneajBn3GefYapkhG82vGQfFckg32/Mx4A+q CQyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g/v7OXjRav6KqGI7SIs6G5lf5b7HJWr83Ws2znh3xAg=; b=A046aI552+eYuz8vUhZEl4rPfVW2za5yARyjKvTak8heST2OmSemC12Vs55ikQzy7N 5xmjxWkvacQamEaMJq0hLpCM+ejPk91IZIGmTac3nQmTEF3hVyWL4EAZFubwmm4nMtuK oTXJ5NmO/Jy64mQXcqcsH8jOBue+qvFX/JxPDXwpnyZP490uRB6uXGweLIGrnPapFUAF bkxX0wgZg98eu4dq7lhgZBzQT7sa1NtGDUxicaoDhewmxLtIxiVSWZjDFOkNPtIQc6+q sPJBvze100LEMdZ+r3NiSu0oyKnB8VXR0GKoSZnGipxNIiF7Gai+BJXvMXRs7KKs9PDi VpZA== X-Gm-Message-State: AOAM531anmvR2IPqggxsxj2m+ebgzNJ2Ji6NHncJfNUSIVuyr99psED4 IRs1zsupt0khTC792aKPxZuFAkjoncc0i4bv X-Google-Smtp-Source: ABdhPJxvWgU6wZzZK0+oNqMSeiF3CyqyjftKb3K36JgGpf8F5rl6nmlKODXyKMJ1bMNHVdLqs8wkkg== X-Received: by 2002:ad4:4743:: with SMTP id c3mr155373qvx.31.1607019837052; Thu, 03 Dec 2020 10:23:57 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 17sm2048809qtb.17.2020.12.03.10.23.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:56 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 32/53] btrfs: handle btrfs_update_reloc_root failure in commit_fs_roots Date: Thu, 3 Dec 2020 13:22:38 -0500 Message-Id: <039f3fa8a8b32ddcec6b8332d542d63b43e7e102.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_update_reloc_root will will return errors in the future, so handle the error properly in commit_fs_roots. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/transaction.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 5393c0c4926c..5064beff3f9f 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1344,7 +1344,9 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) spin_unlock(&fs_info->fs_roots_radix_lock); btrfs_free_log(trans, root); - btrfs_update_reloc_root(trans, root); + err = btrfs_update_reloc_root(trans, root); + if (err) + return err; /* see comments in should_cow_block() */ clear_bit(BTRFS_ROOT_FORCE_COW, &root->state); From patchwork Thu Dec 3 18:22:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949339 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBF9BC35273 for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A44C3207D0 for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502079AbgLCSZ1 (ORCPT ); Thu, 3 Dec 2020 13:25:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502049AbgLCSZR (ORCPT ); Thu, 3 Dec 2020 13:25:17 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8BAFC094251 for ; Thu, 3 Dec 2020 10:23:59 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id o1so2055300qtp.5 for ; Thu, 03 Dec 2020 10:23:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KUMwtyvBJyOvxYGVZ896Bgl7sIns8gjAueMfjoGX5eg=; b=RUz2LvJNbQaDaVyjHnjPNGTRFpwgAwjwiCXLUAZp3k8oSmpOrDXPrXg+17dyRU/Z0S shvGfZiIMlhjNpUSy6NN3ZlF8giLwcXVqeRAHXd2ImxQEGJy2jjnyFmkn5ssD8VLu2+0 HF+7EHj1qMWgD2rOlpl57afN3deOFNk8m1A6p1HMiasOYepElNlxWlqrsYnxXlKX2ADy PYJ85Pn8NOQ4QuIPdOjB94zYch3hNP/QrKLJXP70u8em446KAtQ66Bqlu/t659z6l6Az dYOQcQBqEMDY5hmr/08brjrHwQ+Zlo3WDguoKABDEQE8yaF0EYRVgAzYPBOcMziomPkY ZgEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KUMwtyvBJyOvxYGVZ896Bgl7sIns8gjAueMfjoGX5eg=; b=ai2Qi+b/hqxd7ubd+s4BFJJdSugwFUPvVpDCxFsD4tjHAmn7p6eRNB9n5BrHIIzhQe 1G7skI+prwpKvLTSlsdvjrxSAEeH6/ldJFtBNC4HVAyQFKHCK2BWrL7cfBtO7DIMrr2V eK2w48LPIVQYgSq4v5W28t1Sy9po20DlBcYIoasG00YGG9iv06jBKpTX0gsAB7ZSJVKz egaBfah85FE1P+YmEEyvHkJVp5b8KCrfWNrIJhcUAN0adNo3EKsfosevTEID2ivkn3UL qQIW87eh86OcseI7nAqBygkG19h0ulALPoq6pnPwBgLbA/3xrv/D2vtE81LgkxD64dmT VENQ== X-Gm-Message-State: AOAM530aX5FjVd8XNaNgVKBrlYDraG7/Zd9zGhbmuvpk9M53+4hhd+wX hHfssbFmGG/I/0bDxR7KRkNaErO3PZOvOdil X-Google-Smtp-Source: ABdhPJzqTzG49VNafj454iUwjElZygobGWRLQYtXS0IyN/O8qMxp69PSxddfp2QXx1k76fJNNdBOvg== X-Received: by 2002:ac8:2c62:: with SMTP id e31mr1905466qta.188.1607019838715; Thu, 03 Dec 2020 10:23:58 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id b3sm2220314qkf.74.2020.12.03.10.23.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:58 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 33/53] btrfs: change insert_dirty_subvol to return errors Date: Thu, 3 Dec 2020 13:22:39 -0500 Message-Id: <4272c3aa86a6809529d9ef929050eebfac77cd58.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org This will be able to return errors in the future, so change it to return an error and handle the error appropriately. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 5770f4212772..f41044d2b032 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1556,9 +1556,9 @@ static int find_next_key(struct btrfs_path *path, int level, /* * Insert current subvolume into reloc_control::dirty_subvol_roots */ -static void insert_dirty_subvol(struct btrfs_trans_handle *trans, - struct reloc_control *rc, - struct btrfs_root *root) +static int insert_dirty_subvol(struct btrfs_trans_handle *trans, + struct reloc_control *rc, + struct btrfs_root *root) { struct btrfs_root *reloc_root = root->reloc_root; struct btrfs_root_item *reloc_root_item; @@ -1578,6 +1578,7 @@ static void insert_dirty_subvol(struct btrfs_trans_handle *trans, btrfs_grab_root(root); list_add_tail(&root->reloc_dirty_list, &rc->dirty_subvol_roots); } + return 0; } static int clean_dirty_subvols(struct reloc_control *rc) @@ -1779,8 +1780,11 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, out: btrfs_free_path(path); - if (ret == 0) - insert_dirty_subvol(trans, rc, root); + if (ret == 0) { + ret = insert_dirty_subvol(trans, rc, root); + if (ret) + btrfs_abort_transaction(trans, ret); + } if (trans) btrfs_end_transaction_throttle(trans); From patchwork Thu Dec 3 18:22:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949299 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D591C19425 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CBCAA208A9 for ; Thu, 3 Dec 2020 18:25:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2501872AbgLCSY4 (ORCPT ); Thu, 3 Dec 2020 13:24:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731594AbgLCSYz (ORCPT ); Thu, 3 Dec 2020 13:24:55 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A7A8C094252 for ; Thu, 3 Dec 2020 10:24:01 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id l7so2045145qtp.8 for ; Thu, 03 Dec 2020 10:24:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=veWjAVm1EUr4XAlzMRvjKGkkM3ajrvwj5nc9cZ/TPV8=; b=exr9L2s7T354e0+vAxuUTBGs/6Y++0xKh+G1DjmIi7bWCjhxg+f6Eg2AAjC253jl2R gKYPyNIKenTkpxo2Yzsn5/SUabK618Ic/INX9DHZrc9bfnL7h+/1u0n5cY0NdLEYVyEf L0CzsIZ27JDZ0FXWepnWOwBNH9pOG93iP517kv7lM9crh4UyXDUC8gMusxZ885OTkWmE X7N0fIz98DdNT6KREGqk3VN691O0JkP8aJZE2/h89BpzTzgRxfltSCqLSjlyGiNRZ2/2 4q11RkEZm9K1CuhW6md7QKbXHGL9fuzmV7R/rQv8lSrOtCc+mQZgrF4mb/wgsiu3GFdX R1MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=veWjAVm1EUr4XAlzMRvjKGkkM3ajrvwj5nc9cZ/TPV8=; b=aGMkhsHSZcJ/gO1Qb5byaIdVNQwpeJ6yLZNXWJCeWdN654rJUHi8JxeN3fYuwL0Mam 3h3z4AKxTG4g9GtsAZTIt486tmJ2TsV/LGTy0E2a+kbDhdodpmrAzrNfgleCWe8P2JC0 LaNwDMJqygounUtPpRKZxk7QNCqCC8Supnzf7Csr5q2XsC5NSaXl0RnjR/lacPDz8YZ0 YbUy8fAKgZeC0GLUOBAEzN7NVF4bgHij3nBvAX5Q/qMVtDPrI1q3+oIaicdb6DuVhky+ Jro+wA4bOITeI4b2WZTfnhkj7wW2pzXVz3yavra5f9pYxT85aqOc2L7VkzvVuTcJzbxH QZzg== X-Gm-Message-State: AOAM5307DLRUYMAwzVx+nKUWeCALwy5xZjpNfo9c4K8ytP3srxWVedyO aidb6aqSfkO45ZjlDaiTAYGKhkadGGq/7jPj X-Google-Smtp-Source: ABdhPJwQUhahOssPOOIufEAO23bdTQfhdVnmImUQBgRYAiOLBP008uZQcWGpEZB2XcYxeLQqr7rYbQ== X-Received: by 2002:ac8:4818:: with SMTP id g24mr845754qtq.252.1607019840554; Thu, 03 Dec 2020 10:24:00 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id s68sm2272104qkc.43.2020.12.03.10.23.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:23:59 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 34/53] btrfs: handle btrfs_update_reloc_root failure in insert_dirty_subvol Date: Thu, 3 Dec 2020 13:22:40 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_update_reloc_root will will return errors in the future, so handle the error properly in insert_dirty_subvol. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index f41044d2b032..f329903024b0 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1562,6 +1562,7 @@ static int insert_dirty_subvol(struct btrfs_trans_handle *trans, { struct btrfs_root *reloc_root = root->reloc_root; struct btrfs_root_item *reloc_root_item; + int ret; /* @root must be a subvolume tree root with a valid reloc tree */ ASSERT(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID); @@ -1572,7 +1573,9 @@ static int insert_dirty_subvol(struct btrfs_trans_handle *trans, sizeof(reloc_root_item->drop_progress)); btrfs_set_root_drop_level(reloc_root_item, 0); btrfs_set_root_refs(reloc_root_item, 0); - btrfs_update_reloc_root(trans, root); + ret = btrfs_update_reloc_root(trans, root); + if (ret) + return ret; if (list_empty(&root->reloc_dirty_list)) { btrfs_grab_root(root); From patchwork Thu Dec 3 18:22:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949319 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49CDCC2BB48 for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1D8B22085B for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731632AbgLCSZK (ORCPT ); Thu, 3 Dec 2020 13:25:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731614AbgLCSZG (ORCPT ); Thu, 3 Dec 2020 13:25:06 -0500 Received: from mail-qk1-x744.google.com (mail-qk1-x744.google.com [IPv6:2607:f8b0:4864:20::744]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 735A0C094253 for ; Thu, 3 Dec 2020 10:24:03 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id d9so3002758qke.8 for ; Thu, 03 Dec 2020 10:24:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=S3VP7V8lCU9GOZcXdgfVCrRDY0XgENnr4Aval9CKvcA=; b=FLhg0n82aG0DP5Rxl+skPbssvIHMLfNZSqy19bBFsvNZYCklSKeJpKhhKCd0tetbNQ ih4uz0sQ1Tmborpo6P+KWlSZqEw8uvDc1rkwqyqSWKwzQWWja6Sewa+Exp48I6eXx+UE WrSiNXZ7Sq6VywFULqArenswnxMdQoDFcD4BzhaahayB5cQR7NwVZ2mzZ0ZQUZ8ggve0 wLoXDqFnLoRcDl73iZfwZhNWTLP2AotmOva7TMylqU3J5oYKsFvtF2bKFaOujYUiTwGx AhQPwhsk3602Es7QN7vBxo4YmDENeqUp4Op+TJp6PadXzrTw5gntkkw6D3C+IdN8rT5s oZcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=S3VP7V8lCU9GOZcXdgfVCrRDY0XgENnr4Aval9CKvcA=; b=eK0L7gHrRUkBWP4Y/6IxPZIne20R/76Ks8M3kFoBlToP2Qdsqgx1wmZSK3UXG+B/kX 4akG3cBZkNl0gSPlHUTHXcNJhR1t5+vRdKrFaZWBi3nng4TP/MnWJ6DB/oSoj4dDvkiO M3DrjW0hW6mxaSaEm6mejr8tXWIitBpwGk7vRqteWRA0hapX1k7OIp4wtInj/h7TCETT JNVYDh278+ItXsN4xm+62Yr+yL403pp11kFb0WeEfCZNXSu+mQjX81G3mfy1h4zWbFTq Cu8G5TOvVRCsjJjOxjCOV02DmAON1RMxW8md6P5P4Bufx5JoVxIFaw5gHdOs/mE4g5mL 0zpg== X-Gm-Message-State: AOAM532bkNsHb4sfGTsBNcMEotixV1zVgxPcz8cUBZKFQYnojTFi1WCG yGA1VKqc7vZLIbmpmE/s97MjQQVykkCRpw85 X-Google-Smtp-Source: ABdhPJyD3XC0y5/5CjFAFDUi/HnATKgcWvDIuyBSWZYWOTnffs16hMyR3cL6T9y0daBSSXiOoxOBRQ== X-Received: by 2002:a05:620a:15ad:: with SMTP id f13mr4288011qkk.242.1607019842404; Thu, 03 Dec 2020 10:24:02 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 68sm2147402qkf.97.2020.12.03.10.24.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:01 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 35/53] btrfs: handle btrfs_update_reloc_root failure in prepare_to_merge Date: Thu, 3 Dec 2020 13:22:41 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org btrfs_update_reloc_root will will return errors in the future, so handle an error properly in prepare_to_merge. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index f329903024b0..b4ced3a0ca6f 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1860,10 +1860,21 @@ int prepare_to_merge(struct reloc_control *rc, int err) */ if (!err) btrfs_set_root_refs(&reloc_root->root_item, 1); - btrfs_update_reloc_root(trans, root); + ret = btrfs_update_reloc_root(trans, root); + /* + * Even if we have an error we need this reloc root back on our + * list so we can clean up properly. + */ list_add(&reloc_root->root_list, &reloc_roots); btrfs_put_root(root); + + if (ret) { + btrfs_abort_transaction(trans, ret); + if (!err) + err = ret; + break; + } } list_splice(&reloc_roots, &rc->reloc_roots); From patchwork Thu Dec 3 18:22:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949311 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 713F1C4361A for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2A6E9208A9 for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731611AbgLCSZD (ORCPT ); Thu, 3 Dec 2020 13:25:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727329AbgLCSZC (ORCPT ); Thu, 3 Dec 2020 13:25:02 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 270CDC094254 for ; Thu, 3 Dec 2020 10:24:05 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id es6so1429525qvb.7 for ; Thu, 03 Dec 2020 10:24:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hZ3N5Xz5HqHBUZlvTRm0YcZnf8FPKOJb+gKET8jp7xc=; b=vtG54BmrB0f8I63T/dfFw75RBiOYjp25dm6Nil4ZhXPobg+EG6kk5Io1kmfXGeavW9 HBHfkW0n9y/wm/RJMhEKA8k+NhEjY6hjuqPaop9D4WfZbbhITspEjsVFjapV+FkQAU+v 7crdbF0CHwEZ1n9odxdkeui1NP7UFBWifXE22nYX+c3S1OqL95Xki/VNirq79mb5GV2W YbxRAEPiJo83wACs+fAzKqtcyz4+A2VWMCXQE95wp5Yj2I7v1xzY/EA76Pxiv01KFPaL rHMlWiU+Rh7PT0bcw4ofezg8+8Zo2tvshPmIDVjXBVG6BLP+K+r8fhsiXVwMvh4OmlVb tuMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hZ3N5Xz5HqHBUZlvTRm0YcZnf8FPKOJb+gKET8jp7xc=; b=PJ5PBHRx32NcqyZjrbvkC4J5KNCJTf5QACRWt9EpdO3FzNQzYqQMz44bLD4reoGWC3 HaywmvBTxpDayYqE31hS0+e4eUp6qP3kG2sy/F8zRKSNekcN+mh3s7XlvNbZ1FLQmzyM ConUDkKicIkPHOMuljt338Q3BYLR2u4+fzJwdta0cXnuJNIgCmQ/7YHxenqjXcEIieR0 FmyVJCscHPBKULj2czL33Wt/2k04v2flfLLJfaYE+IGBgggd7fg0Azk58nZs6sFwBNYe TM51jc6nc8mL8Ld8MxtUFapdyDh/qycK8CmrTzFdPO3bQN+/MMNB/GPDTGO8EmZP1p3E HbEg== X-Gm-Message-State: AOAM530eD8u3h5UImqDZMS2//h8qROvOKGStknHKuN6kBEAhovxi1T7h Q2i2irxckTnc/GAQHBB4iLhJSQV4DEvSHyRk X-Google-Smtp-Source: ABdhPJxHrrMSTG5brAehmQrkasZWFCpmmXOwv28b52T/VXQRb6p71C+ox+UtLuQpXnkJyJfn4jkwfw== X-Received: by 2002:a05:6214:b83:: with SMTP id fe3mr207944qvb.24.1607019844097; Thu, 03 Dec 2020 10:24:04 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y23sm2062682qkb.26.2020.12.03.10.24.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:03 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 36/53] btrfs: do proper error handling in btrfs_update_reloc_root Date: Thu, 3 Dec 2020 13:22:42 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We call btrfs_update_root in btrfs_update_reloc_root, which can fail for all sorts of reasons, including IO errors. Instead of panicing the box lets return the error, now that all callers properly handle those errors. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index b4ced3a0ca6f..ee175d2a5abe 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -894,7 +894,7 @@ int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, int ret; if (!have_reloc_root(root)) - goto out; + return 0; reloc_root = root->reloc_root; root_item = &reloc_root->root_item; @@ -927,10 +927,8 @@ int btrfs_update_reloc_root(struct btrfs_trans_handle *trans, ret = btrfs_update_root(trans, fs_info->tree_root, &reloc_root->root_key, root_item); - BUG_ON(ret); btrfs_put_root(reloc_root); -out: - return 0; + return ret; } /* From patchwork Thu Dec 3 18:22:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949305 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2C2D8C1B0D9 for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F10B8207D0 for ; Thu, 3 Dec 2020 18:25:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731613AbgLCSZD (ORCPT ); Thu, 3 Dec 2020 13:25:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731594AbgLCSZC (ORCPT ); Thu, 3 Dec 2020 13:25:02 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02191C094255 for ; Thu, 3 Dec 2020 10:24:07 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id f27so2048361qtv.6 for ; Thu, 03 Dec 2020 10:24:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EH5zLvg1xCtS+DbKeTE1Z4oPb6z73SdFjMASUwOdAQg=; b=AAbDdUyaR3+zStB632o9ADXhMlx3Ur0gAP9TGb+sdLdg2NeXhKh8fm9zHIHvCqERk4 IVYSCneSsN/0qFpWrJjjQ7J+crRqOGBzlQGaq6hMoNKXGCFiqbS5Rf11tYNIIgLKmQNw mgb5szgK/lySRseVbyMWNcBRkfQlT/zq+juocAqeCinymlg2Zyc6Eou3WDPXo/5admj2 9kKLFMOkUsh74HiEFcnimmVFv4aUeeXcReCheGeUSmD2qLpLDr4etU3ZtvUqEFNgwRQC +S+eXK6g9PiGUjkavQPVoLT/e2dCOG+FX/SC5tL7oYBSPlU+wCHExAzF7El3gO3U78po tSPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EH5zLvg1xCtS+DbKeTE1Z4oPb6z73SdFjMASUwOdAQg=; b=PVTdvmY5GVZ6KgRMMtYoFooCRzGINUlLc+LyG4xh5ExSXkUbgUan/xElvURpbxmMbC t7F/Rc0gwc3rqlLGo3ZTpTpmqrK+ENLCACTcPD61BWIDh5A94/jBnV0myKNEBdaRb1zL uYlqKkxS9Ugz9/h5CwxXvqJ2+1c1rxX5W/cq/+Dq8ck7Ojp7KSneQPCT/1R67qK0PUSU ppIFIitmUBg4Hmw7jIZxmgd8byyLEl78WCs5+weRzI1/OC1Eo09cAeKUQalxrUqGJDaL YuG90TOy0r2fsaIRCESZZij1mdX67flweZj8Y2x8h0drgUiviTjJAbsNzybMLpi8pkZ/ of6w== X-Gm-Message-State: AOAM533v6dVCo0hrMXlYzOBJKv18VaYkK4rNhJoUohpziS6VoXk5zmpv IZSoXYrCQgcl7sDe9Zcb2wlFa+gMSihvwRbe X-Google-Smtp-Source: ABdhPJwueqgAB/9sAopzy9Fo9Y5jPJX8oJjt7Ba8sjnHf2buGs3q4vRV5vRdoKKYRxU2IemEerUWXA== X-Received: by 2002:a05:622a:d:: with SMTP id x13mr4621830qtw.374.1607019845939; Thu, 03 Dec 2020 10:24:05 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id c138sm2190973qke.95.2020.12.03.10.24.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:05 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 37/53] btrfs: convert logic BUG_ON()'s in replace_path to ASSERT()'s Date: Thu, 3 Dec 2020 13:22:43 -0500 Message-Id: <6fe88f7da4bfa2569e3213d54ef1dbc7a877f24f.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org A few BUG_ON()'s in replace_path are purely to keep us from making logical mistakes, so replace them with ASSERT()'s. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index ee175d2a5abe..30a022f26cb8 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1202,8 +1202,8 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, int ret; int slot; - BUG_ON(src->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID); - BUG_ON(dest->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID); + ASSERT(src->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID); + ASSERT(dest->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID); last_snapshot = btrfs_root_last_snapshot(&src->root_item); again: @@ -1234,7 +1234,7 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, parent = eb; while (1) { level = btrfs_header_level(parent); - BUG_ON(level < lowest_level); + ASSERT(level >= lowest_level); ret = btrfs_bin_search(parent, &key, &slot); if (ret < 0) From patchwork Thu Dec 3 18:22:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949349 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 23FEEC2BB3F for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E40BA207D0 for ; Thu, 3 Dec 2020 18:25:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726955AbgLCSZK (ORCPT ); Thu, 3 Dec 2020 13:25:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731625AbgLCSZI (ORCPT ); Thu, 3 Dec 2020 13:25:08 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A453BC094256 for ; Thu, 3 Dec 2020 10:24:08 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id x13so1429144qvk.8 for ; Thu, 03 Dec 2020 10:24:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jG7U8zsWmSJCtYF5+aifWD66vMo/hyIuMyb0u2b695s=; b=O1owu5xc/tzDcRC4YliiDjCnE9LAC/XontRtTU6PuZ5druPhFwnmB+P+JbsGWBK2iJ 1A8AexwNfNM7OjMuTGuWeoTifvCuArF+w7mwPsD93DSoXHchQXlCdrokOT/D7m+m8nkv SMrjEVBnagRAq0Jk1zUQzI5lp8ZZQVM8rHf0UC3yIbgxXLnL9ai/Q1lbGsrcky3DGdH/ k/S+0MdR+YPXaPO3j5bR+uHnML8EKp3N5ZQBEN5BOP1A0gE1zXy79DI5KDAd45i9el2s v0zbwSegDGQw8Yva74Y7YJ/9+zqWcylMMwMXRZrsbzl1UfqMevCfgmBT11UW51qGQ9oy aE7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jG7U8zsWmSJCtYF5+aifWD66vMo/hyIuMyb0u2b695s=; b=AQdiEw2/JQCTdoZKSxh0mnOQXe1do/CL516bnBoJpgnW3wKYwx2Fpuq9jOJuRJH4Ez SZ8KO76CYXJaFD/Vb3RrpTlOEkMfhgG2VaBMvoBsm2lfFUX/j7ORt/fPGB1Hy5SEM8Fc 4H+ibxszyeaKYv9cArGn2E8Q8BD8jtfCvlpunFA3WKTwIhAdzJ1A7ESAOC94R6uMHrPm +AslmkERUvpNZZBk6a6lYuGJrGXXucJmgDRuy7fng111SwITIFttMeRZhFeyXNylWV/S hmKkefSgonISSuRLIebJ4PZKouF5C2igQUU4+E1BHzOSZJ4n0cHYUjSmPwgLI4SIntWl cgew== X-Gm-Message-State: AOAM530kbREJEASv75Dp/hm4pVFbpn7GTquudO8jy/GW9T32viflupyB BX32nK3HapUmYbUQ2PvkWDNSTp6efHfi80Z1 X-Google-Smtp-Source: ABdhPJxWbO/nMaCkmskUUcsVnzVbpR9nssiMyGPWtFUUkmKTipLTUjNTmedsROe1mk7vWnCCiY9rUw== X-Received: by 2002:a0c:8d47:: with SMTP id s7mr307813qvb.17.1607019847606; Thu, 03 Dec 2020 10:24:07 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id 76sm2139887qkg.134.2020.12.03.10.24.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:07 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 38/53] btrfs: handle btrfs_cow_block errors in replace_path Date: Thu, 3 Dec 2020 13:22:44 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If we error out cow'ing the root node when doing a replace_path then we simply unlock and free the buffer and return the error. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 30a022f26cb8..5a654037795b 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1222,7 +1222,11 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, if (cow) { ret = btrfs_cow_block(trans, dest, eb, NULL, 0, &eb, BTRFS_NESTING_COW); - BUG_ON(ret); + if (ret) { + btrfs_tree_unlock(eb); + free_extent_buffer(eb); + return ret; + } } if (next_key) { @@ -1282,7 +1286,11 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, ret = btrfs_cow_block(trans, dest, eb, parent, slot, &eb, BTRFS_NESTING_COW); - BUG_ON(ret); + if (ret) { + btrfs_tree_unlock(eb); + free_extent_buffer(eb); + break; + } } btrfs_tree_unlock(parent); From patchwork Thu Dec 3 18:22:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949347 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1977C2BBD4 for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7CCA4208A9 for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502032AbgLCSZO (ORCPT ); Thu, 3 Dec 2020 13:25:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502021AbgLCSZN (ORCPT ); Thu, 3 Dec 2020 13:25:13 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F38CC094257 for ; Thu, 3 Dec 2020 10:24:10 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id k4so2039674qtj.10 for ; Thu, 03 Dec 2020 10:24:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EUDtQkFoKJzUDp/KbFsXFW9qPpciC82EJzYszvfdmFA=; b=Q2+kshZMuYSL9PiHVJcODSHMLkbQxWsT5gEACCMXcv5Ek9B1wZdthHGE5DEWUXx/8C ZPda71MJn8wWqzkk5ywAPqTPgpTioZz80WS9K6bo12cCFGpeMh3x1jtrwAVczEvNSZvk 6UEkM/dN4HGQyXTUZ3Rpahd8kpO/06dEJmqcD6K4whtp0enJ+xkuOujHSqt27ZXVr0TQ /wluelKFwmLXg4Qwckr1daaEvNOvoFPUW4CeCCr2ifdBJzgX1gSYDjpgYgyo3Im3OPl6 ghmc/hdeoK1ZQi8hMGQJ7qcB+7SK91qw2wRGPK2ZsnAF1/qbMl1MKKVgyjA87ahiV1za 6N0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EUDtQkFoKJzUDp/KbFsXFW9qPpciC82EJzYszvfdmFA=; b=eSUnaT566/x49iRRLUCujilnteS/u3fkvTkcK6liMjmMW6EhWYamFjsoKwefweQZ3X PNFX6Iqa/0viCPZx1OcA/7AH3lnpHaHB+BbnTREW8vwDhPEBgmJvKFV3qbLrWXHiiNr7 mN8gHOlVlAr7GjgFDTrYrwSwa6bS+HVuPr7Hh9iEtE9i8bK0o2NgA+xbiyCgLe6/5ocU wyFhRsLg9fQt6x52HuiP0QgVTLc/LBPzENZXDSSQ68DBWWAR7QW+airtwISIutepCxn0 EpEqpmlTZFKyPt9mhef6iO9KAjUKibemCaOPrm2ZyriaUBBRCkx2cj5xZ8KCfReHH7mT 1l0A== X-Gm-Message-State: AOAM532CJhD4zKW6Vw3x/iomV33EE2K5URDwMzHoRPZtq6PRqY8zL1q6 JJUIfr0Z4+aMJfxThWj3BEboiRTTfxgNkfW1 X-Google-Smtp-Source: ABdhPJxRNih9lTiflufC6ruR14xKFZ8LLzIjQ/c/TE4fr504USJWnM2OLVQpKhpC8KNG6AASKwXWGQ== X-Received: by 2002:ac8:120d:: with SMTP id x13mr4514572qti.141.1607019849255; Thu, 03 Dec 2020 10:24:09 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id o16sm2326621qkg.27.2020.12.03.10.24.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:08 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 39/53] btrfs: handle btrfs_search_slot failure in replace_path Date: Thu, 3 Dec 2020 13:22:45 -0500 Message-Id: <99645d064db65ba5a02263f49e1779ba025da8b2.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org This can fail for any number of reasons, why bring the whole box down with it? Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 5a654037795b..6ce46977ec05 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1314,7 +1314,8 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, path->lowest_level = level; ret = btrfs_search_slot(trans, src, &key, path, 0, 1); path->lowest_level = 0; - BUG_ON(ret); + if (ret) + break; /* * Info qgroup to trace both subtrees. From patchwork Thu Dec 3 18:22:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949353 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BCE3FC4167B for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 73AD22085B for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502024AbgLCSZM (ORCPT ); Thu, 3 Dec 2020 13:25:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731614AbgLCSZK (ORCPT ); Thu, 3 Dec 2020 13:25:10 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3EA3BC094258 for ; Thu, 3 Dec 2020 10:24:12 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id d9so3003268qke.8 for ; Thu, 03 Dec 2020 10:24:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RBEbE2A955QTpSYe7t3gEC9f7kk4UL/5SdXRttPLrCs=; b=DWQeIK6U0kmgeIJxpQcQaBFWQqannyHKqRfVksxLyTLUfJRlZbbSZgk4g4VC2Nup5+ sla4TYtDpwgt7Z66Kml5uJ+IFun+P5nGU2ra+5tuNIa/qDfqdI29NGJu5ml/oTNVSpV+ hQ7/GX2K9cYPWxceC3BII3CiudX7NOymPwVkwmUcmP+yZrDfaS6/CGAe8sflwg5MfCkg RydizqCW4ZRho/OfTP/y3v+jCCt07q9vRZTDVAp9tQ94deQDYXjomMrEqPtk0QrKX2Pi 7m8YEoqJjUNNuAlFpIz80YTtFwgQX8+FRfs5qbGD9M24W+ipSOgMstH3IfuPKQcN+iQI KkPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RBEbE2A955QTpSYe7t3gEC9f7kk4UL/5SdXRttPLrCs=; b=AbZf/ngvhSLGLQHg0ni8I4cedheUgh1WkfXrlMv4MuTpOJWnDn5ABj7uSRyo6agAtB AzF6cAJp1z6bkxIcLiR+QNLtf6KPYn9mFgBJo0lzaDWECqP7jQPvZkhaBMNM16cxjt7i AWjiYuqhjd1nfE/Z//yDE9bFN+cLtgXobRYKXRV0hl/62nCIVXUX7z5pAO8P5HKipSWx thoI8JEAsNsIqremMHU7mTFcNp8aP6SFeJBUuwo6KU6QDffW3IXSbQE6ThhrRahYRDUO Wvb2PKig87ABvV5Saa2QG+w8MGoGzyFXbgMebh/j0M5poTgHgX/tw3cT1yob3RqItMrW XObQ== X-Gm-Message-State: AOAM533MA3rKzJZmzKAKYva3TGIvEI3BDUnKK/+0qL//dWo/BrydWkvH SjoUmxJvtX+3rS0gPKCINZMEFeALEuEdRsjT X-Google-Smtp-Source: ABdhPJwnIE/aXD2wPnzZkr87z+vspvOPj1XDhDOwmlh28pjb9vgxZfbBAqd3k/dk0w/Ys6fDexaoXA== X-Received: by 2002:a37:30c:: with SMTP id 12mr4243071qkd.110.1607019851168; Thu, 03 Dec 2020 10:24:11 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id h26sm1557275qtq.18.2020.12.03.10.24.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:10 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 40/53] btrfs: handle errors in reference count manipulation in replace_path Date: Thu, 3 Dec 2020 13:22:46 -0500 Message-Id: <8ea6059d619b11a0d4bd6bda7f8efeeb14fc2292.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org If any of the reference count manipulation stuff fails in replace_path we need to abort the transaction, as we've modified the blocks already. We can simply break at this point and everything will be cleaned up. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 6ce46977ec05..e025cb052d77 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1355,27 +1355,39 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc, ref.skip_qgroup = true; btrfs_init_tree_ref(&ref, level - 1, src->root_key.objectid); ret = btrfs_inc_extent_ref(trans, &ref); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + break; + } btrfs_init_generic_ref(&ref, BTRFS_ADD_DELAYED_REF, new_bytenr, blocksize, 0); ref.skip_qgroup = true; btrfs_init_tree_ref(&ref, level - 1, dest->root_key.objectid); ret = btrfs_inc_extent_ref(trans, &ref); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + break; + } btrfs_init_generic_ref(&ref, BTRFS_DROP_DELAYED_REF, new_bytenr, blocksize, path->nodes[level]->start); btrfs_init_tree_ref(&ref, level - 1, src->root_key.objectid); ref.skip_qgroup = true; ret = btrfs_free_extent(trans, &ref); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + break; + } btrfs_init_generic_ref(&ref, BTRFS_DROP_DELAYED_REF, old_bytenr, blocksize, 0); btrfs_init_tree_ref(&ref, level - 1, dest->root_key.objectid); ref.skip_qgroup = true; ret = btrfs_free_extent(trans, &ref); - BUG_ON(ret); + if (ret) { + btrfs_abort_transaction(trans, ret); + break; + } btrfs_unlock_up_safe(path, 0); From patchwork Thu Dec 3 18:22:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949359 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57E5BC4361A for ; Thu, 3 Dec 2020 18:26:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 01449207D0 for ; Thu, 3 Dec 2020 18:26:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502040AbgLCSZQ (ORCPT ); Thu, 3 Dec 2020 13:25:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729222AbgLCSZK (ORCPT ); Thu, 3 Dec 2020 13:25:10 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4FD7C094259 for ; Thu, 3 Dec 2020 10:24:13 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id es6so1429804qvb.7 for ; Thu, 03 Dec 2020 10:24:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=BQnifcFL/WPLj7otSCT+NzpZ09jzZaVeOVpCVlLc5Lw=; b=U1a30Vu6H5XWzOKuYyqBSTvqSVvKuifMsn6qjQd7fP3LaXzTWNL3sjLgjGsd8YXf3C wGE5C5m5EjULIN0ObFrFRE1N53Kcl8c94i+hXCUFBSw6Y20JImC+K7eV4uxuKoRNfVEA k9ohTcOiz1W6V7qRrmunob6BgIo3VAlfVaCc+nIsV2+lEwUBE6BmuOav7Hhao5TMCEBI Z9QKnBnsjD+4TKqZ4lfwfeOGZuH99PRtqpqQdWXa73U0PP7SU9EdTWaFVS9NGk/j+go8 WcTQZV5WSalEUT0pUCk4IIb3Co6GdzpURYMda/08bhnPPSLae0tSLdldEsmhLMm9lD6w LlZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BQnifcFL/WPLj7otSCT+NzpZ09jzZaVeOVpCVlLc5Lw=; b=eXraMwpweyeiFkpEJitVa5WQ6si/duE0ucxvbDTN/57ZjB501dKRtYdSurM0S8lMGC mE7Y7e+7moCmTkTAzH2hFG5egOzZKQfPoActIPJJUu6Gm5RS7SGyOftILazZL430b4fK pszQxhjuZSdwnUEgg1/LS54tSiPGtaOOFInu4VAVdiJG5CmGCzBn+0s/dQUk93hexcMl rYBhEXlyG51kmZKZW7c6ycA4Ozpd90zhwfEVmG30zpJYW48x30PmjBOaLEjGW46YuknZ I32TmfN8eFfsE4LFeOPfs4PwaGBUWixMVS0cl20pCYNAaVmh3aWJwU3hwEbuYy42X/Do b7eA== X-Gm-Message-State: AOAM533ibuQb6DwKI6g2Xv+eqr6dg5NmWv12fRw9aUg4O3vGWoTLXgle b2TOauLkfPmlWahPFOJF62WD7pDTue0K8ohw X-Google-Smtp-Source: ABdhPJzwre8AMWgVjzksZXht7OYsDiquia8teMhN8wVrjA+wPmyBL/9+ZGbjHXwTu7HJRLRGwHX7dA== X-Received: by 2002:ad4:42c8:: with SMTP id f8mr154450qvr.29.1607019852883; Thu, 03 Dec 2020 10:24:12 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id g11sm2207667qkk.72.2020.12.03.10.24.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:12 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 41/53] btrfs: handle extent reference errors in do_relocation Date: Thu, 3 Dec 2020 13:22:47 -0500 Message-Id: <8fb9245c24a498f97b161ad1113cd1f830f205a6.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We can already deal with errors appropriately from do_relocation, simply handle any errors that come from changing the refs at this point cleanly. We have to abort the transaction if we fail here as we've modified metadata at this point. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index e025cb052d77..bff7e99f3654 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2426,10 +2426,11 @@ static int do_relocation(struct btrfs_trans_handle *trans, btrfs_init_tree_ref(&ref, node->level, btrfs_header_owner(upper->eb)); ret = btrfs_inc_extent_ref(trans, &ref); - BUG_ON(ret); - - ret = btrfs_drop_subtree(trans, root, eb, upper->eb); - BUG_ON(ret); + if (!ret) + ret = btrfs_drop_subtree(trans, root, eb, + upper->eb); + if (ret) + btrfs_abort_transaction(trans, ret); } next: if (!upper->pending) From patchwork Thu Dec 3 18:22:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949313 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25067C2BBCD for ; Thu, 3 Dec 2020 18:25:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DD35B2085B for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502027AbgLCSZN (ORCPT ); Thu, 3 Dec 2020 13:25:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48518 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502016AbgLCSZL (ORCPT ); Thu, 3 Dec 2020 13:25:11 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E1B1C09425A for ; Thu, 3 Dec 2020 10:24:15 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id y197so3008484qkb.7 for ; Thu, 03 Dec 2020 10:24:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=L8fTlPURwi1njot0TAiCWtZWFXAYhGZrv+pY5V3rdfo=; b=Kaq3kH3pylNJsJdGLynPb3XP6zE7cKVRZ2hM2FtLh/BHYxc2Dk6+Auh8d1G7z23Mx+ xLlF0ABODdpYXeRpBdW3R4CKhZDhVinpKf3cBl9CW4ZWQoahDz6HjujZ56cYbxzn+N3X 4U0goJKEOlno1COKs92M/8CjSiuHZQQg22LhIuAZxvkQPZG1vumQyq6930LPyhHqDpO9 yIajFvD+kDxqw5StIhDqMvzZx44x5r8ww3W3t3GhBmytERmfrvK5tw0nw/whs0C7lejb I5I0Wqw7SKgB5lICLks0qvX3LwZrSBrFPmD26gsIAlPvt5/M2RnRS4jOvZps92Uli1GT sH9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L8fTlPURwi1njot0TAiCWtZWFXAYhGZrv+pY5V3rdfo=; b=DmT+hOjwvispu51kNGpbvJYbIqJ1Q+BS6CYWyKrG7uy/R3h7huJJBsMsMnuxuB/5Rl +Pku/pcZ6iFCjoRMHhC3Sco3B2+1iVDVsQh7TqFEEw0dWqASjDDIqN3lN4ei1f/hc40a JICGsfNmwnqD4LL/rMMIXz1hFuu9w1Uz6V5wRKppShaR93fVTW14lzPRz2BxaSY7BC9O mwxhVHDFnGq2oB9XmqxpbIAyZF66qhAUsKb3q7oN3YKpNCx+pm2RTOz/krIQ+m30f3mK 7QwvuadpS3vAuQecHKyqjlFxG5wsPA5yxCscrZ72KwrJBVgCjKZeXLYGrbjgGy0qg26r Zo5A== X-Gm-Message-State: AOAM531m8Z2hdphuR/EZHrAoEHPZ7MWa7DBq0lwoIqpONLjPGZGRQUjS okGjH93d8mtXG/kMkg65tvgNG+Judcx3Ucsx X-Google-Smtp-Source: ABdhPJw5pniRy+OwhSYO8aE83DYp61JA5AB5PH4hRJJgW/Tan4IXlreMzni+lcEZKkngqkVSD+DnCw== X-Received: by 2002:a05:620a:1590:: with SMTP id d16mr4210743qkk.88.1607019854621; Thu, 03 Dec 2020 10:24:14 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y192sm2354375qkb.12.2020.12.03.10.24.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:13 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 42/53] btrfs: check for BTRFS_BLOCK_FLAG_FULL_BACKREF being set improperly Date: Thu, 3 Dec 2020 13:22:48 -0500 Message-Id: <07199465ce4388a84f3aa4371ecea64f8305d1b2.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We need to validate that a data extent item does not have the FULL_BACKREF flag set on it's flags. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/tree-checker.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c index 028e733e42f3..39714aeb9b36 100644 --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c @@ -1283,6 +1283,11 @@ static int check_extent_item(struct extent_buffer *leaf, key->offset, fs_info->sectorsize); return -EUCLEAN; } + if (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) { + extent_err(leaf, slot, + "invalid extent flag, data has full backref set"); + return -EUCLEAN; + } } ptr = (unsigned long)(struct btrfs_extent_item *)(ei + 1); From patchwork Thu Dec 3 18:22:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949341 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3D9DC0018C for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A0E07208A9 for ; Thu, 3 Dec 2020 18:25:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502029AbgLCSZN (ORCPT ); Thu, 3 Dec 2020 13:25:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502021AbgLCSZL (ORCPT ); Thu, 3 Dec 2020 13:25:11 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61C34C08E85E for ; Thu, 3 Dec 2020 10:24:17 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id dm12so1443076qvb.3 for ; Thu, 03 Dec 2020 10:24:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tOdTaGLj82z5oYT5RFXY3u1vGDFWSx78SY5hlvg+0k0=; b=ndB3eegJkfZOZ1c6g6D6WcLhEDlbIbCWP/4CSYCxIKF5pRfke7wNz+84fHf7HJDSXx QCNxQUwnF3QMRCSsLDZGKPcgCXM62vhVU/bG6FMcHE4ktemZuXO0JkkIvBLWBtJxTuWG AR2zKHvrzdaMogCUqk8+18kLonVRXs9zwxbYoR+qakXNBMQkYh0gOSVMkRI6J7nm8N4W /4re+UK1UQxDCnmkuZPGoG9a+Qg8DqcxG/qjbwSuAorRQJ81jz95oIapESQMe99iHzEU L0e2ZyKNhUF86FJRE6XYPrTm+Zt7GDPJd+b2ya08G63fIN1R6K2XncFQonsq6mWFkaoU wa+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tOdTaGLj82z5oYT5RFXY3u1vGDFWSx78SY5hlvg+0k0=; b=VfyX0MugFmAziXYmyFagXuD73MFk0jxm1CO/A/NFHox0NfqM6i7uUPTizGZOG55aX1 rxp0IG21qGt6p1rTFg/awK4d44BQEX018U/J0B2rQD1sHwwHznRIamwvmKOP/h9NjYRU QzI4PeWY42td6fEqjvD0GIcjefZ9GtSQRkntb0vkDn0MT/SfVwp/qU2/cuQQlzKMx59e UQ4CigVbld41PvAlkSA+vR24GaM15nDwJtqOF8evecfLUmG6cQemLwqMBkbwheKLX07a 85nhiuzyAwJ6bosd91YG9mU3jtbGBto8Y/FPItIQSIWJHKvko2hch+woDZx5j2jMOEiz hPHQ== X-Gm-Message-State: AOAM5318SdCOuo9rnekuI/0nQuT4thI80/EZ1O5OptLIfaEk3yjwJ8DJ yvNcPuhrdsgA1bqqBRNbjC2DfkGBDMD38kJE X-Google-Smtp-Source: ABdhPJzOQmIqkQKvouCECMfxvN3UZExouTRKl1MtofU+ORebJVpVVaxuLutGvfwRhhWCqrkmMAi9MA== X-Received: by 2002:ad4:4e13:: with SMTP id dl19mr276239qvb.53.1607019856307; Thu, 03 Dec 2020 10:24:16 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id w9sm2041444qti.45.2020.12.03.10.24.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:15 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 43/53] btrfs: remove the extent item sanity checks in relocate_block_group Date: Thu, 3 Dec 2020 13:22:49 -0500 Message-Id: <07befea169b06441a736021da2b5ba4d8e295d6d.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org These checks are all taken care of for us by the tree checker code. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index bff7e99f3654..5227b4f7d115 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3363,20 +3363,6 @@ static void unset_reloc_control(struct reloc_control *rc) mutex_unlock(&fs_info->reloc_mutex); } -static int check_extent_flags(u64 flags) -{ - if ((flags & BTRFS_EXTENT_FLAG_DATA) && - (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)) - return 1; - if (!(flags & BTRFS_EXTENT_FLAG_DATA) && - !(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK)) - return 1; - if ((flags & BTRFS_EXTENT_FLAG_DATA) && - (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) - return 1; - return 0; -} - static noinline_for_stack int prepare_to_relocate(struct reloc_control *rc) { @@ -3428,7 +3414,6 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) struct btrfs_path *path; struct btrfs_extent_item *ei; u64 flags; - u32 item_size; int ret; int err = 0; int progress = 0; @@ -3477,19 +3462,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) ei = btrfs_item_ptr(path->nodes[0], path->slots[0], struct btrfs_extent_item); - item_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]); - if (item_size >= sizeof(*ei)) { - flags = btrfs_extent_flags(path->nodes[0], ei); - ret = check_extent_flags(flags); - BUG_ON(ret); - } else if (unlikely(item_size == sizeof(struct btrfs_extent_item_v0))) { - err = -EINVAL; - btrfs_print_v0_err(trans->fs_info); - btrfs_abort_transaction(trans, err); - break; - } else { - BUG(); - } + flags = btrfs_extent_flags(path->nodes[0], ei); if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { ret = add_tree_block(rc, &key, path, &blocks); From patchwork Thu Dec 3 18:22:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949357 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6C6EC35270 for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 753A02085B for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729096AbgLCSZ0 (ORCPT ); Thu, 3 Dec 2020 13:25:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502052AbgLCSZT (ORCPT ); Thu, 3 Dec 2020 13:25:19 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12A20C09425B for ; Thu, 3 Dec 2020 10:24:19 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id r6so2068409qtm.3 for ; Thu, 03 Dec 2020 10:24:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=VtoHf3L4vkokxUxrJ85QLQy4x/t7HOVGr2Oo/WULWZo=; b=r4ow88xB41XvtXOssoAm3dkuOkbGu7MB0BFEN43nz4H8Bsgw8NFbonYnBawl2nhSDF wYp5QdLuuhwvhpNTIv3VJNL/rSCU7X1CvHOb/p70/rYYW3OTDjF86G9maitgM3xt/G1o PnwEJPqFIUrEYCY2e1ugdIsnPwgKl5v01rvU9ReTxGQ57iiOLUWwN/UUPcmh19ZZPhqm IUOnLGUpjBZ9ahHVns44BNvBgVk2UOBtgAHJh+kCJFlxhF4G8HpLnHfZsBXawgY+c9Qn a7kubeHLFml3gOoAmyTtfZQvq54gv5yd4agz/VpiclfW0f8fMrhBjWoEJiYQeqqgdzJX 8NGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VtoHf3L4vkokxUxrJ85QLQy4x/t7HOVGr2Oo/WULWZo=; b=FgL7cRJiyM2/eNsJABTMil0dTlkMQv2jsWaDAM0IBidIJ8vlamoZQFwRtz+Mg1KyfH F2PfsnibeZZbuBqB4P05eM/TpCcVhM3rRfPFN/xr7Y0mg1x9fB/89OU6PJ8p8RLdMjT1 QKaE0gp341cZuZSOzDyve/FfJEIsm82t9v6Zy90Cqt4C6mkBjYqWNuEgqJltxImiCKvU JfUCtRQ4nehkkSzDIP/U6nuQbcPHMpd+in9MI1VTo4b/Rkkpc/OTN7vGeA0cW3Yz5i1o 3Nw26Tk7AfgBB54xk1fimmDwmvuc07NhllW0MO+BvvLjDAlchVIzI8mnYOzdiAJhXNba 2Svg== X-Gm-Message-State: AOAM531PLcNbBCjUTjghZgKp5ZTsBXN3Tuxkbq9Ql5lAx/3I8Ag6zCpK ZBPH7Wn+6Hyxg7USZxQTlor48RcXfxK7UKS4 X-Google-Smtp-Source: ABdhPJwe99/y0wjYpSjkFJkRkGbsmay+LNQ7nbBLV8BtResmDCecftQ650Sk6Sn4qcAkrTfZnbIDfg== X-Received: by 2002:ac8:7559:: with SMTP id b25mr4608852qtr.51.1607019857945; Thu, 03 Dec 2020 10:24:17 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id v204sm2307138qka.4.2020.12.03.10.24.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:17 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 44/53] btrfs: do proper error handling in create_reloc_inode Date: Thu, 3 Dec 2020 13:22:50 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We already handle some errors in this function, and the callers do the correct error handling, so clean up the rest of the function to do the appropriate error handling. There's a little extra work that needs to be done here, as we create the inode item before we create the orphan item. We could potentially add the orphan item, but if we failed to create the inode item we would have to abort the transaction. Instead add a helper to delete the inode item we created in the case that we're unable to look up the inode (this would likely be caused by an ENOMEM), which if it succeeds means we can avoid a transaction abort in this particular error case. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 5227b4f7d115..05b42a559da3 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3601,6 +3601,35 @@ static int __insert_orphan_inode(struct btrfs_trans_handle *trans, return ret; } +static void delete_orphan_inode(struct btrfs_trans_handle *trans, + struct btrfs_root *root, u64 objectid) +{ + struct btrfs_path *path; + struct btrfs_key key; + int ret = 0; + + path = btrfs_alloc_path(); + if (!path) { + ret = -ENOMEM; + goto out; + } + + key.objectid = objectid; + key.type = BTRFS_INODE_ITEM_KEY; + key.offset = 0; + ret = btrfs_search_slot(trans, root, &key, path, -1, 1); + if (ret) { + if (ret > 0) + ret = -ENOENT; + goto out; + } + ret = btrfs_del_item(trans, root, path); +out: + if (ret) + btrfs_abort_transaction(trans, ret); + btrfs_free_path(path); +} + /* * helper to create inode for data relocation. * the inode is in data relocation tree and its link count is 0 @@ -3627,10 +3656,16 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, goto out; err = __insert_orphan_inode(trans, root, objectid); - BUG_ON(err); + if (err) + goto out; inode = btrfs_iget(fs_info->sb, objectid, root); - BUG_ON(IS_ERR(inode)); + if (IS_ERR(inode)) { + delete_orphan_inode(trans, root, objectid); + err = PTR_ERR(inode); + inode = NULL; + goto out; + } BTRFS_I(inode)->index_cnt = group->start; err = btrfs_orphan_add(trans, BTRFS_I(inode)); From patchwork Thu Dec 3 18:22:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949331 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7B40BC3526F for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 45943207D0 for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502075AbgLCSZZ (ORCPT ); Thu, 3 Dec 2020 13:25:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502053AbgLCSZT (ORCPT ); Thu, 3 Dec 2020 13:25:19 -0500 Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB2FEC09425C for ; Thu, 3 Dec 2020 10:24:20 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id p12so2052472qtp.7 for ; Thu, 03 Dec 2020 10:24:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qhGtkRnXplYY+CEDULNniNTVseakGw1lct8t29E1QDA=; b=kdd6AxO4gT3coIcbiJ+bPwYlHRMSNi+QTPFbwmdj1anvLOEYmkxIjQFqEcXVfoGkb2 tvtonGD/auqoKBD2lTdz9AbarBXD0hI5vYEb8j8CbE3GSgcmkFDRC2kwyxJljNQZ1MXr MX+kk8H6/6T7dM4PE9zVUCs+GrtVeYZG1cGkapZN1CVNU9Dl9gNgGRki8Bws+nU1qPSR wgKsDR86Epa+EwnkgzQTtWfKjZzdu6Y9WQ068kKo36c9PW/OFuO+eFPlf2sioCEeXHT1 j4dBU6QCToIMkb2eIrTZsJeQbQwqRLPSVzFZl5+US/GHH/BL5Cu9vvoKNxRmD4qQXo0S gEig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qhGtkRnXplYY+CEDULNniNTVseakGw1lct8t29E1QDA=; b=Hi2+TOC42hWS06f6Nnt2QOopOHs8k8GETiwt2hUzrBESOW6RdViJ1b+TaV6bd718iK OBUGYzTYjF8KLB0OnI7gQRw3YTexSzmrOS7KtYPkEFufwc8Lc+DUlvHhl/dDNxiJSljT fzoBXqvsJMjNZJgSsuFYQ9OSXhfrBhnao3rVh/RD5zuQlR/SJ8LSkRSEMYOhPiBDO/pv cN+avcFHkPXOMy/QpTmcROTLGN8PqkYkZs5c0F7U0kMMJ4ZP7MzkcjGnBWKoSTKzaX0C lxUjlaWwdGf3toVZEK5/q7UUdu1wRin5CU6EBinGWr2iNhxu0dpumOl54YboNKw1zdfE mZFQ== X-Gm-Message-State: AOAM530yDmZfUes4wDuTLy5rL/B49g/cz5+tHgBgMCZGz3TD1nU9ZvNL BuyVtmS8OqjqHVIGy7TSNmyn51bP5dX4ilY3 X-Google-Smtp-Source: ABdhPJxdiyeaY5XrY7Y6KHfpRqGaJkoDxBjRoWG2TvYwb2SJBmEEU58fBuXsCJ7BABzkePLHIW0fBg== X-Received: by 2002:aed:3144:: with SMTP id 62mr4558974qtg.342.1607019859565; Thu, 03 Dec 2020 10:24:19 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id d12sm1936845qtp.77.2020.12.03.10.24.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:19 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 45/53] btrfs: handle __add_reloc_root failures in btrfs_recover_relocation Date: Thu, 3 Dec 2020 13:22:51 -0500 Message-Id: <46761d6e45f65747f4f927c33e34d3c55b46fdea.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We can already handle errors appropriately from this function, deal with an error coming from __add_reloc_root appropriately. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 05b42a559da3..a2900dc71c72 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4007,7 +4007,12 @@ int btrfs_recover_relocation(struct btrfs_root *root) } err = __add_reloc_root(reloc_root); - BUG_ON(err < 0); /* -ENOMEM or logic error */ + if (err) { + list_add_tail(&reloc_root->root_list, &reloc_roots); + btrfs_put_root(fs_root); + btrfs_end_transaction(trans); + goto out_unset; + } fs_root->reloc_root = btrfs_grab_root(reloc_root); btrfs_put_root(fs_root); } @@ -4222,7 +4227,10 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, return PTR_ERR(reloc_root); ret = __add_reloc_root(reloc_root); - BUG_ON(ret < 0); + if (ret) { + btrfs_put_root(reloc_root); + return ret; + } new_root->reloc_root = btrfs_grab_root(reloc_root); if (rc->create_reloc_tree) From patchwork Thu Dec 3 18:22:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949333 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A243C3526A for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4E8BA208A9 for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502060AbgLCSZV (ORCPT ); Thu, 3 Dec 2020 13:25:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502050AbgLCSZR (ORCPT ); Thu, 3 Dec 2020 13:25:17 -0500 Received: from mail-qv1-xf42.google.com (mail-qv1-xf42.google.com [IPv6:2607:f8b0:4864:20::f42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 48D3BC09425D for ; Thu, 3 Dec 2020 10:24:22 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id x13so1429557qvk.8 for ; Thu, 03 Dec 2020 10:24:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sGsHCr9+jjzby7vaZe+QNyu0SX+RrI2Eyp5IdEhxAGw=; b=ULaMGP0dscMX4j9VBW/y3YksTjNiv6MqD+9N9H2yxjF+Qewx3B88jgyfFWt3zYp3Yt gaKMz9DLkSpvHI2tkVG2Dfd+sdafQZI0TwpNAGeXUE+/iQ4Nnb8l549byzUbz40cJy3V /HRvooyQMw4tggx+vNFKWcqYtpb7Nnp+T0PuoT7cfFSpKj5OhdHoBdHfn8NqialYnW69 uHFcjXKEOmD6W1bp9g75zj3Lki8zC5TZ2ashLff4Y42Cz/6AvNbihR69oPMOwyxYx0yi yLw6JNMADh/0oSxX83khU64w1sSxNLcqzibggdqYEIwEMY9ls4/T2Z1/2LSpK9hixrVK +Oag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sGsHCr9+jjzby7vaZe+QNyu0SX+RrI2Eyp5IdEhxAGw=; b=gcASyDAO14AqT4XJAWS/Zr16T6gj1wx/Y6wkAmyKiR3pvUPeIDj+MT5c4zSu2jXUB4 +Nbo+Z5KMf9rZZIayYi/QpxX+XTMGvujPGk9NbreL5msVs35+IklM3DzZyUwplH4oddM aBuh2UIvztjueqZqgC1yR2whKD3UnqgxogW9gi7JLKmpo0IG68TXvuwv3stnjcU0clKr QR8LaUtk/IFhsoROkF4Ayj11pcYq+GZpX75Ea3h0KCJplbBlUr5m/ZRjLiljj2vaa6JA RKGBIwMI8IezQxvzNnROXQy/82VgmWvKlRgBF2AGOff/PXLVOJVF1WH+TWpTD+L7zr1x +p4w== X-Gm-Message-State: AOAM531i0Mr324Qf34XlmsccNCVlU2mnG3/151IrdjSP0nlxOnY8Azr7 RfhXHuKTWRKxoLZiGINo7bxnzPUEK203SCAM X-Google-Smtp-Source: ABdhPJwAsPYHwjgVuKK9VeFdxnUcaV9O74Db1PUaNP+ighekBAO0H8ZBit4JrM7vLK1IDs0oTm//Zw== X-Received: by 2002:ad4:5424:: with SMTP id g4mr187409qvt.56.1607019861235; Thu, 03 Dec 2020 10:24:21 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id u4sm1855687qtv.49.2020.12.03.10.24.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:20 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 46/53] btrfs: cleanup error handling in prepare_to_merge Date: Thu, 3 Dec 2020 13:22:52 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org This probably can't happen even with a corrupt file system, because we would have failed much earlier on than here. However there's no reason we can't just check and bail out as appropriate, so do that and convert the correctness BUG_ON() to an ASSERT(). Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index a2900dc71c72..02760544cba1 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1870,8 +1870,14 @@ int prepare_to_merge(struct reloc_control *rc, int err) root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, false); - BUG_ON(IS_ERR(root)); - BUG_ON(root->reloc_root != reloc_root); + if (IS_ERR(root)) { + list_add(&reloc_root->root_list, &reloc_roots); + btrfs_abort_transaction(trans, (int)PTR_ERR(root)); + if (!err) + err = PTR_ERR(root); + break; + } + ASSERT(root->reloc_root == reloc_root); /* * set reference count to 1, so btrfs_recover_relocation From patchwork Thu Dec 3 18:22:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949365 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51F48C18E57 for ; Thu, 3 Dec 2020 18:26:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 19788207D0 for ; Thu, 3 Dec 2020 18:26:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502108AbgLCSZh (ORCPT ); Thu, 3 Dec 2020 13:25:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502068AbgLCSZX (ORCPT ); Thu, 3 Dec 2020 13:25:23 -0500 Received: from mail-qv1-xf43.google.com (mail-qv1-xf43.google.com [IPv6:2607:f8b0:4864:20::f43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 000F3C09425E for ; Thu, 3 Dec 2020 10:24:23 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id ek7so1435642qvb.6 for ; Thu, 03 Dec 2020 10:24:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LC9b9O/sOio0l1Yw+TXFj2SCmB30kfCgWdt89mNluaw=; b=S6zum/F8Ygh9Nsyejy69FQGcg9yBOWJeXMiSPp8/aUQaUzRq6izvbLiE4Ecd7iQwbe UEcvfCi6rDPd6KfXHa68HWGoJji9kh2zgCTjb51IbhMIomCWg3Bwoc4j49cWtF5/Kdv6 r2K1OY1uRy2zJnRlnRvy8ptH2v8gBwql2G8YGIJoS9rPDLwjkteM/bvRIEC7k/vagset kEgYIeWUaA1FBd5Y//jvASkMEF48AjMZUZC0I56mH7nHrNDji6n+XgrSfYcLeG/tCJF9 MYr+A+OGXbzcvMQvdbIYFlNuqLVUO2Aob1GBOdl9AJ8MvHN1/uSCVXPurBq6GRtgEoj/ nU4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LC9b9O/sOio0l1Yw+TXFj2SCmB30kfCgWdt89mNluaw=; b=Jshyz+7W9zab2A1PDqJYT1KjUH5BKfUDb19La0HhSVLpuqrIsh+1nerrldF3z6Z9k8 B8zUTPy8+chFbI4jcncu4EzoW7yczB9JxoRbXHlk8hpDUxdvjz6+9BaP6ntdy1CN058J 9QOBA+Hr+ZACpD+vfnA2gO7VKCJm50DGQZfb0c8QqJq9HMuwLJSzVCRPxLWhrF79QnSf wrxvpfQs7dHhyDd6uEw/u3C4B9VivjmPxCgFrjkUUrqGOPt2BaM6TvapESfv3O1ZjpHL /nn+TYmNaw9wNTq1JH5pJSR3acEy76w75bnYHRSuJO5iUIhX3k04kFnXrV2MF2rO99xM Qw8Q== X-Gm-Message-State: AOAM532Epz2uY6nBqNwrqPdqS3zGH4u/Ce/E9uq5PD753rGR5kQ1ijsh MuDxQowxySEKsnbfAYFehkxotL8lPRF117vE X-Google-Smtp-Source: ABdhPJyWztT/VL31SBXUACRhoVt0G5jGfHUzJ3msafCiZlQEUxtKvvGlfrK6RvAgkbWsAwGDKGHEtA== X-Received: by 2002:ad4:4ea2:: with SMTP id ed2mr266727qvb.59.1607019862888; Thu, 03 Dec 2020 10:24:22 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id j13sm2214617qtc.81.2020.12.03.10.24.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:22 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 47/53] btrfs: handle extent corruption with select_one_root properly Date: Thu, 3 Dec 2020 13:22:53 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org In corruption cases we could have paths from a block up to no root at all, and thus we'll BUG_ON(!root) in select_one_root. Handle this by adding an ASSERT() for developers, and returning an error for normal users. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 02760544cba1..511cb7c31328 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2193,7 +2193,17 @@ struct btrfs_root *select_one_root(struct btrfs_backref_node *node) cond_resched(); next = walk_up_backref(next, edges, &index); root = next->root; - BUG_ON(!root); + + /* + * This can occur if we have incomplete extent refs leading all + * the way up a particular path, in this case return -EUCLEAN. + * However leave as an ASSERT() for developers, because it could + * indicate a bug in the backref code. + */ + if (!root) { + ASSERT(0); + return ERR_PTR(-EUCLEAN); + } /* No other choice for non-shareable tree */ if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) @@ -2591,8 +2601,12 @@ static int relocate_tree_block(struct btrfs_trans_handle *trans, BUG_ON(node->processed); root = select_one_root(node); - if (root == ERR_PTR(-ENOENT)) { - update_processed_blocks(rc, node); + if (IS_ERR(root)) { + ret = PTR_ERR(root); + if (ret == -ENOENT) { + ret = 0; + update_processed_blocks(rc, node); + } goto out; } From patchwork Thu Dec 3 18:22:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949329 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3F0CC0007A for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AEB71221E3 for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502067AbgLCSZW (ORCPT ); Thu, 3 Dec 2020 13:25:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502062AbgLCSZV (ORCPT ); Thu, 3 Dec 2020 13:25:21 -0500 Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8C98EC09425F for ; Thu, 3 Dec 2020 10:24:25 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id 1so3057644qka.0 for ; Thu, 03 Dec 2020 10:24:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0vlA2+6ci/9kPU/ENKvxuZ7QCJG1m9/oR5ZiPrjIAHg=; b=ZfGLqHj/RYRCuVi69q+7Q4VXCgANHm49BdPGAxUsrSxM+xXOvGsg+II3wddFGIWrdc SCcLSQgQ5tYQVjjY8jQfqb3YyuZ/n+06+d707P/SQWLSJfgIVXUxvDKT+zv1TuLiQx4h B8SKJ53DyWYd64yASgGHyHUZsGyZfm+ejLtKZFDYahSBAqC9l7McP2DoVMhHVQBVgf5c P0KfylsWc998YjnTZ9Xhh1+XIhb4A60NC4PZ0TqnUeRMvsKDAmsAu1IqxHKwITQIU8PW ssGL032HH1H6MnVknaxXRqHo9B3oJjFyiggfdyxAWAFVSD0g2nKqujrb/FqcJ5k9YUQu 2iIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0vlA2+6ci/9kPU/ENKvxuZ7QCJG1m9/oR5ZiPrjIAHg=; b=o9SR6434INxb1eAE5xqIbLvETlJeBYHzweuflm8jB6pKNWWQtNpOdSofqNSMlhZZvH GWDQ4P3XRO86tgHxP5tMl+J/Uu2PNh9cWq4sSXqFgV7yhID+8ov1OoNxoL2bOS8e9pUE aJ1AVrbWcf7zPvyUgZ/GTpW15ilpI5A40PSbvtEW8Wh5v4LSx1NKFycJK3ikho6ChQ7f yPRGpp1/u6+4CGGEPlqFRnRHlLrWkDPz5rM3Napp/93BxuDAd/9gGxYL3wd/npde7VjO AteH8dKVoj3svr0sFWpwtRrjpUAWDKrHD4HrNQtlW9rlKeiv4/IFoV3gMdiCbemBVYbd b/5g== X-Gm-Message-State: AOAM531nTke0m5+MpKDi8E3NM8936nO03okfXjEEnXe2dodIKJfAbiNx 6qRq8GXQpLpHxfaggFOuFjysV5ZzKYvdkSWp X-Google-Smtp-Source: ABdhPJxM7d9VPaWz+kY1kWOiEkw2kUegJSEsz44MfwQxCvGNt3TkljT+Mgoz/86xsizHTFtYyzww4g== X-Received: by 2002:a37:30c:: with SMTP id 12mr4244087qkd.110.1607019864484; Thu, 03 Dec 2020 10:24:24 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id b73sm2287348qkc.87.2020.12.03.10.24.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:23 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 48/53] btrfs: do proper error handling in merge_reloc_roots Date: Thu, 3 Dec 2020 13:22:54 -0500 Message-Id: <9ad2a3b417b1f54d75231b1c1a3b6531b9746f79.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We have a BUG_ON() if we get an error back from btrfs_get_fs_root(). This honestly should never fail, as at this point we have a solid coordination of fs root to reloc root, and these roots will all be in memory. But in the name of killing BUG_ON()'s remove this one and handle the error properly. Change the remaining BUG_ON() to an ASSERT(). Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 511cb7c31328..737fc5902901 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1949,9 +1949,19 @@ void merge_reloc_roots(struct reloc_control *rc) root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, false); + if (IS_ERR(root)) { + /* + * This likely won't happen, since we would have failed + * at a higher level. However for correctness sake + * handle the error anyway. + */ + ASSERT(0); + ret = PTR_ERR(root); + goto out; + } + if (btrfs_root_refs(&reloc_root->root_item) > 0) { - BUG_ON(IS_ERR(root)); - BUG_ON(root->reloc_root != reloc_root); + ASSERT(root->reloc_root == reloc_root); ret = merge_reloc_root(rc, root); btrfs_put_root(root); if (ret) { From patchwork Thu Dec 3 18:22:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949325 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18D61C3526D for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DAD7F207D0 for ; Thu, 3 Dec 2020 18:25:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502071AbgLCSZY (ORCPT ); Thu, 3 Dec 2020 13:25:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502057AbgLCSZW (ORCPT ); Thu, 3 Dec 2020 13:25:22 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60922C061A54 for ; Thu, 3 Dec 2020 10:24:27 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id i199so3029248qke.5 for ; Thu, 03 Dec 2020 10:24:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=B2dgo5VKxvO7MT8rF1dWKo0CbNIFb8U4flevq67sGNY=; b=YPVEozrs1XlZRE55MtqQGiTzB76PuTfUKRPF1eGy1VYpEtzvJVWUXrskHh6rb/OCE7 AQEtTjh5zym2j0F2LLzu+fLPLLYXkt6t5ROSANjrKiydj8OzG+q2S6G4lekvX5cWlJW8 KTCzotbVoBmwBrAMZXoq5Z1zXs8PQTQk1EiEyEzDM/ZCvGTosBmo4Cl2YQW9XXdTolxl zb277gae0DsmMvGtcttGj3Keuj1ieIsLGZTqeBsxDGimGkvBgHipQPeO3oUOEwVW6ls3 9DwwAAe05WK1gmxZARsDDslvLrGKQQcTKfhN3buXKcbeL4CiWYoBsIKatWwoBnUkx3IH a9+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=B2dgo5VKxvO7MT8rF1dWKo0CbNIFb8U4flevq67sGNY=; b=V5G9TuIq5UKbmO6Dr4YdRDQfvMnw1tbAXg5Q2yIXGucRN9IiHV/dRjQ1IRFpDHs6p0 z6Bilbzse+1k8Ntb+Hyi2fwPyN4ekFYEzWo+B/udeXPwao6R4uj7N3S4q2rOM53ed19I Vzb5IFjD3e0VzoQlw13e90oGHG3zHuT1f1yPP3m4GyKtgVCD23BFaHNPU6EJj68IMkcR 1NrUprdbC/5sEc0C+fhg5Pql9Z0MMRZLyZbBGS/B+XQXaMdyr9bByT0QcjRzCA/qzj+M VEy/RfFN34T0d+vI5lBvTdzsq+3HfQjKN1CrlGnmab/JYwW7SQsftNHL7KnZDxkXZiBa Yo9g== X-Gm-Message-State: AOAM533T5M5MnGKSxCq9XssqfMT2GAFs/Giw270x1LhdGijqW0zipmZ4 pEjS73XgqDZGvPCvj4pcNoIFjEvkudLZpZp5 X-Google-Smtp-Source: ABdhPJz+2xWFwgkonn2H7rL4nvJZRM8jF7J17RySlq3FJwZF1k28l/g+fhXItKuXkRK69t3mP2L3hA== X-Received: by 2002:a37:5b46:: with SMTP id p67mr4181849qkb.124.1607019866306; Thu, 03 Dec 2020 10:24:26 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id i84sm1965161qke.33.2020.12.03.10.24.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:25 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 49/53] btrfs: check return value of btrfs_commit_transaction in relocation Date: Thu, 3 Dec 2020 13:22:55 -0500 Message-Id: <01a5d8703c24eb1b4364792b630b09ddd6ec7b6d.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org There's a few places where we don't check the return value of btrfs_commit_transaction in relocation.c. Thankfully all these places have straightforward error handling, so simply change all of the sites at once. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 737fc5902901..38002f47e962 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1905,7 +1905,7 @@ int prepare_to_merge(struct reloc_control *rc, int err) list_splice(&reloc_roots, &rc->reloc_roots); if (!err) - btrfs_commit_transaction(trans); + err = btrfs_commit_transaction(trans); else btrfs_end_transaction(trans); return err; @@ -3431,8 +3431,7 @@ int prepare_to_relocate(struct reloc_control *rc) */ return PTR_ERR(trans); } - btrfs_commit_transaction(trans); - return 0; + return btrfs_commit_transaction(trans); } static noinline_for_stack int relocate_block_group(struct reloc_control *rc) @@ -3591,7 +3590,9 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) err = PTR_ERR(trans); goto out_free; } - btrfs_commit_transaction(trans); + ret = btrfs_commit_transaction(trans); + if (ret && !err) + err = ret; out_free: ret = clean_dirty_subvols(rc); if (ret < 0 && !err) From patchwork Thu Dec 3 18:22:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949363 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 293BAC0007A for ; Thu, 3 Dec 2020 18:26:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DF6CA208A9 for ; Thu, 3 Dec 2020 18:26:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502084AbgLCSZg (ORCPT ); Thu, 3 Dec 2020 13:25:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502069AbgLCSZX (ORCPT ); Thu, 3 Dec 2020 13:25:23 -0500 Received: from mail-qv1-xf44.google.com (mail-qv1-xf44.google.com [IPv6:2607:f8b0:4864:20::f44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EDE4C094260 for ; Thu, 3 Dec 2020 10:24:29 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id dm12so1443378qvb.3 for ; Thu, 03 Dec 2020 10:24:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kNOtAisk0hN8omuiH6mLCn6ZjHq8m2odxb3m+HFyoKQ=; b=0gIA0/t7d5NlWJNCmHdawQB3PcealhhiK/rVVcrPb7y3LMRwk5wzI98yJy7HEgzf9d j6ur/Ev5eCe0r8fSzlwhIHI0j2aP8dG/bopiACUmK8R4QHqmu5dUIQtbuMBDQYGwtce8 mfG2+nG30O6eZiDn3i+8XyjW9pa8l6JmZOYhlSIpHyRE0hVLe5CBhq8vQVVAyL50Zdyu S4QivUBzcqDeZuKZ9Fd6HW7ISv9QH7TUCfw1B2RjCW0BxmpalJHbLucLtBsLRueFbJB7 bRxwNlNrXXMBC7FhqxtXEUaHmmnci0P1yG2LQYvdn/GdL9uPLMfFZv+JdLm5jDBzBQwF NTWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kNOtAisk0hN8omuiH6mLCn6ZjHq8m2odxb3m+HFyoKQ=; b=iig6gngsQZ90dgwZsp27JxXfRFA3aBdC40Sdiu1wPE8qcu4vf2Rm4WkrY/MQnohXTm hFsyoUR9HwWfxBrw0q3lEjMjo54G+5HpBusY3dnZaaDJq9hJYlYxQkrg5osD3Wp9dOeg U9mVHWqhyJyOIesUNlJpLw8MT2pPdf5oj4xDEMaaBcsNRkx9nLKCuIha4WaR8M5L4H9S hsJBauSpPjbfEjtTqKB5sygVkVxSgVINvP+rRejid7WDQcuQtXy5suMObcyjbsSQbdBb sJ7MGLDsvXIrEwOsoJmE5rOQQ32jHMWlW7eMlR87I7A1A7p10turUOllkgw5faRpDD4Q IkKQ== X-Gm-Message-State: AOAM531eQC9gKvEqLPazvIUVQ90fVwG0ejZGHxWIe6FSMUKx7FMQSShZ 6xuF3miYS36MJNh5Vp+Bx3mjWtUAH7RQrfsH X-Google-Smtp-Source: ABdhPJyyVQrFWZAu7ntOj6Rf48VOXBnF4S+f790cst8dMgExcHC8StOEIYpSHy4NQM0VxxbZv+c5bA== X-Received: by 2002:a0c:cdc9:: with SMTP id a9mr150478qvn.35.1607019868004; Thu, 03 Dec 2020 10:24:28 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id a20sm1778669qta.6.2020.12.03.10.24.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:27 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Zygo Blaxell Subject: [PATCH v4 50/53] btrfs: do not WARN_ON() if we can't find the reloc root Date: Thu, 3 Dec 2020 13:22:56 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Any number of things could have gone wrong, like ENOMEM or EIO, so don't WARN_ON() if we're unable to find the reloc root in the backref code. Reported-by: Zygo Blaxell Signed-off-by: Josef Bacik --- fs/btrfs/backref.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 56f7c840031e..525815d2914b 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -2617,7 +2617,7 @@ static int handle_direct_tree_backref(struct btrfs_backref_cache *cache, /* Only reloc backref cache cares about a specific root */ if (cache->is_reloc) { root = find_reloc_root(cache->fs_info, cur->bytenr); - if (WARN_ON(!root)) + if (!root) return -ENOENT; cur->root = root; } else { From patchwork Thu Dec 3 18:22:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949345 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FB7AC3527E for ; Thu, 3 Dec 2020 18:25:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6F248217BA for ; Thu, 3 Dec 2020 18:25:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502106AbgLCSZb (ORCPT ); Thu, 3 Dec 2020 13:25:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502049AbgLCSZa (ORCPT ); Thu, 3 Dec 2020 13:25:30 -0500 Received: from mail-qv1-xf41.google.com (mail-qv1-xf41.google.com [IPv6:2607:f8b0:4864:20::f41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DA92C061A56 for ; Thu, 3 Dec 2020 10:24:31 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id es6so1430353qvb.7 for ; Thu, 03 Dec 2020 10:24:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eSljPGaRsLpHWZg50kR8ip0EVFRfwHp7Vr2Iqo122ys=; b=M6LfSKPWWtr1N2QIxVFWJgIjjlOgt3kVCWXy9KLPWWVxIjGZAz1hsAeH8J4Lw8HBoX jsvctu3BiuE2AifUOIGGIveVpDbiL8FibDR5E8XRi8BHFVP1VHhWqZbIiaWDySmsDML7 gZF1Wn3iE6zGMUBlnBBrLV8p65eAdV2NhEsDPunvwI00GQAwTi56hAVsPAQepuO14/BX yOr5nBA6kw8HSyv94RMn/jRz8gWs1caNe6v7TgjPuiGtevEzBQY78+i7TmfLXylWZzo7 DWYGKtCqWYuPzM1b1TBtE11jzGUqgo8px26KHpKiCvQ+V6GQcLz/bFOOkt7tkl6xEGvp DS7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eSljPGaRsLpHWZg50kR8ip0EVFRfwHp7Vr2Iqo122ys=; b=O3hJbqJ0cdZV678BHiHpvmTbJjg3A4bJvnJFBLMk49Q4HTx7OaIDCXjcK9d4qfeVLQ LUxVE6sXsMlJ27lPDA/6i2Mon8i5bMNuS1vHLceal28n7Q0YLxC6sG55a4BiqXdNkNYj +1LtwGKPu2u5Sfb76qCVVOfZdtE7DFkzKZkFFjFLYvKPUs5QE19DhjGQ04j6aFJUnaUn xQ5iNn/01Ms36b+t0M4dE0N+/H9M43NYRUfxceXOYD5jyXNLGn4h06Nll+5UqYrctrFd 4zhyMx+IDUoJCbcZW8Vu+VZIS2av4s+RwEb8y0CCIczDp0ppMAnwYWMfNeYxrKAVKodi VJ2Q== X-Gm-Message-State: AOAM532jVJztS1CmvIn6yrXjhJ7DJlIDlQjEZmW6/AcZyT+wSqzZrF89 d/TetJ9hEYHfGMtU8k9exhVtOBAX5ybthytn X-Google-Smtp-Source: ABdhPJzkT3VlLQwsdtQrsC16W19q8hXv7luYqEc60jL6PfoNhrH1PrNQaSFaynEjDRuDlhM5yefQUw== X-Received: by 2002:a0c:f4d0:: with SMTP id o16mr143082qvm.43.1607019870133; Thu, 03 Dec 2020 10:24:30 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id r125sm2058579qke.129.2020.12.03.10.24.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:29 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 51/53] btrfs: print the actual offset in btrfs_root_name Date: Thu, 3 Dec 2020 13:22:57 -0500 Message-Id: <2c63bd688f02e642f566626a652bdab93b8fc7f4.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We're supposed to print the root_key.offset in btrfs_root_name in the case of a reloc root, not the objectid. Fix this helper to take the key so we have access to the offset when we need it. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/disk-io.c | 2 +- fs/btrfs/print-tree.c | 10 +++++----- fs/btrfs/print-tree.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 46dd9e0b077e..c73d172aa1f7 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1458,7 +1458,7 @@ void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info) root = list_first_entry(&fs_info->allocated_roots, struct btrfs_root, leak_list); btrfs_err(fs_info, "leaked root %s refcount %d", - btrfs_root_name(root->root_key.objectid, buf), + btrfs_root_name(&root->root_key, buf), refcount_read(&root->refs)); while (refcount_read(&root->refs) > 1) btrfs_put_root(root); diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c index fe5e0026129d..b8137dbf6a3a 100644 --- a/fs/btrfs/print-tree.c +++ b/fs/btrfs/print-tree.c @@ -26,22 +26,22 @@ static const struct root_name_map root_map[] = { { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" }, }; -const char *btrfs_root_name(u64 objectid, char *buf) +const char *btrfs_root_name(struct btrfs_key *key, char *buf) { int i; - if (objectid == BTRFS_TREE_RELOC_OBJECTID) { + if (key->objectid == BTRFS_TREE_RELOC_OBJECTID) { snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, - "TREE_RELOC offset=%llu", objectid); + "TREE_RELOC offset=%llu", key->offset); return buf; } for (i = 0; i < ARRAY_SIZE(root_map); i++) { - if (root_map[i].id == objectid) + if (root_map[i].id == key->objectid) return root_map[i].name; } - snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, "%llu", objectid); + snprintf(buf, BTRFS_ROOT_NAME_BUF_LEN, "%llu", key->objectid); return buf; } diff --git a/fs/btrfs/print-tree.h b/fs/btrfs/print-tree.h index 78b99385a503..802628dd1a6e 100644 --- a/fs/btrfs/print-tree.h +++ b/fs/btrfs/print-tree.h @@ -11,6 +11,6 @@ void btrfs_print_leaf(struct extent_buffer *l); void btrfs_print_tree(struct extent_buffer *c, bool follow); -const char *btrfs_root_name(u64 objectid, char *buf); +const char *btrfs_root_name(struct btrfs_key *key, char *buf); #endif From patchwork Thu Dec 3 18:22:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949361 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBA3EC4361B for ; Thu, 3 Dec 2020 18:26:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5C5A0208A9 for ; Thu, 3 Dec 2020 18:26:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502090AbgLCSZ3 (ORCPT ); Thu, 3 Dec 2020 13:25:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502052AbgLCSZ0 (ORCPT ); Thu, 3 Dec 2020 13:25:26 -0500 Received: from mail-qt1-x844.google.com (mail-qt1-x844.google.com [IPv6:2607:f8b0:4864:20::844]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C79E6C061A55 for ; Thu, 3 Dec 2020 10:24:32 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id r6so2069050qtm.3 for ; Thu, 03 Dec 2020 10:24:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=9W27EU5c/W9JoMK7FbTrJDDA2siIbBOwfExuF0aKAto=; b=TRtMv6A2xVHUTkdCnonnCKTpKpai9d8GdPM1yQqhgDUGTc1gPJ1HumyujXOK8erUND SQ76gBhfXTiRVkF/J5jO10BtFACKCrb2lCaYBaldohuZaDAuW5zG7K+ovg5ZGbJtwOt3 xJ6aG+vB8VkpxYepeOT+477iwNTnhBN/jUL3lOBlneGNmiX5gj302+CzyAkS+9yIxlE5 0biPEhNgybu+t5Vl1AgrHxDp8J/vkOm+skopGcgopZf3GqMAXUeCTbOeygfOPl19ONLY TSVIk5iVeBLo+Nn+5LicOGrdMWn9C8i0jIxGPqgl8CKqD7i948v3QPuyU1Wlk27imP8q D61w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9W27EU5c/W9JoMK7FbTrJDDA2siIbBOwfExuF0aKAto=; b=qNzZC75iEF2VilRwxGH2tFufZNGNoqQXws3v6D2huMvmd4VzRQB0AJPf0T/m/kv7K3 howKtubC5WQQyysEIz/aYDVZTEf0XPl+otfTxxNUoIfdy0XdCgG9IOtfZ0AseRNfsDMI 1Z3u+ebo49NyOBwW3M5hPWimwu5wyLDJP6zPCpjs0J1qa85ReGMNxpAui/6k/8WKayyt w2HidJO8kJ2fWhGJySR/cD7QYC9RUjKAvkQZbXUrrHujLkYdZRz43K0s6zCiRVcA7EQn vfbZE0TMDJTzqYZvVG0shJfDsnllvNVAUbUt+lwqdERlvNutgxuVTasEJFj6DZZalkWN /Bvg== X-Gm-Message-State: AOAM533E9Yyku/5UgY/4+lzCECCNgQDu+R1AxmNHqUDiDT9Yir5J2mq0 gE0NfFHTjQI87oOmnLCZdnj1McXHr27YIU7H X-Google-Smtp-Source: ABdhPJwETq2b37d5CozQwlxoux4RQQfbu/yMx2xJkuQaQ6yrs+DU2k6oWxuwZI0RL8iSmXzBT3sDUg== X-Received: by 2002:ac8:787:: with SMTP id l7mr4540911qth.137.1607019871732; Thu, 03 Dec 2020 10:24:31 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id a85sm2238928qkg.3.2020.12.03.10.24.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:31 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v4 52/53] btrfs: fix reloc root leak with 0 ref reloc roots on recovery Date: Thu, 3 Dec 2020 13:22:58 -0500 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org When recovering a relocation, if we run into a reloc root that has 0 refs we simply add it to the reloc_control->reloc_roots list, and then clean it up later. The problem with this is __del_reloc_root() doesn't do anything if the root isn't in the radix tree, which in this case it won't be because we never call __add_reloc_root() on the reloc_root. This exit condition simply isn't correct really. During normal operation we can remove ourselves from the rb tree and then we're meant to clean up later at merge_reloc_roots() time, and this happens correctly. During recovery we're depending on free_reloc_roots() to drop our references, but we're short-circuiting. Fix this by continuing to check if we're on the list and dropping ourselves from the reloc_control root list and dropping our reference appropriately. Change the corresponding BUG_ON() to an ASSERT() that does the correct thing if we aren't in the rb tree. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 38002f47e962..01b7b35be3f3 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -671,9 +671,7 @@ static void __del_reloc_root(struct btrfs_root *root) RB_CLEAR_NODE(&node->rb_node); } spin_unlock(&rc->reloc_root_tree.lock); - if (!node) - return; - BUG_ON((struct btrfs_root *)node->data != root); + ASSERT(!node || (struct btrfs_root *)node->data == root); } /* From patchwork Thu Dec 3 18:22:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11949337 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1945EC193FE for ; Thu, 3 Dec 2020 18:25:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D2E6F2085B for ; Thu, 3 Dec 2020 18:25:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502083AbgLCSZ2 (ORCPT ); Thu, 3 Dec 2020 13:25:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2502077AbgLCSZ0 (ORCPT ); Thu, 3 Dec 2020 13:25:26 -0500 Received: from mail-qk1-x741.google.com (mail-qk1-x741.google.com [IPv6:2607:f8b0:4864:20::741]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8AE38C08E861 for ; Thu, 3 Dec 2020 10:24:34 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id y197so3009498qkb.7 for ; Thu, 03 Dec 2020 10:24:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7YyqnduuKqEUVKiAG3eGPq7ah87Sv4iF9G8iHqvfpig=; b=2BGNW/4OxS+zX+tjUwBXvKBfW1kNWv681mFOhEEQ2iasQ3xAZVcQojTMB3r8VHQDaD C5pbHGS5SB4fDZzVLXAKojhIPEtwvJkwF/ROXevRDg+KqJBYWPXD8c8G3UuOVWELoLnw 99pCtpaxOo6yitrCtoLKFQvG7FAepjNfKVscUcohpFzpiy9/PDwradEW/6DSXMrnRsZh WotoQ+gK9KSeZwfgv0DgbXmqZA2wn+dLx5NzXTtF8wR62983+r4xBjawa6Hn0fQg+WNL FUqZ21jvWtYdA3S/licF+4OYyOxUEULytf1MwTQa6QyfIRTvU6JPeU4oKVNo1d2eltYh IsPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7YyqnduuKqEUVKiAG3eGPq7ah87Sv4iF9G8iHqvfpig=; b=BflmufIpgOZ12gzGp1OclLDUwU6DdHggsrSgFQzz5VzkmEoUNPfWsX+uOFmMfsPUVQ 5/R03QiysnySgEh0BQOFis2rhZdfMTvvpSAGzl44DsQgErNZICRBOfBx6JYgj0gTI4E2 Mj5MXoGYNCZe5TSRUBWJixj3ssEo47KDzvO49RzZ9MmKFqgLF9qX6EP8o3dwAOwSpqFl vgizpi6Vmy+vcqnoYKZY3SFf3l1awP2updNkCACAHhzBFn2MT0JBAzcqmkUn/yDryMzB WqyB4O53JogvbZdtghDRdfZwh5b5CXYW7FInpoVm+U9vvk43DHdeexmWpB0LXd7h7JfD FnEA== X-Gm-Message-State: AOAM532Vt7Fredy/aBu+Kyl5j3QNn17n8qxZyMac79fWAh+E0O+Twg1q N3o9nulvbG8oW190ggOUjOgkVJA7+JirNBDz X-Google-Smtp-Source: ABdhPJyH8yDiYr1UvNgucPRh0Dy84uFVBOJOEgkzh+RD27rF7vys/UEkrAVK6szX8Y+gU19t6EPaZw== X-Received: by 2002:a05:620a:22e7:: with SMTP id p7mr4213472qki.333.1607019873454; Thu, 03 Dec 2020 10:24:33 -0800 (PST) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id x21sm2147569qtb.14.2020.12.03.10.24.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Dec 2020 10:24:32 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v4 53/53] btrfs: splice remaining dirty_bg's onto the transaction dirty bg list Date: Thu, 3 Dec 2020 13:22:59 -0500 Message-Id: <1bcdd646be881f16be39bc597e6f273c1ccb5a60.1607019557.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org While doing error injection testing with my relocation patches I hit the following ASSERT() assertion failed: list_empty(&block_group->dirty_list), in fs/btrfs/block-group.c:3356 ------------[ cut here ]------------ kernel BUG at fs/btrfs/ctree.h:3357! invalid opcode: 0000 [#1] SMP NOPTI CPU: 0 PID: 24351 Comm: umount Tainted: G W 5.10.0-rc3+ #193 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014 RIP: 0010:assertfail.constprop.0+0x18/0x1a RSP: 0018:ffffa09b019c7e00 EFLAGS: 00010282 RAX: 0000000000000056 RBX: ffff8f6492c18000 RCX: 0000000000000000 RDX: ffff8f64fbc27c60 RSI: ffff8f64fbc19050 RDI: ffff8f64fbc19050 RBP: ffff8f6483bbdc00 R08: 0000000000000000 R09: 0000000000000000 R10: ffffa09b019c7c38 R11: ffffffff85d70928 R12: ffff8f6492c18100 R13: ffff8f6492c18148 R14: ffff8f6483bbdd70 R15: dead000000000100 FS: 00007fbfda4cdc40(0000) GS:ffff8f64fbc00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fbfda666fd0 CR3: 000000013cf66002 CR4: 0000000000370ef0 Call Trace: btrfs_free_block_groups.cold+0x55/0x55 close_ctree+0x2c5/0x306 ? fsnotify_destroy_marks+0x14/0x100 generic_shutdown_super+0x6c/0x100 kill_anon_super+0x14/0x30 btrfs_kill_super+0x12/0x20 deactivate_locked_super+0x36/0xa0 cleanup_mnt+0x12d/0x190 task_work_run+0x5c/0xa0 exit_to_user_mode_prepare+0x1b1/0x1d0 syscall_exit_to_user_mode+0x54/0x280 entry_SYSCALL_64_after_hwframe+0x44/0xa9 This happened because I injected an error in btrfs_cow_block() while running the dirty block groups. When we run the dirty block groups, we splice the list onto a local list to process. However if an error occurs, we only cleanup the transactions dirty block group list, not any pending block groups we have on our locally spliced list. Fix this by splicing the list back onto the transactions dirty block group list, so any remaining block groups are cleaned up. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 0886e81e5540..5cfa52b1a3b8 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2685,6 +2685,9 @@ int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans) } spin_unlock(&cur_trans->dirty_bgs_lock); } else if (ret < 0) { + spin_lock(&cur_trans->dirty_bgs_lock); + list_splice_init(&dirty, &cur_trans->dirty_bgs); + spin_unlock(&cur_trans->dirty_bgs_lock); btrfs_cleanup_dirty_bgs(cur_trans, fs_info); }