From patchwork Wed Dec 2 19:50: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: 11946895 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 4A2F7C64E7C for ; Wed, 2 Dec 2020 19:52:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DEB14221FA for ; Wed, 2 Dec 2020 19:52:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731077AbgLBTwD (ORCPT ); Wed, 2 Dec 2020 14:52:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729279AbgLBTwD (ORCPT ); Wed, 2 Dec 2020 14:52:03 -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 2580FC0613D4 for ; Wed, 2 Dec 2020 11:51:17 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id q5so2446669qkc.12 for ; Wed, 02 Dec 2020 11:51:17 -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=nGgc80leMdV+08LRmyAhyBLDvsv2J2a7K6KC1wBGOqo=; b=OJMtoT5+k/Azl16n49rxvwahwAU3i79fgeQoJz9e+xxFLYb3M2o293yaiTJxxEBVNU SjO5AMT4cef7MDOSSLjjDNnDOtRApu+fzgzBho5GouPC4mU2qfTr/txwxyi3zB2B/y08 022Y+jplG6WBu2Kh4SN2972vCM/fUGz/RJY3h13CQ0SF0thrC9+JE909oWi1F5CE7OHw +3/JOazvm6yTySaM75cYAvbY3+7FSWz4ZOABFAryh8A9GU0KUebTrK5as0kTHqsm4SOo TlR7m6R7atMU5UJpALf51tbky9gHAf64P8G9sAN2VWwT2cy/K35E+9n9zBx4mKERX9sK sr/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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nGgc80leMdV+08LRmyAhyBLDvsv2J2a7K6KC1wBGOqo=; b=gcl8L0HjIHGr9lP4jUR7QsfYV52z/eW31esxntP95VHusRZZ+mru9sbUKMLK+a4WDI PpYMxDwxuYlhx0vh0Bd8/yFddhaaWMjpn0H6wCiX89U3TiTi7AePIq6A/MViEWEU53LM vapbJbwXgOmiIrDoLr7bE20sB2iXy+tQfXPk4k1lI5JzSOUL/7+vR/Owftb+SoaC9ZG+ qvVow4kquMO3fXwMBMw8aI+bWeT9CBLHGmv8/AKO30QyVj3g8WsKzdIDtXjJPdBojyq6 9qJQiuKkz7F5t13qcA+IpQ+0vY29C+VIZB+txepL+POkTQhYgswmD39X1kaDZfZlYBkq kd3g== X-Gm-Message-State: AOAM533sKjdix1lDwb9rR1ot8h4e7lyBeO29eqT11mnaXRrU+hHI65mB yOCtYEzJa1A3UBzCOQ//nFpLlSAA/iixwA== X-Google-Smtp-Source: ABdhPJyKZlWAo/vlKtWJ47CzTPtB8Gq+x8IwjIhhQHD5g8KWhm3gVehT/pGuK7sw6lsznGuOksvDAQ== X-Received: by 2002:a05:620a:21ce:: with SMTP id h14mr4353544qka.363.1606938675953; Wed, 02 Dec 2020 11:51:15 -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 s130sm2034017qka.91.2020.12.02.11.51.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:15 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 01/54] btrfs: fix error handling in commit_fs_roots Date: Wed, 2 Dec 2020 14:50:19 -0500 Message-Id: <502d2273052e95e19366d785ee85e542e86fe61e.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946891 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.8 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,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 8E620C64E7C for ; Wed, 2 Dec 2020 19:52:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 37764221FA for ; Wed, 2 Dec 2020 19:52:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727845AbgLBTv7 (ORCPT ); Wed, 2 Dec 2020 14:51:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbgLBTv7 (ORCPT ); Wed, 2 Dec 2020 14:51:59 -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 0742FC0613D6 for ; Wed, 2 Dec 2020 11:51:19 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id y11so1299855qvu.10 for ; Wed, 02 Dec 2020 11:51: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=ljUV3+4q56H95g8ABu7lDvHi0HAOTzW5SqlwymD4DP8=; b=rwXDYb1kMKU+HyeIUBhharRdqW8rr1KAyWIuGfp86TkFqk0UgGfL4oAvvdh8PL+utF bz2PpTzD8saQHGq7Smo+c2bC7/VtSN4UMmwL79f9ZdDL6b7J86iarNTQyCAC+DPuFPyV YBkzwNVhvzSt6uBloR23+fKPLOSuGGNtqI4/Mw0KGQBEzQohUGeLN2qqdMVq0m/OPPIp GGVd2SjBsgDtPqCQFmelhrlZGdwoDjqTBWmZ4372OxVScyjnKtgmw6qLNbh99HlTOvm1 BQlXolXcd3IlklA1smwz1vUT6vj8bLh4G4Cwjk4uf/fuLqSzWhY3DE0KcOOIRrtiRdMn LiPg== 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=ljUV3+4q56H95g8ABu7lDvHi0HAOTzW5SqlwymD4DP8=; b=Lh5yfEDR7bmT1Z1L142CUMjPzVjQgRlNw0+UO8nL9LHJcyS/sQEAtTGij6knGe6WnL yIsTAjtvW7/qX04p0nhSt3QDkAt+Xgqb6wYsEArg7Gl2BAqhIbUoA5vAlU7XZcrQNYjf PkljcRJibjEOjayxbnJENYf4Nl1DwJq0Z86G4PTjZsZ6pnaGrUIiWS5MjO6nr2fvNOR4 JeMZ6VUneTaaAH0WmiOmlJ+ns+PI0ocBv2Ndt4nNmoBCrD8f/pgbQ5ZA0TXf2gkINaNv jvYp1v77PgP7bXiskPlsuk6swkXgymsxfv+Vjc4C5xGuNClSOfpYerRQErpDcfWpKE5f BfOA== X-Gm-Message-State: AOAM530dqPXmUx4zIS+P7caLw3CMltOx3jZcfKpAoUn+zvPbmgsHPEg2 Fecq13yq5aLZBLvfHKFEK2n5raB3cTj1nA== X-Google-Smtp-Source: ABdhPJxMWE3t01FptcqjuOs5FWyJC3+pGSXkER3u0CmavvPIUf/M2jYp+RkQ1IXKBIpSouYV1PLcgw== X-Received: by 2002:ad4:524b:: with SMTP id s11mr4456083qvq.3.1606938677822; Wed, 02 Dec 2020 11:51: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 d66sm2921797qke.132.2020.12.02.11.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:17 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 02/54] btrfs: allow error injection for btrfs_search_slot and btrfs_cow_block Date: Wed, 2 Dec 2020 14:50: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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946893 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 A63FCC71155 for ; Wed, 2 Dec 2020 19:52:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4FF6E221FA for ; Wed, 2 Dec 2020 19:52:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729276AbgLBTwB (ORCPT ); Wed, 2 Dec 2020 14:52:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbgLBTwB (ORCPT ); Wed, 2 Dec 2020 14:52:01 -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 D0BADC0617A6 for ; Wed, 2 Dec 2020 11:51:20 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id p12so1977822qtp.7 for ; Wed, 02 Dec 2020 11:51:20 -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=BlGmClWcsezkUZR/TXWeMfcZpyoRFkTIK+BYC9zDMA0=; b=gkEbyHZF7JdMrJ3ACKF7eknyqARBVte23I1zv/0dWDdGmUaNFIIkCXQ9wJz+gcfcQF dnyUHq1HhbsMMvH8lRMp+vYqougJNi5m21iUDnzCBtoUZuL3i/LsYh/F5iTneQT/zYcZ q73C2lCqzkzbxtXhUPrfibXJEnGsNxySVxX4oTElWF2atqB7i+OxqAHrLjZUlM5xCvqw WT5unEQxiy8n4BoPVcIOW7En1ZLrJ5ovcb9u3OC350syRTo+tOoGL8A763mYROaeo1cU Ytg1sTaAQEnE+Kqq4X1HwquQGUKcuWk0XBWiIIoFCcO++RFpGu7G7vzjrB4pQs9pyLuI CT6w== 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=BlGmClWcsezkUZR/TXWeMfcZpyoRFkTIK+BYC9zDMA0=; b=rqZPZUFNJxKKKY1IJXRv3oLfTiOkBpRfgqA+zMv5FO0GaBU2FN7Pvuk0eawoBnkgUv Z/kpVaKyulA/gaQyjdb0m3EbenqYKuRadFJFbt9uG+2TM7q+91+bK6GNp/iGLialMeLL wwjqedPVqQLhFRZluVOaWGSvb5m5/CfjcP9kykL9FJSbOdUzQ/Ra5Nvc0QMZsJErB/U0 eJbXe3Q4pG2Zx/aLuu6Pi+nL8I+MBX9i441vYYnll+4b3VTch//ZbG1QFdumwMnSwbqT NFzl1QEU4FlBJ+iNQWglhcVZFOwUQMBYUj1eo8RqGpsqhUeglx5OAoj6aKxdAx2Ty+e7 L5CQ== X-Gm-Message-State: AOAM533kOdx3nI7CRxd3UJNJkK4sVWaUreXavgGtv3pFhF6p2V10Icb3 qYDKsmeQJE9GP360ojVn022GTS6xPwfg+w== X-Google-Smtp-Source: ABdhPJySizkRuYoaYYC75pPjavlcao61rBCnK2/h7osfisvZjFyfxqUhnPw4uldXdgZdIxM8njaewQ== X-Received: by 2002:ac8:4d8c:: with SMTP id a12mr4346621qtw.142.1606938679622; Wed, 02 Dec 2020 11:51: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 l22sm2855315qke.118.2020.12.02.11.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:18 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 03/54] btrfs: fix lockdep splat in btrfs_recover_relocation Date: Wed, 2 Dec 2020 14:50:21 -0500 Message-Id: <6d8add2cb8a480cb2d7ea3763ea56c83e2aa3358.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946897 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 BA4E0C8300F for ; Wed, 2 Dec 2020 19:52:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 68D57221FA for ; Wed, 2 Dec 2020 19:52:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387808AbgLBTwD (ORCPT ); Wed, 2 Dec 2020 14:52:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbgLBTwC (ORCPT ); Wed, 2 Dec 2020 14:52: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 8D12FC0617A7 for ; Wed, 2 Dec 2020 11:51:22 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id d5so1998289qtn.0 for ; Wed, 02 Dec 2020 11:51:22 -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=pY1LraSwQ2vCwxpJbeE1nD83gxwtWMftEc7cG4Hg64Wtcbjbns6YOKwggFfi1IdVrh Z0z7Ky5cm5jWc8rqhSC5dkI0PXhw53dyTvtntK4k0CwcmpgJqOdO+0niKvnSdMc6/6gQ Ih1CTMHyOuN++Ee0eUAZ2ZYRG5tvDfflr4V1EkFaogXFkmEHmtfGpRYCvtaQIzU8CYYJ AeAYk5uB/4U8OWCyREzsQcApbvT2oba4r86qBITyWJwqtKYVMbUU5PLGjCPgnAkaRE4J QB2c1aVyaitp/B9muX/fG0lbtiIYdnzZW+g4OekScgbooP1WShteWKtD6mPREwHlbMTI kN8w== 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=cU3FlX2o2Dxa6VYSU5pkQcqukfqN705wAEvslFNn/FVTuR2rBJq0Z1e+GNcNIeFZiw 8PRUp17fxfRQrGXQWg+vih3tHrwKJe/mRIILQkK2xP/2xbBYAq0tLnrjfc+AjtKQ/x0z 40R2qT12tljCGAiXKMXjQtkjrOB/pHFt0iQfLPudeKB6mzhzyNAsQ0socxoQAJ001+zy npl9XY8DHihQftRtBGJfyxgcs9yztRwVGZ/aCND5JnABO9q7Z3P8NbH2bNT69jmzARFS X+U6xlCQp+AboSe1Z7VStSvhewMyKkO8RwYg5pa2re66LBMfzPkTgeWLg4x3oD5vUVj3 zVfw== X-Gm-Message-State: AOAM533JBg1x3pPSbXgwyQ2tHS+is0/UpHS69688bMqsE8wX6/dYkOY5 fRIUYfBDxaiRAdc1Es4avCZZsiebBtpBsQ== X-Google-Smtp-Source: ABdhPJzEtD6TcwSkSnXdwulJxSUauGBF+UsmBJ6sQHe4ZoyqSb/Ssm9ZsId2oj5UrUb4cfQKNEobaw== X-Received: by 2002:aed:3865:: with SMTP id j92mr4212152qte.318.1606938681317; Wed, 02 Dec 2020 11:51: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 x24sm2790859qkx.23.2020.12.02.11.51.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:20 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 04/54] btrfs: keep track of the root owner for relocation reads Date: Wed, 2 Dec 2020 14:50:22 -0500 Message-Id: <6d95a4747f99af7b1ce4cdd249998c821de2515a.1606938211.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 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 --- 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 Wed Dec 2 19:50: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: 11946899 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 AF7AEC64E7C for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5634B22247 for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388158AbgLBTwg (ORCPT ); Wed, 2 Dec 2020 14:52:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388128AbgLBTwf (ORCPT ); Wed, 2 Dec 2020 14:52:35 -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 F3896C061A04 for ; Wed, 2 Dec 2020 11:51:23 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id b144so2439562qkc.13 for ; Wed, 02 Dec 2020 11:51: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=DYKS2rzZ5QdoTMpXyLy3zyB2PON5SF+CzFRvbNfdP6c=; b=yM9IJxMnHyy7f4yVwHpC9wLlG/WKvFZbvJl21z/aqArlUQ/GW5/0kVzCPR7J/+qpT2 bOz3x5qkxt4MYwMEuerRe57pVCxFC0yspDGrEY3KBd0k7HZZrvGxYpHK8DKza+swqwwj Uy+c/IERAvn77T27zWlLh/Dgzld/lOFdHRZTySims426ZoPGrTK6RswYeVJ78sDWr2hz v4QqB3svbpXG22Z5uid0uDdqnI8xPeKBmSRHPyuq5okT5HhUsMDlEu0X6PqFFrHJTUct znEDm3CnybiLm4N/CTIkVWMeRAjKDLb/OWsmhiXKsqAcSjTwO6TMK8I6f3PTHnhUrNFc rBpA== 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=DYKS2rzZ5QdoTMpXyLy3zyB2PON5SF+CzFRvbNfdP6c=; b=Cq2eHAcBPppqWcrfch3Ah6czxatvE0WDMb48Nq4sL0YtF78O0DAYHAK26Zz89jijSB YPuL/YOewbBJDHNrbqmZD6/G5jfD3ffnui0PxlHPieSaWspHE0wIirrjdHSXSr1SJ1fO Kl7SVCtjuQLwK24+bpjxFvSpFpw1UOGKjNrG0wtWQpVA2EOivTCQimIqvDo34+cGbAQy XqflUx5B/Lf7HmmX32KmAA77j5YqVVAtM/DZNEWI+vhaldtebNnEyK77T9zLTcmFNo9s whojkAg+kfclddB7tCF7IG57uUsoL8LDTpCL2HFPUYJtcJuX0hc8QDXJlFwMPUsfBSIy NcqA== X-Gm-Message-State: AOAM532/foxgiI0xQTiKrQ68MGe3fCnyUJ+C5k+wpv9NTnchddw4UKtM /OO3kRi+CwLLCdFZqYtYsU6ErCuuene5ZQ== X-Google-Smtp-Source: ABdhPJxBg8KsHNk2wyp4+wUjaeU0FWbQylajZTNjaYAsXovViY8IGwdFng0aS61BT/7P5wE927UQ2g== X-Received: by 2002:a37:9942:: with SMTP id b63mr4131231qke.331.1606938682933; Wed, 02 Dec 2020 11:51: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 s130sm2034375qka.91.2020.12.02.11.51.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:22 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 05/54] btrfs: noinline btrfs_should_cancel_balance Date: Wed, 2 Dec 2020 14:50:23 -0500 Message-Id: <4657a485af5665a07682c4d7a5eb14ef241995a5.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946901 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 2B740C83013 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E5E7022247 for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388269AbgLBTwm (ORCPT ); Wed, 2 Dec 2020 14:52:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388222AbgLBTwl (ORCPT ); Wed, 2 Dec 2020 14:52:41 -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 E925FC061A47 for ; Wed, 2 Dec 2020 11:51:25 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id b9so1533640qtr.2 for ; Wed, 02 Dec 2020 11:51:25 -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=fY5NvHMDv/NO0yza2v2cnpLc6z4b8zWTh+42j4EOIlo=; b=Gilo6vNKL9yY1ktGGYmI/QN8xykvx9GGrUls5tGW9tOICCr3cyXAe6qTo6YQbD8yH5 UFwAAWMOvypXdn4uY75l8wvh7ELc9b79wfs2En+eyItpJQU/KaF2CB8xCsRceec6SYUM Ce/qft5OToYjixqRo+FDQIevomYxVTi84KRV1T8h7y8VFdiEYEUjFXKKlnKvp/3OC14b AHmSpMykZuTh1y5L1H42CRIZ+houmP06tlvqZGy8g3v/g8rdS64tvs2xrdeXe3L6s/qF +ABRh5SHQ5IgLZk8FNpt5aWl81fJw2AHXKtMUUp/Scn14G1FSRLGec7wz2ZoyhVmjVUN rwFw== 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=fY5NvHMDv/NO0yza2v2cnpLc6z4b8zWTh+42j4EOIlo=; b=qssLEczgKHMSEZc7sFe1dA6BVSUeoddHIJPqxH1e2DNterc/E+8T9kDN/VtV8Xq6HQ vXhdPdrQebanTJ3HzC9+L8R8hk88hJh9JrGKIOQVi93xqN8L8wdYzyM8AT5hlKapjIQM b5VDmVkxWm9+MZ1UJlKnn/rMlIlghCrXXWOAJaJ41GYOAIiWYBSPZysWd51U0fNHYmmf OhBk1Rz7/J/sj+plYftZYRVyLdvcK9mHssbSXvHsp4EZzn3yWfejk96RuvSfRhYOpisC FdcXdCWgAtcI3ul0syIRzuk1xA/vy4EfxeJsw1TrEJaiVIhREZOhAZju1TtrCQD90cCA +GYg== X-Gm-Message-State: AOAM5311obXeI3WyUdp6LMfrtWTLOZQirSZsXQNgoGbWPgdV3ARKDMm6 1/H+27tv3UQyvy06QTvhmEDEV1yVf3rlKQ== X-Google-Smtp-Source: ABdhPJxIOefjkuFyWXRX8TiqOSDnlXsCobkM4+bkWlOSu9OpkfIvts/6gy2bDPCJ7htQ88aAtM1AHA== X-Received: by 2002:ac8:5794:: with SMTP id v20mr4373996qta.175.1606938684644; Wed, 02 Dec 2020 11:51: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 v15sm2655776qti.92.2020.12.02.11.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:24 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 06/54] btrfs: do not cleanup upper nodes in btrfs_backref_cleanup_node Date: Wed, 2 Dec 2020 14:50:24 -0500 Message-Id: <5baef1129ee209bc9d31fc46972bb8df3f7dd4f2.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946913 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 EAA4AC8301A for ; Wed, 2 Dec 2020 19:52:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B510422201 for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388188AbgLBTwj (ORCPT ); Wed, 2 Dec 2020 14:52:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388128AbgLBTwj (ORCPT ); Wed, 2 Dec 2020 14:52:39 -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 8F0A0C061A48 for ; Wed, 2 Dec 2020 11:51:27 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id u4so2463062qkk.10 for ; Wed, 02 Dec 2020 11:51:27 -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=m/LH2FSzY1zTagwTv/NRKUfbPtitEZMU5I27qWJ5qJvXdZZ/nS74sv5AaQt82K27j3 zGsKQxVDbNWggHmlRYrJ/iU2aYPiAIRqjO2o5SSdlGC8vjY265JJel8VRG/c0vgFrSOO hWjtkAgwxNlyvsLr+WZUkii3zKEPgq1tSGJbBD9SA6uzCr47Yl/EiqNVgRXRgvtbOla3 1tDxMUx6Fpa2nlCGCmPPZBP2CjwIglKP0RsN2eABEEk7Cx+Kvl5K7gE/gOQYcr2wO1uD qn6KXE3iHU7v1uXkJ/ZB5ksL7EzpGREso1zxnv0vNqgLWKl6Xm0f/ucF7ythU/JMCryF op6g== 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=snHNowPOEuk/ywY9O8MLvRdj/zOIqd9u142hFy/bzV1u8Djmp620a8NUHnGPUsnI7N 4EWoPiHlOnDRdEodNz0F21E7vqwn7oRw0kh7FvXAVz8RlarmmvJ2hhYO97XsDJwBFZQG dcKuM6vkjhhIzPfGGzB1ZxnyJzdOYlN9NIuCUIVrAqoQZ6zzN13LquQppc2Rpw8bwZKW sTpy92djJQTUHfea6raigeNY/dPOacVyJdi18Z41K+sIClCmvvDt7MG0a1hvlokh/gVv fxGP+KRJ7NLMv8bBZTDEQE6wgk1sbH3g/LA1pjcoJBXrddYXeuNB5vO+kPhtuDQZh5Xo SXoA== X-Gm-Message-State: AOAM530MW0QmBWy9yHHL0Dmv6XpkUKSpLTaTbr/Aw4IQi9n5HfF9ZGwg SjhCtQBd6+krnaB8fsvi/UxrYsjtrtWrFg== X-Google-Smtp-Source: ABdhPJwIRJjuheI+FQ7CAIm6P/rcdRtO94fRIL1hz7St23syA5GQYbNXoXXw+/amcQk2U6BlClTOJw== X-Received: by 2002:a37:9c41:: with SMTP id f62mr4247331qke.97.1606938686448; Wed, 02 Dec 2020 11:51: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 a7sm2814820qth.41.2020.12.02.11.51.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:25 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 07/54] btrfs: pass down the tree block level through ref-verify Date: Wed, 2 Dec 2020 14:50:25 -0500 Message-Id: <17006f2f8420ee8b6178b435b529366e9faa7f4c.1606938211.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 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 --- 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 Wed Dec 2 19:50: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: 11946909 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 E0E63C71156 for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 85FCE2224A for ; Wed, 2 Dec 2020 19:52:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388207AbgLBTwk (ORCPT ); Wed, 2 Dec 2020 14:52:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388163AbgLBTwj (ORCPT ); Wed, 2 Dec 2020 14:52: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 3325DC061A49 for ; Wed, 2 Dec 2020 11:51:29 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id 7so1994347qtp.1 for ; Wed, 02 Dec 2020 11:51:29 -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=LWudZwJ2y+Uw9VNCggZkWalnL2eFUQoH9hSiWRx3xxu4pzv23jnxk3BgSKCQt0etH0 xVnZG14jARD797ak+YTR1t1O++Yx7IOog4hffb/q8NDM0hI/lNLX+aAmmh2qRfqP2qel l9EcXQoMbnryr12fiKBqedesMGnYyB0BGYkBAjPefOEgomLmjf6CSuhaT3BlMCTw54xz PsXGdcB3JYoXI/rat+hlMBMTeAHidpNuvv+YGqqrX6MNZ9b/pmC2bZzTO8ey15kIkSpX WB/fR6vYCQ5ol6ttvSAzWzTEZM6k0LOOI+VwHfqYpvbylbDklPbWGDRJUSWu/KLuQTha WP0w== 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=sn3Hk1dqjgbFtayThpNEzINMi3PwO8M0ysNggd9lqfZ8Yfii+e+VGolTZ53b17eO4j ZnASNFY4j7Z/IgVNPsvthmmgaa72gg6YFNTrPlVIvkuyS7eYTOuWLAkBk8h9vR+L5DVV ef5D+3G+lgtcv3xSzacw07oaAVbntugkIdu7Wqc4ds+3nkC7ExcUkInSgx54l8TfiC7W qP0CKQWiN9kp5tUJqR9QSHxUbG5pTerYnRfRRYx0J6Dz5EJu8rw+8y5P/qpIhawxAdFx vGVebjwppvY42kl22mhVSoPGhI8WcdfxafU6Zb4iUJDlCd3MxI0D2dcLOXg92TXqVN8G Pl5g== X-Gm-Message-State: AOAM531UBht/XCD4ARsWMvY04z/Efo6zMcLlfifyXwNEgLvra8BKTU/3 pdK+uEHEbnRWr7DDqLW6kIWvvlnn+pE5yg== X-Google-Smtp-Source: ABdhPJzpmRtApy66NQ7xR3ptpUW93jwndEcawhL307/eK3sTq46q7G3/uOYR+qfEzJezm8OauOOU+g== X-Received: by 2002:a05:622a:18d:: with SMTP id s13mr4462210qtw.306.1606938688064; Wed, 02 Dec 2020 11:51: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 d82sm2799081qkc.14.2020.12.02.11.51.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:27 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 08/54] btrfs: make sure owner is set in ref-verify Date: Wed, 2 Dec 2020 14:50:26 -0500 Message-Id: <9cf8f3e86cf2449dab8823ec623c832d865c0ac0.1606938211.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 Wed Dec 2 19:50: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: 11946903 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 5588FC8300F for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 21C562224A for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388249AbgLBTwm (ORCPT ); Wed, 2 Dec 2020 14:52:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388163AbgLBTwl (ORCPT ); Wed, 2 Dec 2020 14:52:41 -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 C844BC061A4A for ; Wed, 2 Dec 2020 11:51:30 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id 4so1311168qvh.1 for ; Wed, 02 Dec 2020 11:51:30 -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=8u9JJvwVSWXKq5SNRk+RtSu99n9c36WBAL7BSJcEBPw=; b=girCkqbK4CVgFgs3QehVR1mbB8kuVs3C59mN9FqJ+selBeGbvoAZOKtxE14mc9AaFv V6sWKD+HsflvdGevcTMKPmi9jMK8aKutTXFbO/dl5yIqRkWqI8NZOOXq/nsB0P7quDU9 dKBBQMOoQlD1wYJB89mLkC2xPi8aPLsL2b+zLYFL/s+eNydFE6/pTORdX2X9EWadnzWn 1tGV4KBSGt9OC1BEPhkPvhoOFlK4pL6s4Q0rnGpez0n+aQiNnTivbHG2Bimucuee1nyg uNSQB3SJ+RWVhOZrrZczR42aTElQr0qE5OoUeoU+Lg5oKhLurYSGaUpwaEyuzkZT4c09 k/uQ== 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=8u9JJvwVSWXKq5SNRk+RtSu99n9c36WBAL7BSJcEBPw=; b=HyPZrJeN/EBbhQ0BpnoZg08AVlPcgazPASSEapW2n8ZEAE0kjgDt+7vkfJUQdssgB2 8GFtjbnWgKsj4may1xqy9Y9/JYoBFrceNgVPGFsRuyc0s4ZkBy8oQAWLg85R3UIH186M f6Sit5et/FB88J7wJiInJR8Q6fHA2zXN35/AWzQLM1pUxeizRCta3XxVaWy0vFHZX4JG Q+6CkggLccImYyBCSa4S48msVx2hCn66tdICx/AR6hTLyeWqhIfFkl6sNRJLahOUpZWr 5pJ7Ph+16baMkwtm7XYbP1tM/W6ImfqMh3L9UYrfEJwqEvxoXxwjPws6SZPKGxLjwFzr 8s8A== X-Gm-Message-State: AOAM532hnvSmmmo0Y2WuDisz6yoyjhshO0/QhwNRRb5VNqcPeDeQ9lc+ ZZd2UKQtXXXocNeLswbDPRHX6hYvZSXijg== X-Google-Smtp-Source: ABdhPJyNZAncNUHX9KaShAO8r5VJZ7cg52uimxYx9EqYkpjMhtxQ/836ZEPVSTVeZ5Dfy+oFQB0z+A== X-Received: by 2002:ad4:524b:: with SMTP id s11mr4456896qvq.3.1606938689724; Wed, 02 Dec 2020 11:51: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 z26sm2713794qki.40.2020.12.02.11.51.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:29 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 09/54] btrfs: don't clear ret in btrfs_start_dirty_block_groups Date: Wed, 2 Dec 2020 14:50:27 -0500 Message-Id: <89d8fc9f58723113f0f6685d67480541044839d3.1606938211.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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946917 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.8 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,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 EA2B5C83017 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AED982224A for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731025AbgLBTwr (ORCPT ); Wed, 2 Dec 2020 14:52:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728255AbgLBTwr (ORCPT ); Wed, 2 Dec 2020 14:52:47 -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 6F0C5C061A4B for ; Wed, 2 Dec 2020 11:51:32 -0800 (PST) Received: by mail-qv1-xf42.google.com with SMTP id x13so1300403qvk.8 for ; Wed, 02 Dec 2020 11:51: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=cpU9buN2VEPJop1moRM5Z3zZpcBVRel/YpPKkoDWtA4=; b=a+kWQNR6xzHlfsguOXl5KOvr3wxuaD3IMWR6q2OKMKRFlVL//QvSaSOU9+ElXPw9B3 1fXdj/ZChdnRzTAp/8eDqo+AUhgcN69jIpBIEdKF1hxvvUMGaF2/CMeN9WnCtimWXuob /N+IA0wJ+R0ewCbiZc9SvB8nod7F74NGu+Gx0KjfIUAaXFh8gL8JQlCGLEICUft5R89C 7qVBr88U1S1E1vgRGrpddmmNyCw2Dj7pLMHkgQL1GkjiBzeH6k2XMb/k5/bMBXtqH5A+ 9458iRdIZC8yd5dTY6WQ2xiMcEiSu/V1/YsH/990cREYfCfwLPiIqnoJp2RSVX8R71S/ 6V7g== 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=cpU9buN2VEPJop1moRM5Z3zZpcBVRel/YpPKkoDWtA4=; b=m9ebPFU2STlN+N6sCMeKZFiORioztcwhtKZ0//FXAGJdhaEubFTwJG0D+Ec+RJ8LKE q4V/+1zXS+MzWU/G95cDj1PcydKYrxjkWKNBaXQ7aIUgEsctICyotRSdVluZ/zifNvXB GZz7o5rIejzuBOLHzbY3+IV6TNo2jgELZhFMUy8+DBECP2BhbUT9zHNkEpz/rPfE7z8A ysZsv0mPpKLVcDb3wYt+LKmPmE3YzH23kKltriRfg82HXuaL8bM1J87OvVGyXHKby6eN W4blVmISeMXSMlKgm/JNDibTgN/i6Xrv3LMEikt08hL0yq03wWDbWFqLYYo6ZWpfY0ML jW2A== X-Gm-Message-State: AOAM5310jaIjXR72Mj+23eLTCserMthQ1hANztp4mBJ0H5xltgrXkOBH 8jChwMgV+LZPAs0wodr8CmVMVJKwvo1UxA== X-Google-Smtp-Source: ABdhPJyuLLua7gS4HkjXx/O7YqFFlQvKk6PyxihBvmDFhb05efqHuQYcSnipvlN2tqbjSpNI2O3RyA== X-Received: by 2002:a0c:9e6b:: with SMTP id z43mr4516015qve.6.1606938691410; Wed, 02 Dec 2020 11:51: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 k15sm2685081qke.75.2020.12.02.11.51.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:30 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 10/54] btrfs: convert some BUG_ON()'s to ASSERT()'s in do_relocation Date: Wed, 2 Dec 2020 14:50:28 -0500 Message-Id: <416807404fa65b6f122249f7c9d76834248be5ee.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946911 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 216B2C83019 for ; Wed, 2 Dec 2020 19:52:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DD3F722203 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731114AbgLBTwt (ORCPT ); Wed, 2 Dec 2020 14:52:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728255AbgLBTws (ORCPT ); Wed, 2 Dec 2020 14:52:48 -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 4CC3FC061A4C for ; Wed, 2 Dec 2020 11:51:34 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id 4so1311249qvh.1 for ; Wed, 02 Dec 2020 11:51:34 -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=ipFDz8Y9/En+jh8nzeEiCg0PC01KvoIacPRgVqyOtGQ=; b=fKHHsmk7biLb9BcV28YlnN8vWgjOYbh/jAXRm04lfPFja8IhB8aKEEo+lOeLNSelTJ 0kXsnH2vbHnHUvCap850nxbkFTlT1Nxl49QQJnFefNpZnPgCJc5L/OVgnAlVAu3z0ZSA rD+ol6XD4wQn950nvYT0RS5lm3pniWhEvUW/ocmYEVwBb2TpU320NzdPKAiSjnBLNuxh emDcZIPXgsXk9UGbqaXI8zwyZ02sMmaqOdKOXWWkRf3PvdDXcX76p6RpLd3Q+GjAQEZV DWchNIS/HDhU13ECr06vELLbujEPyU5OLVNzvUjaGXhC8qS5N/DWnnXRyA5xvJyCmsRV 8lRg== 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=ipFDz8Y9/En+jh8nzeEiCg0PC01KvoIacPRgVqyOtGQ=; b=YO2mExGp29iJwf1NB6EW0Zs9/hKnSZu/MY7FD8oeZyxbp502zaLPDj+A1QBz5ycEWd 9IrWCU2LGodxQinVbQcgnmXiee8Gh2C1L2vBwNFqQUfnuJ5LkOH8gPcnQkPkw1zHXHld X6d6NfGwjHOXGXjh30G9LVZfnwhhxhRW5otMADrctd3shi7cuHqYbNnZSs4TYtnefFfW nNt3OfWB26FezrnVpPMhQ39RvkgFou3Lkdm+H9APzYdJ+EC8T2xra6Mf51FZoFy8anpk REUa7QZpIx8x2m62U0lEe7BsRAomWj9+EB1Hwa69NupyfS92e8P5XqmOn2qVIuEfRUEJ PgYA== X-Gm-Message-State: AOAM533nNCVwBjtWASY+j66/RIq9vYss1CjcbMpZJNJPFuGnFsX/vFEl KZ/eRG6wLgkvAdIzMpnP26FKRsbfYxmLQQ== X-Google-Smtp-Source: ABdhPJzUrmFpEDIdaWiLUwVNJVbPefLX9JQmvGKOmIYodjyom+VtlAasDrhhHeVzw6KEe032y2TeMA== X-Received: by 2002:a0c:8149:: with SMTP id 67mr4040608qvc.52.1606938693101; Wed, 02 Dec 2020 11:51: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 v204sm2946095qka.4.2020.12.02.11.51.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:32 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 11/54] btrfs: convert BUG_ON()'s in relocate_tree_block Date: Wed, 2 Dec 2020 14:50:29 -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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946905 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.8 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,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 CBCA3C83014 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7EDAF22203 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388375AbgLBTwn (ORCPT ); Wed, 2 Dec 2020 14:52:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388222AbgLBTwn (ORCPT ); Wed, 2 Dec 2020 14:52:43 -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 E96FDC061A4D for ; Wed, 2 Dec 2020 11:51:35 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id y11so1300336qvu.10 for ; Wed, 02 Dec 2020 11:51:35 -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=Zpd71/joKfYkB8QIfmjU1qjvBCKr5JiQEFJJNbaPbtM=; b=BsA1BOr4C5Xgth7c+PLzTSjLShGuEAojig+gFtl9YTRy8j4/LpgaoHBjgBzh36gV2s FPWAEZwn0VhuRs6cI19nl3Wf7H2AbkIs+HIJHKf0KdFkdXt1Ww97qnMnd7pDGxfitnUe IfpKSxgg4MKV2anpFW4TY6NEjTTusmBcVVYhrvHjg+LBjcW5WrCX6+legq8yFB/UQP39 VIvuVr1TrLpk3bvk8+oUh9vjJbH/sqfHaHv6AM4Sf7K8gwyVldOAKFM65fyFSLY03cmd Zegybh5WyTIkATUhicY6MnX1D8jarzv/3gYR7rGmZ5U4GT8ctyiVGcWH4Y9LKaNFvb0k 30wg== 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=Zpd71/joKfYkB8QIfmjU1qjvBCKr5JiQEFJJNbaPbtM=; b=XEKnhSCR+lstTLZcWEHlOBe9izgo8DUhYSfqOO4MdbbB8vbk2OULkLL1+nEHCVBSY3 L/kRGiZrDDd0BTfJwW9Ai8yXc+jTDxd0ksJcg26XvIpjd43X3jHS2T7zuGx5V4WnNRnT 8S5eYHoHjxU/hQiJUSezUUCY3XrxcoZhUlUvwb9JoPngxm30gRM2OYlGAii726E5Ra5Y 0UlZxJBXMvZXWOadaJ8OVTx+5XMES4VWv5ukN2+RnhCiLjRMJDDy8JFZdJuxXhZ1DdHz cUq9kBPStqAjYma8INoyXuPet7OCvpgl3gbYgsfib5zHv2PY6ARwfT3fJeto1jfX52DP KPBQ== X-Gm-Message-State: AOAM532tBILVv7Z6i7wJUSQKX7VWfmSQspwZoLfLZcIjq6tCJOYB9ZIx qFOkkvQYi0W9Pa0HE8LpoZ0lrkLJnD6W4w== X-Google-Smtp-Source: ABdhPJzOETZXtJXR6z+cBmNaXJNK85JdRr/Yenh8DnhhSvkqwyayswf9xi9vg8CGzC6SqR4/4Dj1Dw== X-Received: by 2002:a0c:bf44:: with SMTP id b4mr4515620qvj.30.1606938694809; Wed, 02 Dec 2020 11:51: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 g63sm2893448qkf.80.2020.12.02.11.51.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:34 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 12/54] btrfs: return an error from btrfs_record_root_in_trans Date: Wed, 2 Dec 2020 14:50: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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo Reviewed-by: Johannes Thumshirn --- 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 Wed Dec 2 19:50: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: 11946907 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.8 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,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 89128C83016 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 51D0422247 for ; Wed, 2 Dec 2020 19:52:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388319AbgLBTwn (ORCPT ); Wed, 2 Dec 2020 14:52:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388287AbgLBTwn (ORCPT ); Wed, 2 Dec 2020 14:52:43 -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 B2A81C061A4E for ; Wed, 2 Dec 2020 11:51:37 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id y18so2450862qki.11 for ; Wed, 02 Dec 2020 11:51:37 -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=ObcviAAK3dYX8QWWRG3QvxeMSLutw7LwvFpMxSbAhq4=; b=KNi5UxtuUsJ4j0dzgNvfvqpbGSVo2v0h/15a0JIwOP/xIvTKABLerMxDaLbfoo4iqG Rdm1EdNeWuv0LKo07jgx9D0XQfY93hoSXmAWE5Wxd8Ew6oAU2JMBom8wxLTK28pb4AGl tPXhmW6WJl80MOx/rfEb7Eqmr1YXXGPtTKZAV2wyGoKwPL5nx0OFuPbWkk6NUthlIcRZ drtOOaPz6UyeVuOL5+Bv4ldU54YT1F+7Zd9d/CxjhS/D4WG4uOeHSQODP2m3OgT2M9sO Gpnorzm93+wmK4hMkz0VeeFmCQU5WWHQVjwT+ZRuR31SLlPThJzGBs+vkVP3lhNvuk5L IA8Q== 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=ObcviAAK3dYX8QWWRG3QvxeMSLutw7LwvFpMxSbAhq4=; b=Gfd7qQJwSs8gjfbujUKHi6R3/ZxsPuAjYE/EKNI/H/7WMABzCI7pVk0f3ytQWQQlGK ZJY04EXCHoZ5MJlhUq+ybZUTzkCgqWbhNhQi96sqp/vYfK2uXdQrlDH3kV1+Inzd4pG1 rsvRlpPVtu2dopEfqvIh24At/sFRDBJtiD7zjyKSlG8v5cfI++L0HaxtBy37c2vh/W4Q s255DXgFB0l079viLfEaqRZ9Ufyh7X+W0mUbtu+rRK8kaAPrZG1qY4JumkQ6lV/YVt2k HwIyWtbe6V4etosBA6bLUZ3MitWlgDY7eneV+8BpNdyTBJvEwXl+y/Ggym54NxavVU3h 8Ghg== X-Gm-Message-State: AOAM531N6jRF+8qru3msEjCFI/pTj62VdUQD3A34wl7NGIwjIPH6OxOh fUGYha7TAISWVYDojoUUU4L1aQGSsEc58Q== X-Google-Smtp-Source: ABdhPJygjl6K+EiEqG3dwvc75Xxrbbqz+O/b7/pxjKmuI+ivrScMQAA7+iwRbOuNkDeYSbIoXVYxow== X-Received: by 2002:a37:946:: with SMTP id 67mr4273687qkj.304.1606938696510; Wed, 02 Dec 2020 11:51: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 7sm2806754qkv.55.2020.12.02.11.51.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:35 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 13/54] btrfs: handle errors from select_reloc_root() Date: Wed, 2 Dec 2020 14:50:31 -0500 Message-Id: <871fea9cea530b626f0f253c00d53a3e7a1ea531.1606938211.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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946915 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.8 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,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 4E08EC83018 for ; Wed, 2 Dec 2020 19:52:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1741B22247 for ; Wed, 2 Dec 2020 19:52:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388287AbgLBTwt (ORCPT ); Wed, 2 Dec 2020 14:52:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728255AbgLBTwt (ORCPT ); Wed, 2 Dec 2020 14:52:49 -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 5519FC061A4F for ; Wed, 2 Dec 2020 11:51:39 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id d5so1999105qtn.0 for ; Wed, 02 Dec 2020 11:51:39 -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=LZKtow7fEFdlMHA5nRCkAD1l/THJHrm+aeUBLA6vY08=; b=PUusj4/Db1fKiFu9RPUPEOGT/+xHRC/XnxVa6Spc54h0KhjomKlD4nl2XEW3TrXFcO g4ql+1ASJiw4eQF7yTLxGvZgb3hbBvU6Yyc7RjzxHFLc8O943R79ZcJRrOr89DKyYi8a nkC8u+6o/xqzgE0Wj/1jzrkdIGsh2AYVaNP41242JLojouFBUTlVSTFUCLOt2Ecqsjho lK+p91V/agMi/f25toHMpmb8cSuYSdzHBWTma21e7DMdUtvfOu8QAt/YTCPXwgF6tD7/ 0jRoPtWnZOLTxAEsW+fO8++P0T3vbnskKfNo07rFVai6jPL2T07ZDieIKse7gPWnZgQX MfKQ== 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=LZKtow7fEFdlMHA5nRCkAD1l/THJHrm+aeUBLA6vY08=; b=ekTfWS22PBlc9IKHVcG00d9Xwt2GdtqeRPRLrVQokCeCMMzQWaimEoTBUGap2G712U 2oEwfyoFYhjpyQxhsMngpYMjHE1cABZnEDPui371g8gf4s/SF1xEIKwYeigV3x6IqTAE Gba3TWQ2B0m7vCBi2xcVqyi/K2S/BveG7eGzH5w3D51ni7VjQYxgeL4/Ch4ZgJBQANpJ UPi7lYgjftwTB5FvXdfgXx1kBizXs38KPV8dbNmsIQjwgudnEzkflNEGLijfHhYP9yk8 /EX9i42ZLWUyjc7+NSc07TT9mpbJI3/H9BWE7zBZwN8JDBQZDleCjNdoEN1qoAf/6zmA TSwA== X-Gm-Message-State: AOAM532D/9b4oGtaOuwDLtuI5lSHwn0rWPC34kj41i1GQL2Bohm8OBZH ojjN6klqYViDP6ogCdywad8zPDA0iRnBMg== X-Google-Smtp-Source: ABdhPJydhq78TBKDuGGl1DS4VOpkDgpMGUIt5SSO7QXTLnNQ+BOUrog1oYCL+T3LMpI6MU5ShYdqvA== X-Received: by 2002:ac8:6d0:: with SMTP id j16mr4328585qth.106.1606938698175; Wed, 02 Dec 2020 11:51: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 v5sm2660462qkf.133.2020.12.02.11.51.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:37 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 14/54] btrfs: convert BUG_ON()'s in select_reloc_root() to proper errors Date: Wed, 2 Dec 2020 14:50: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 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 --- fs/btrfs/relocation.c | 51 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 66515ccc04fe..bf4e1018356a 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1996,8 +1996,35 @@ 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. The ASSERT() is to make sure + * developers get bitten as soon as possible, proper error + * handling is for users who may have corrupt file systems. + */ + if (!root) { + ASSERT(root); + 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(test_bit(BTRFS_ROOT_SHAREABLE, &root->state)); + 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 +2035,24 @@ 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, or we've made a mistake in the + * backref walking code. ASSERT() for developers, + * error out for users, as it indicates corruption or a + * bad bug. + */ + 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 Wed Dec 2 19:50: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: 11946921 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 8C74CC64E7C for ; Wed, 2 Dec 2020 19:53:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 34D2F22201 for ; Wed, 2 Dec 2020 19:53:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388486AbgLBTww (ORCPT ); Wed, 2 Dec 2020 14:52:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388416AbgLBTwv (ORCPT ); Wed, 2 Dec 2020 14:52:51 -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 19613C061A51 for ; Wed, 2 Dec 2020 11:51:44 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id n132so2481337qke.1 for ; Wed, 02 Dec 2020 11:51:44 -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=T6rdMJySAx45P25KkcgFnxr92qOVPa5kxeiZJVmSkgs=; b=0+3MgzFH6G9Mf28qOpmnoDXYedWeyFbkJ5LeJu5NGegdA1uIJxKbwd5Y183g7D7XvD cT222yqwplscdSSTUODe720BLKo/dcBgoKTXLthiAMCPOveMsWveuxFnQf7ldXILRVt7 nd93UVnW1brHLdRvYSzgxaPyVHlWEfjfun1nB7vECtU5wSdwK6QtGtcSM4LYaS7ioe7I NHqgNVImbR5kC2C3UEd2iBLziIFEJdT464vvFuQQhFsULYtshpVWBtRchKt5o6fldFIw bO1lUwPtloacwkJbwi5z9BZ4v7vF5+AQ3wghCM79oRVG+pimu32uS2fbpZrhax7NU/hm KbFA== 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=T6rdMJySAx45P25KkcgFnxr92qOVPa5kxeiZJVmSkgs=; b=Tp6i6BYRuYu4CHK3kvW1Lh8VzYL5b6c3eP2laFK15X1rALPodKRZNjvvp4p/7w7M6P SoNrOKZNsZw582ehnRvA/ub6qiSYAK6soXNelCfeJ/BVXyYYiRZdMpuNiDdIKb5fe3xH G7O2JOr2eEkYPMtwj3KM2TolMD6yg2bHIQIyiPWax2YqD2RahxNVycaWetCcNubxdvex ab2guWFw2LFRDXkf9mHyuwUupgaVKK2+l30VjcKqz6isYY/CRlBI+dS5/PodrlseE/t7 P2KD5nK+yzJ6uM9ZZtveQ6k8kED8Vair+GmTDww5Hu3LUAB4fiB4OseVahwjgWaLcCOI 4skQ== X-Gm-Message-State: AOAM530mdV86RXtsfXykbFwpWdWNskrnK4k/hFFstlsWVmvoWTrycRP2 J5eJ8Kx8dUM8WZ/fSyv2ICxu43xR9uUj9A== X-Google-Smtp-Source: ABdhPJzMyf5MQfHrF3Ty/Or5h/MhEurhUSztw6xCZjlGEzghJIUQmocF+EdRqz+zyFVIwwQ5NMOiPw== X-Received: by 2002:a37:7cb:: with SMTP id 194mr4132671qkh.289.1606938699971; Wed, 02 Dec 2020 11:51:39 -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 j17sm2685600qtn.2.2020.12.02.11.51.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:39 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 15/54] btrfs: check record_root_in_trans related failures in select_reloc_root Date: Wed, 2 Dec 2020 14:50:33 -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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 bf4e1018356a..d663d8fc085d 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) { @@ -2027,11 +2028,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 Wed Dec 2 19:50: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: 11946925 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 66423C8300F for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1634122201 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389672AbgLBTxB (ORCPT ); Wed, 2 Dec 2020 14:53:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388416AbgLBTxA (ORCPT ); Wed, 2 Dec 2020 14:53:00 -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 77BF5C061A53 for ; Wed, 2 Dec 2020 11:51:47 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id y18so2451471qki.11 for ; Wed, 02 Dec 2020 11:51: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=JfTJnEMdjcm0+nanpe/tTSsXhQ2cHPMfOATZbNIIpIA=; b=TMzL5sMyaY9pH0PKalD8c5BdLFSJpF9IsDQVK9U+YSo4ChugoYypgc04GCh2l2AvPg 1HMzQdKFIgngsHTCY7l/ZMH0XwucgVejxnesDRhy8pyAsSETh7GfZ4NiTWRyJ+vgsEa4 P64XasMN+P/BX8gIbzNhPoyCDCMyDoqzv2+oAQHfXji+CQ7F/P5qGpVexC+vqYCLMDdI CplK+iipYWEv4frKkK3dz8TESetwEPCZRcIZGjbWOMx0ZGBqde89jkuHiMv9nU9ZF0IJ 4A7xeId3MhpZrruxQUgTLEXnIXo40VQ0PDZ1zjnQ7ZwUNp+tHmtoMaoo+bVqI1hW6WoS a7Fw== 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=JfTJnEMdjcm0+nanpe/tTSsXhQ2cHPMfOATZbNIIpIA=; b=Ty8Ia2MyzS6R7479GaWJ5lhxJFcOO4pqeUJdVmWgtpiX5ubpLW8trzXvObwpAjAmWe /rf6Z36aGL8VgNNOWV7StRs7F7vc1nxI8M0TTxbhy7BCEHPS0N2T0wccDYwN7rlrhR9W lORkabdmhd+0DILcXGXWr0FQnICxm4Dl/IhtOJXQv48lltx1pHJWMzF0J4Z4s253pMCw bkU3pVkWucxqqDK1iLU7vsPSnCCReproLq3GIcq8ekS6dJy/BR/1UuS0PPX6MFtxvXgG TRtPco/QCysxbbb9cy72166c4xNtIE5a0BTq6PZ5C8s49Bark+Ib7mJ7E9w8aMw6xBGY 010w== X-Gm-Message-State: AOAM5319qKhC62tjo9y6SPGjHRBAyQbwSS4tsE9K3YRagWz0mslMWxnQ tmCYgXt1bkBhID8yz0GHUABW61bNIPTcZg== X-Google-Smtp-Source: ABdhPJxLWNHY8wcQpEVixM0wDIfiKb6zfy8uPHkXYfc/8ldHxL7ZC/HBuH8Q86bK9EXv+Kk/aT5Eyw== X-Received: by 2002:a37:7cb:: with SMTP id 194mr4132936qkh.289.1606938703560; Wed, 02 Dec 2020 11:51: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 s134sm2993897qke.99.2020.12.02.11.51.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:42 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 16/54] btrfs: do proper error handling in record_reloc_root_in_trans Date: Wed, 2 Dec 2020 14:50:34 -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 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 --- fs/btrfs/relocation.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index d663d8fc085d..5a4b44857522 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1973,8 +1973,30 @@ 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. + * + * The ASSERT()'s are to catch this case in testing, because it could + * indicate a bug, but for non-developers it indicates corruption and we + * should error out. + */ + ASSERT(!IS_ERR(root)); + ASSERT(root->reloc_root == reloc_root); + if (IS_ERR(root)) + return PTR_ERR(root); + if (root->reloc_root != reloc_root) { + 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 Wed Dec 2 19:50: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: 11946955 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 6038EC8301F for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2B15722201 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389815AbgLBTxY (ORCPT ); Wed, 2 Dec 2020 14:53:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389800AbgLBTxV (ORCPT ); Wed, 2 Dec 2020 14:53:21 -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 21679C061A52 for ; Wed, 2 Dec 2020 11:51:47 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id cv2so1302325qvb.9 for ; Wed, 02 Dec 2020 11:51: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=6M9zwjGM+9g2zUeTJd1Bxd/0Sqihj+Zk+kHYxw0gRK4=; b=IB6hVZa9I9ewOE4woVrVz/Y4gOIgFIrWyivcGexiWM0CsCxknXUrUbqLeHzP2xVApI aR3wdJXmp8dcC7z/kyeqgWenC4XRoiiFsaJMO503kjobmC6lmBln2CconLFQNJJfLtaF sxn2ywSHUZmvr/QlVheKxG/SHiTAVhQp16+UqVhxMSpcE/+ZsD54jXcC4WZdjhNDZaPR 4ZJk1Egw37Fuc5up3Om/OhjDzbu6vhUM0Q4OfyS5Qo0t8DN9avb3sIZSla85JJWnrcTY IiU0g01GW7egA4aTHzhYXW4Rz6a1s1KJUa5obh6rbv6BqvkQ1xtku1N+SAIysM355zTA rr/A== 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=6M9zwjGM+9g2zUeTJd1Bxd/0Sqihj+Zk+kHYxw0gRK4=; b=bddrPLF0+GV+aWmulDO8fmFkBcfnd9iox8+Qle5Pck1HZlHHqSJ0di5k0h85PmccPj TVpCk80QTF2QlKw6ZynlzUOwFQ3haJwnEIeV2aNRijdpWxHiqFwGwPYSCYKI83DAbrDh ibG2rcuqCHTvrw5oYIVT97RkTfX6l2Gy2mR6U6QBiFcXmpK79NfXfK2ncy8FtfdUDyu/ lIrwfp/WDsXQoMj72hcHLpXu+Gzq7sqQWoDR+1ULEI59q2Lj/UCBTPZ7igBp0R/WBaD2 UuH0VJuaxtdqIgTBz8CE4Lboh2T9Ov+E6OgsEbEt15cOQVRvlVupNZEXRg6FkLzuiz2A RsEg== X-Gm-Message-State: AOAM533khhfKitXczWjpCgxKjp+66n3HUjOvVCWvToPB4nC99BljkZ91 FYD6OyOUtNt+PM1UBuCBHGMOflBCBnL2YA== X-Google-Smtp-Source: ABdhPJy6nm7S7us3jZ1MecgnrFAo4IVVwnCmSkiPvYSaPz7hSVaH4DRSLdS/kSrgKS5afSV0C61EhA== X-Received: by 2002:a0c:b415:: with SMTP id u21mr4295351qve.0.1606938706001; Wed, 02 Dec 2020 11:51: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 g18sm2740617qtv.79.2020.12.02.11.51.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:45 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 17/54] btrfs: handle btrfs_record_root_in_trans failure in btrfs_rename_exchange Date: Wed, 2 Dec 2020 14:50:35 -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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946991 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 3FF33C83019 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0BF2722240 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389794AbgLBTxU (ORCPT ); Wed, 2 Dec 2020 14:53:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389785AbgLBTxT (ORCPT ); Wed, 2 Dec 2020 14:53:19 -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 D1501C061A54 for ; Wed, 2 Dec 2020 11:51:48 -0800 (PST) Received: by mail-qv1-xf44.google.com with SMTP id k3so1311423qvz.4 for ; Wed, 02 Dec 2020 11:51:48 -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=0OnvaO3PazLKgFhFCccXGJN9laIzx7qwWv9vWoIdlYQ/KOB+XjRM2JMtXZr8CUP1Ay 49X4K/Ne3Ov62SQJoBUa0NGmiC7SUOQoyl2zSdMRYb0z7mmaaub1pYV6zlGHdVlJtrxb S1qwBJFA0H6ZXtWI465+to9BUYu05G+LbTmUY9NLOKFnGv6B00vF1mKuNn4HEGA2EBlC enebn1WMASC+9JdmPoxiVAsnBaZxNq6VQ6IpFqScxOQEkmwWCTq57nXkfU6GdC0l4aGi zaNgoKfg7FhGih6DZbhYQzi0lgzUYBBoR9m60euKojL+wX0JSPwXXDFEHlGGKvuwEHVV i0hg== 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=JMdgZipP9RizVd7ONYMJFxjqx8m818ynt7i9W2aPnZdh+cpyrk2OgK2oVzM9yjY83b 2D+oN+lnwhZ1QcSTaafxc9NNJO2aqCubyqJZiV7YweT+yrPqMTYt/dyo8QIU7aH4Y6uu Z0P3AZIGa+ra3jAuTaSBd6ilaDzZ5jHT0woDx6n4tlt8jIZn4MFx8t0kAklRBr8xKw6r 2WOW59rOU2UQf/mcrfROmgyJQ/0d/yUgubvKMuAEvvb2m/HyLCFhtcF7XXhJZpH1fFp2 TwDDB1XFgT03HL9w+ZbGeEl3uFhFgjeRHb7H4MxeGKnmk2bJJ3sMHYrlXLK5Xxfk+a0r RSiw== X-Gm-Message-State: AOAM530atof0vV8B0AcFnIQ6z6Kln73O/j2FoQ13BC2gQ2trIj3u+sVP bIGBzsAIxtGg+3q2lj1W3mZEQHTblLpKFw== X-Google-Smtp-Source: ABdhPJzJAcAQM63SfNAzR4e3EExokdqt2oGwA9gYyMfrGSd+2ed69KeO67DFloLj1aCcIWe6+YUBDA== X-Received: by 2002:a05:6214:6a2:: with SMTP id s2mr4274226qvz.58.1606938707708; Wed, 02 Dec 2020 11:51:47 -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 b64sm2767634qkg.19.2020.12.02.11.51.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:47 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 18/54] btrfs: handle btrfs_record_root_in_trans failure in btrfs_rename Date: Wed, 2 Dec 2020 14:50:36 -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. 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 Wed Dec 2 19:50: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: 11946927 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 9C91DC83013 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4636A22203 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389631AbgLBTxB (ORCPT ); Wed, 2 Dec 2020 14:53:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389620AbgLBTxA (ORCPT ); Wed, 2 Dec 2020 14:53:00 -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 A5971C061A55 for ; Wed, 2 Dec 2020 11:51:50 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id d5so1999588qtn.0 for ; Wed, 02 Dec 2020 11:51:50 -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=noZ1Kc+J4nyrHrABZzAFflvlzcB1Er5gQQbDg7VGrHo=; b=z2KrJqVZHrOEyG6QGYwqluaGsCnNfxCQy7JUuTqhBAx0cMmf1P335Vv3FTpBONyrCQ XKmn5MeTQbbp1VA7VuTBqu5HgvQFPYm4Z53FD1EYGi29vWFQWVAWMEuCFgwoObZryvGV N0sSESpJp0zTvraExPC2h45KzAtdzwTfBmiZ6bRGqvx9/oESD+ER8dI46tfPGQ14vFPH de0em8ueO8e+y6aS9teulEcNbHk9Pxv5pKjNTgtyTRvoX8ZjaBC1yUb1WEqvuv+fqb9/ b2rUjr2yXgcWFVijQsex4y1RlyzGsvwBXqvCDZriv9wo5heMLdaFRRODT4I0W+LohNuk yjVQ== 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=noZ1Kc+J4nyrHrABZzAFflvlzcB1Er5gQQbDg7VGrHo=; b=WaApWxS6ow8qvSaUHeMO9zT1PijwI3zTWuK2SGxeGLbJ6pdScXfdPxdRshnSGqN4nE dJ0aNOrQt2t6erv8SE62sxc6pZdVrq/NsAlwNl1AXZRMkhb4TsjQZdV7xHTFJoV+VAif 9DE5rnZyzegPhYuGakKCpvmZ8mTM7qLpypDY6oan5QWdm2obPO60p2caK/OXR5WYHB1L N51tgD6MpSFsVnRmnmWhxGzziZmABPd4SzmycJnFDRFdGfmJLJNKFHT/XIrIatm8MEZN 6JzcPN6h33QQ+9xrPLgIHuUnMegyAv79kprtUduVKh5Sar+EJ3anYrqDnRiL56FYMldk Yiyg== X-Gm-Message-State: AOAM530pRRn4kCofoLQIfilHSeIyfKvzuhUupsBOqlt+yVjzf4kBUCpM g5talmFVtxKwM9zDqvlfyxnYjKgu7eAaNg== X-Google-Smtp-Source: ABdhPJwVEUOwFLV3YQNaEjAVlhr/SGvDAPcuaORxjLOGGwzF/dRoW0uLq4sTsKDh4BVLxRsT7oUqkA== X-Received: by 2002:ac8:7306:: with SMTP id x6mr4370882qto.272.1606938709573; Wed, 02 Dec 2020 11:51:49 -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 d82sm2800409qkc.14.2020.12.02.11.51.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:48 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 19/54] btrfs: handle btrfs_record_root_in_trans failure in btrfs_delete_subvolume Date: Wed, 2 Dec 2020 14:50:37 -0500 Message-Id: <348d8accd247be56cbc57597aadaa46c85f0a5b8.1606938211.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. 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 Wed Dec 2 19:50: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: 11946969 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 8D706C8301C for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3A18522201 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389797AbgLBTxV (ORCPT ); Wed, 2 Dec 2020 14:53:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389787AbgLBTxT (ORCPT ); Wed, 2 Dec 2020 14:53: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 43D85C061A56 for ; Wed, 2 Dec 2020 11:51:52 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id d5so1999659qtn.0 for ; Wed, 02 Dec 2020 11:51: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=Sg1NuD6dVVFgruSS4BU+5FD+ZRND5rY4rUtoxxk3cyQ=; b=ipiclPxbPor8oQbRhlDTCx66KmZ0cckJR4hYKYix35Ld8yWuQiINJgPeOX7E4Pd5dw ufZ1mwGccBpG47EwCjCFn9IOWJVtk/XzhKpYfSSCVXtj+OOXFZ3fjXzvErrwH1E03vL0 7yRkDMyS/m3D0F+85wlOFEKGX+GqC/ydRmt/E873vzg9aTZGBsVnHWTak06ocT10lC3k Tdhuyrexw+eAaEzeHiHyRYiDRf6o62DLRSVUYWXoM8aiV1t34CymWCV3QdWfsq+aexT3 MBMX/gAsFDplZSHjvl1l6+MQe1TOx413rBtVE+MoYWtf+LmO2ZgzcvXVWlI8ymjFHQuh vvng== 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=Sg1NuD6dVVFgruSS4BU+5FD+ZRND5rY4rUtoxxk3cyQ=; b=QQy0XdDL0PrAVSrqPoGbKEywGxzBgzcyUOYK6E/sm2ri/Xoqjo9f58R17ITBesECNT Q6WZN5Cfcdwc8+PPWvzRvnSOFS6ecQs6GPLoioU3cGMO0p5Y58C0OSaVNVUY5NuWJeJC 3tpzcgXZuvUGw47/vxZhpqEJoqQkRZ0D5esfyoY43zjb8ds6zzs9wrl6rPFKu4vSJ1Xj 1oqpcVHht5lBOi8+9xBow+tbLfKT4q1NbZpnMHMjZTumXGZrn3SQTgHASrEHans8bdG2 +uAwbjIINJVpIucHnbch+GOpMY6TFWRHWvtDdPw6ERv4DOeSqc7pJlSfhlai7tUz9OoR Yl6A== X-Gm-Message-State: AOAM533bJzG37Ne+qv1w8E6P3mwLeepkmHXq4wDYnzvEkxZCGjHG1Kmd gTnMG6CtlsXdejstImIYjbyDJEZHtX/MWg== X-Google-Smtp-Source: ABdhPJzNlP/IUIwhY9jT755T8pnj5Uzey6L1BoGNPcRxCBAm5+8XzY/5qcY3nK/4kNdfwScmfnQ89w== X-Received: by 2002:ac8:6d0:: with SMTP id j16mr4329523qth.106.1606938711213; Wed, 02 Dec 2020 11:51: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 v28sm2675430qkj.103.2020.12.02.11.51.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:50 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 20/54] btrfs: handle btrfs_record_root_in_trans failure in btrfs_recover_log_trees Date: Wed, 2 Dec 2020 14:50:38 -0500 Message-Id: <23564d0cd777eb33583aab981374438a47110c72.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946943 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 05478C83018 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A83E422201 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389739AbgLBTxD (ORCPT ); Wed, 2 Dec 2020 14:53:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389676AbgLBTxC (ORCPT ); Wed, 2 Dec 2020 14:53:02 -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 178E5C08C5F2 for ; Wed, 2 Dec 2020 11:51:54 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id b9so1534862qtr.2 for ; Wed, 02 Dec 2020 11:51:54 -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=cpRFpbJwjc1VtrsNDL89Je3YD+oxRs/o4NDDyn/8Hzs=; b=RlQ7oc8AkemX9ab8J/cbnpaSbU7kykMRdbWWcueC8CfTfMpbemuU3DVzV4fN/o0JLz ry2q99UHibDJu3JkdWH4ijk5FAOkqfxvUHQJ4gdLeINUmieMyVvlrwbd68J6gF7Ar9jm fgaJ6XYtH6FKbhhNccdLutDVDqkN7Oy776Irc6pEBNqwCVFQrcqOw5Pl4OIWafY2tuBc nPPSQIBdDGicPrccfRlsFxrreWtZesA76xsBoh6Dl0/eu5fMtes6iqSkNRuumTOnHEC9 KMiNpZY9fd4C5H5Hc2DvjA+UZ9S80FuiPQKr3PwUO+3Hva0c3EpVkwehVzxsD+L17swW zuow== 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=cpRFpbJwjc1VtrsNDL89Je3YD+oxRs/o4NDDyn/8Hzs=; b=aAvd8EPhnqV9YQ9VPhA33LEMJMCfHLYn3dQh9RvQ8g2z/9ZB3yMVAiJ1aCjsrcPKYT BwntxfeoYQEKH6CffnZoArxfBQSEHrMSrbh+kHJyoZa1o0vlZYGOUzyoKurbFEWB3esu 8QIS9mids7inebVO7KYySULNrxPoDraM3iOGO6kr3qmIVFQM8Lgdo1cvfrRtl46Fh0kW EKnKYv71wDXY3gmtdlxJ3rlLgHRHsxDcuQBawb02LnzOZ05oEPEkYyVn5qXmszdocaxH 7cowrS7pnI0isAW95LvQFfdwHLVFkNZi/Fj1MR/yUL54ywpfXKCOIe/FtGg9y45dMr4d T1jQ== X-Gm-Message-State: AOAM532O5SdLueUfPRdYA54xBe+iqkepDVp0jqrypUO81v7Waw5t/djG tq90nlIwQybkwvDlc4Lk/YGJ2JnTkFd/BQ== X-Google-Smtp-Source: ABdhPJwJFVoeAOFTkkWBbZvpRrtpP6hvvI/9C+uiKrKgEMn9orjfO63DU2aY59M7KShINGR+PkLZ4w== X-Received: by 2002:ac8:548e:: with SMTP id h14mr4370466qtq.326.1606938712976; Wed, 02 Dec 2020 11:51:52 -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 s23sm2982555qke.11.2020.12.02.11.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:52 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 21/54] btrfs: handle btrfs_record_root_in_trans failure in create_subvol Date: Wed, 2 Dec 2020 14:50:39 -0500 Message-Id: <8da8919da73bdaf0e652f03d59391e7710da6e5c.1606938211.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 create_subvol. Signed-off-by: Josef Bacik --- fs/btrfs/ioctl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 703212ff50a5..ad50e654ee64 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -714,7 +714,11 @@ 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_abort_transaction(trans, ret); + goto fail; + } ret = btrfs_create_subvol_root(trans, new_root, root, new_dirid); btrfs_put_root(new_root); From patchwork Wed Dec 2 19:50: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: 11946993 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 3D59FC8300F for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E6C1D22247 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389823AbgLBTx2 (ORCPT ); Wed, 2 Dec 2020 14:53:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388104AbgLBTx1 (ORCPT ); Wed, 2 Dec 2020 14:53:27 -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 13327C0613CF for ; Wed, 2 Dec 2020 11:51:56 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id f27so1979819qtv.6 for ; Wed, 02 Dec 2020 11:51:56 -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=TJ3iBofDfTQayLrbdSBBBumqFj8IhCBlom9HqaVoYTU=; b=bNQs3L2rsBXWKAgCO8vwOaYEynwU1c+fnA5iCqWUYKqRgpEQGsEOb+xFEaULZiz55M K9XOLtCieC5lathw+PxtBJondNQHPx5xf21aZq8g6MKXcWphxcfsGHsSDW/VwFsb/m42 d0u2z8ZLnikUDmJ0E4ecsBFSQs95djUPePk7y+W4loC147Y71bvFaM1J3GGIFwDBxKzX FaebB46JGb6TiuZzNiq6mMlKFxBJXb5ifJqyuxjyA1EguPyfsF/YbizKi2P0Dl5IO0YA WEi+cIrmpT807rrT33rQcZdqbzFRR3liHN6Q4bdMqfexm8b9YRNCM0CPkBFXH92XPZcG +Wbw== 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=TJ3iBofDfTQayLrbdSBBBumqFj8IhCBlom9HqaVoYTU=; b=pu6td0qqFmWVGziU3KD3nJ/eLcVosJrqa3PPvBDwC9Z7e2IViw1dXnpgTCVrhFj+zk tw3LacaTUvOR/jor3B2LO28kvpTCHzDta4KBbC5ifd8uYQ5wxHYw/xcDduFAb7DTcnWk J4xXqWtCdi/eSRBE43I9hImnoccQh3XkWkAkakMrpr24md6KhHxir4emyGD5n3I0zHfx x7XzyvESWHZpg6xznOtyDNb4uSbL620oH1BodXr4Gg2GmS3773ZX4h8FG3cABRWTz3Zq sz9U+B7kxU4Ak170WhIuha58HgpETpWn+Ve0jB4bjLXUpeGf8FsU+tvOOQjXmh9BlXz7 0EJA== X-Gm-Message-State: AOAM532w8u7Nf/RSJA28qbFbB/p/MhqPtN7067eZjv/S7rCftLjH9uAF 1rjJFeX580Xk8k9ODraP3TS33yRl9OfypA== X-Google-Smtp-Source: ABdhPJwZdfdd7Qc+WBVbCBB6cwXyRRNUKdt9CV0RKTgyzdx425AauhVbZ/wAJTB1REhx+w479POUxg== X-Received: by 2002:ac8:6b9a:: with SMTP id z26mr706178qts.200.1606938714670; Wed, 02 Dec 2020 11:51:54 -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 o23sm2685584qkk.84.2020.12.02.11.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:54 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 22/54] btrfs: btrfs: handle btrfs_record_root_in_trans failure in relocate_tree_block Date: Wed, 2 Dec 2020 14:50: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_record_root_in_trans will return errors in the future, so handle the error properly in relocate_tree_block. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 5a4b44857522..e9d445899818 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2559,7 +2559,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 Wed Dec 2 19:50: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: 11946929 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 C3BA7C83014 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7688422201 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389737AbgLBTxD (ORCPT ); Wed, 2 Dec 2020 14:53:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389691AbgLBTxC (ORCPT ); Wed, 2 Dec 2020 14:53:02 -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 C9D9FC08E85E for ; Wed, 2 Dec 2020 11:51:57 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id y18so2452028qki.11 for ; Wed, 02 Dec 2020 11:51:57 -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=QaiW4FzyC+zOGOky4p4C47IusTqXWMYivyuT/22/y+8=; b=yOnCkhht9WlRah/wvbRND56oA5PkJEoLkiC6wPpsIT95HIo25LGgdDlzithr6HturZ Ryb5UqVdxeYP/JahcsZvnSxsYk9CXjCj9zwPlKbd9GULHKPN9qFazjqzM+N4xs/E2thB VuJxmZlLKQySeiaUDItHDm5nl/+UcHpgMetpBZdVtR+QHspGOHVvtSdEwmrrZ6hF7U4a UQTxBYPZVyfk0xd5ZjzJ+5NBh0N3+DVGGqZcf1fPr5cTjpvujfIYXpnp3638wTSMVvE8 KqwKf08ybAbybBIA3Hq8LX8jXArCJ8/noLvpJJ9CgtZDv5gpZTBPhxE5vKNZ5EdTzylT Oq5Q== 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=QaiW4FzyC+zOGOky4p4C47IusTqXWMYivyuT/22/y+8=; b=Hb1G1zo7nQGQ8Yldplglgi/oc84qDFR0SxsB5Pu8nNUDQ8Vt/QeUZHS52K6UlPptNM mOfETyIcVGWf4RewcJnCs5HzDP/oi+KGzr04P214wsNz89I4Esd1ttUlyJz8G9pA7KCO S1cqKQStvWkiJfKiJO10dDppWrx4EzUMEqsv5kEXSD7NOI3iJj5wqALRPRA7h3HkCWBo 9G9/T2h1PVK2WZ0fpWFDUnnRs2EMMDdCN3i9KhbpXa7CdCwnu70L+m8u/pMWBfDlShl7 xICsR5bTp+/FY/FWJrYQBed2LOUR9qtIpsurc1HAZ+eiLCs2Fss596apQBBlE66zfsfx NORg== X-Gm-Message-State: AOAM531ysWMX8A74F/UTeHb9qbtKIyPFjkyHqrmyC552S2hfdyF4jFnL QR/z2HTpPVeFeACmhF/D+n74cvIm0ivMGw== X-Google-Smtp-Source: ABdhPJyoRUknv4BNL3HGpQbfypGuVQKw9kKc0FzSjfJGYNuW1IzAIHR9hlD4Da58weDaf4KWr7P/eQ== X-Received: by 2002:a05:620a:12e9:: with SMTP id f9mr4230872qkl.86.1606938716367; Wed, 02 Dec 2020 11:51:56 -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 5sm2816745qtp.55.2020.12.02.11.51.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:55 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 23/54] btrfs: handle btrfs_record_root_in_trans failure in start_transaction Date: Wed, 2 Dec 2020 14:50:41 -0500 Message-Id: <9d94f28749b1f526dd79f562be6c61f51bfbb8c3.1606938211.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 start_transaction. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946953 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 BBFDBC83020 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 872E622247 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389810AbgLBTxX (ORCPT ); Wed, 2 Dec 2020 14:53:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389802AbgLBTxW (ORCPT ); Wed, 2 Dec 2020 14:53:22 -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 48C8FC08E85F for ; Wed, 2 Dec 2020 11:51:59 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id y18so2452122qki.11 for ; Wed, 02 Dec 2020 11:51: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=vSfmesQF2fuwkpEDFiVhTe5hdHk1RkRcCl1beuLPJkM=; b=LBzWn4wdErAIem+tR3dAiiMnOA61J7fwvP/TvO4BXArEvUbsQC3lWXfIQ5W3YROHSp Pidc/4HxPGlA4jZemgHVbCWuefZT/nSCnyYZgpy+/QTxsikB/XtkC0vFq7wA6bfJ+ig2 OIfobw5TAZV8LAgWkWTRHIG4jxMckOwo0XkyuynvM7RXPgBbW2v/DwDLGe1To8y3XA2O eZaPA4nwpY7Kav9Fl6iToCRSxKyfqhh8kz3dLEpjO0f4PV4AgzRTQSwvD8AkOlFhgYai I+LnVwcmvTf7Ju7Tw8AGb3uxKFNK5GNnL0gs6SkWT7YUztKarmDFe5/bDCuMDbDhtq7K qYrg== 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=vSfmesQF2fuwkpEDFiVhTe5hdHk1RkRcCl1beuLPJkM=; b=iEqHM9K2nFSvB81SlfqyLF3XNQXP8BDxcZ4ck9FuWu54J2j4jgvXLulfj//Xiy4Scp /pTe7bE3AmzJAbBQdkeKCjd93vJH7ZEwATECtcP+Di7sI2GFNZyXigux0b4ltTM/oBM0 /o2Nq47661ypg05jnYahQonbY6TYsKsnmy0KWTPBgQewlXd92rlFJjB9TU/C+bOZxUE5 oiK8sdttdAdyOeTwfqCkUSGPPmVdxiRnjLx3Px0HJR5e+141eVm75MG7pTobdNF+Qml1 +aYMSH7wM89Xoxye5mrZClH8KcvkpW71+f8/ErUM1nosyQdU3zwJtkWJW5YqOj7SxxXK Idjg== X-Gm-Message-State: AOAM532bC4Y8LYuKsiagRGMB2+kOq0H6me8Z9e7H2LQvDqkKyZb3vUI4 ukr73Hcupkd23EMAgdM/G6ye1COURgMOJA== X-Google-Smtp-Source: ABdhPJyOL3PAGZVyHuIv4xJVG1MKwYjkBXmOVIWL4daon2upvTMGSYKRNVO8L2u0LE7j6jT+Y099HA== X-Received: by 2002:a37:9282:: with SMTP id u124mr4340880qkd.288.1606938718106; Wed, 02 Dec 2020 11:51: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 m54sm3033878qtc.29.2020.12.02.11.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:57 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 24/54] btrfs: handle record_root_in_trans failure in qgroup_account_snapshot Date: Wed, 2 Dec 2020 14:50: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 record_root_in_trans can fail currently, so handle this failure properly. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946923 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 37E64C71156 for ; Wed, 2 Dec 2020 19:53:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9525E22240 for ; Wed, 2 Dec 2020 19:53:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389617AbgLBTw7 (ORCPT ); Wed, 2 Dec 2020 14:52:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388416AbgLBTw6 (ORCPT ); Wed, 2 Dec 2020 14:52:58 -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 E7DDFC0613D6 for ; Wed, 2 Dec 2020 11:52:00 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id b144so2441603qkc.13 for ; Wed, 02 Dec 2020 11:52:00 -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=RWRpOmx8QBBnptaQoS+dNyZnEzg/7vUg2GDmmVeokmfGRJ4yy4BCdhODHYSpo68qdi /jCuPRFsceX6vyekje6mo5MgUMlbLygN1LIJssLTD3Tv3+kIZGdFxrbjgty6gyDUElRT rotRKr3IdZqoh/0keU8LUYeHsilq2jIv2uSu6+cqWNnJEkbgszPoQT/2rtj8HxbBJVc6 soji+wRLBdReErN1Obgi8G/+DPCXOMag6dlX/+mk3srFNchvrvTuTgNCnhPwhNbDzovm JMuSyeHYE3Pvn8tL9EY1zR2C3vOMWqePv7NW8vxIsI99GwmWGjT3KEcPgc8NDgv5yo4p bXsw== 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=DvGniRemgr/dR+wXq2iLttzzsCaH0oBLqeTM1gUaWPP+Nh4+Tu11FLeWvrlhgg3fDf f3bJQOeoTJH7+gnXRzIxVMIlALeMgPHTpHfaQHCl7mBy794nSAAsuNxuA7LjiGVbvxEp JCc2Gn5Pz1j2uXlKyx9mcIS0suPkl4RXjKtHMaLhpzLt5pTWxaRZm/Be1KPmtoL1r+XZ RgUe4FfAqUtulALemP2u1NptlV5396olYYdQEi8qf91Yc4Ke1xdIrCn0XYYgS9GF9RzW mjXN3n5TVUx2+jFIB7REWrBuA+XunoTD9+g1HmhOsQnyecDDpQ70HvJeYVQslbnKA4Xg Lq8A== X-Gm-Message-State: AOAM532XQtHa/Nkj9NmGefLMYw1pGTvq+tSLpx+ixELZkCxoe+0LrORY d4t9o3UjBvGpq18ekdnC8nVx1+v7hjmEXQ== X-Google-Smtp-Source: ABdhPJw5xk1B6D5zv/Hv0iIsigLbuCDLRRSvWG8Y2mNiZW849gxl7HpRh7aRgHls27f//rSyAdc6aw== X-Received: by 2002:a37:9ecc:: with SMTP id h195mr4100878qke.103.1606938719793; Wed, 02 Dec 2020 11:51:59 -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 q18sm3029578qkn.96.2020.12.02.11.51.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:51:59 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 25/54] btrfs: handle record_root_in_trans failure in btrfs_record_root_in_trans Date: Wed, 2 Dec 2020 14:50:43 -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 Wed Dec 2 19:50: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: 11946957 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 53478C83023 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1EE4D22201 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389821AbgLBTx2 (ORCPT ); Wed, 2 Dec 2020 14:53:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36782 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389811AbgLBTxX (ORCPT ); Wed, 2 Dec 2020 14:53:23 -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 A5D08C0617A6 for ; Wed, 2 Dec 2020 11:52:02 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id 7so1995821qtp.1 for ; Wed, 02 Dec 2020 11:52:02 -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=f3UGYaPU2/HXWinMncfhe1CzI/qZ87gqyzoYiNBn4Nk=; b=lfyK7r8LMYxBvyv3o3w2ck8hTFC6K0IiafvgDiN/uGwKAU1R25hUMMIPwzB81wiycb i6bM5RtE6L9GzFkd1wvs2uqXB1Akj4RtrqN5fSwTxzX6P1aFvMbnL3OMTuzhCORU8par lB1OuuG6Zb33oSs5gS6I+ECSC48IJHdZuSsUVvv8CxY619tKoVf7mNLrGsNM8nR12Aie y6f0Qp3v62onz9GowRZ7vOhlEQrVovpl+EaKZh3ZrB3YVRlw4O6eZDEzdxOLKlY008D6 GDtJlCUVdULfI19AImB6aYPsz7VJK00Wdz7kzP6qAEXC7jR8X5F2Wr6xkpXVCUsg9pxs MRNA== 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=f3UGYaPU2/HXWinMncfhe1CzI/qZ87gqyzoYiNBn4Nk=; b=YGq9dzM1cLAxTG4CsgjrCKJ/F5UPuGKiH93EzzDazJTsEl/q4gPpHxbfi/RydBm6Sr CNjZ4IqZpaHrco4HT+vXrJoF9gfs7qiHiP2s2BgimHWsSLcxTvJnmU7VFd6tJNKXLtQW RJ/aDM050DB5SbuzkjfDp7hVO6/7PbF1PTMBzROt4PUfDHgIrxNGov9XxJs1YjBXFQJW SmQHjbAhD3Pf3ezSx5xV9UOsxTOukxJ3bv0PjQVpAajqaBi0jW0c7yjp3Vs5JIeEuLw9 qqMXf1KLL5g7bBffnvPOSyJPTqsvUkA+KAVdHI3uqo/C35uzSx/xydRVw9zlXvOOuA5+ 2HHA== X-Gm-Message-State: AOAM533ljByh1XmUwZSaz4kmnscN5aYwc37nybuuCpcClhlZXGAkJxtQ xTaL1zp16a8F/yOdybzQLFfSd/A4NDCOSg== X-Google-Smtp-Source: ABdhPJz2ooWI4hm78Vk484nUi97VWsJC03JqyYTN906hCHnMBVOaBw99/TfJKcOzEy6rvDAArrSSBw== X-Received: by 2002:aed:32c4:: with SMTP id z62mr4202152qtd.50.1606938721476; Wed, 02 Dec 2020 11:52:01 -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 k32sm2811605qte.59.2020.12.02.11.52.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:00 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 26/54] btrfs: handle record_root_in_trans failure in create_pending_snapshot Date: Wed, 2 Dec 2020 14:50:44 -0500 Message-Id: <602641114c0a6c5ba07f78371a4d94fd1c442218.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946919 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.8 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,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 B98F5C71155 for ; Wed, 2 Dec 2020 19:53:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6744722203 for ; Wed, 2 Dec 2020 19:53:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389610AbgLBTw6 (ORCPT ); Wed, 2 Dec 2020 14:52:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388537AbgLBTw6 (ORCPT ); Wed, 2 Dec 2020 14:52:58 -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 54E69C0613D4 for ; Wed, 2 Dec 2020 11:52:04 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id i199so2465770qke.5 for ; Wed, 02 Dec 2020 11:52:04 -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=g/wWVdIbnRmYMsQJuVGsztVWuNetm0N60OpFYh3nQdc=; b=ATdOMHngf4LyJO4rjE9nFqTs1cPgyKAOOITCJoRAnsbuoVukwzAN/ECC258Ty6Ib4u /vhFp6eR9NwTwKqo7WLaOp2xGj1N/45Pi5nQAq//FUhK/JXqhtdp58KbCRDrgqe3mOBI kxaK9LQwOKVb5d9ggfFwDzT5o20+kAR0ZdRax+4SKhYkod5OaYg7CzLuPlR8/qajDEtZ +wjSrFlz8MjPaZLvWQAq8+tenjJWKNGrhmSbAaywl07gXlQt0uedHQEm5sFOgXESUO0k gp+6Cz7Itniml3HQ/wec6CxZMSLL04xnN+DpCYAV2DWhcTmaJ0rvPuIVHOrdfkW9kXUf uxmQ== 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=g/wWVdIbnRmYMsQJuVGsztVWuNetm0N60OpFYh3nQdc=; b=ZEcgNjogXXv4RREKW1RhYDX2vWCuNvMWjiB5s3EYZMfAB1pAl8xRlq+MXiLK7JzxXf 2P0Z/VeqFJ5DqYa2hqTMIuso3yzgeOJHVx2lDjNggoqX7jOzRGgh+xJO7Dfd55KrEc9e 1qsg+BSGm8NS/TDcCutSNImuTd79oyVmndsx9UAoHUzQzga3STnj8UI2VI1MmtoBjOyT xJHTr9QCaIAiFGjQadYoZr79ftGCWd5dg9NytKu97ZNxWf8fOBE8vyZi4CJK4sAwacar /u68GrbAN3eqgE6KIMIFHvVlpCYiU1oDa46qY2ko5JufG6XmdDhiOtveJR4HiNYYBo9r JEtw== X-Gm-Message-State: AOAM533XYQofBq9dYzoqxbcwqPuNrsrBhNxwjb84mwVdzWUxW4GzPVOU wIsZSddTot3L7tQe4Lcb2///+ULuCQJBZg== X-Google-Smtp-Source: ABdhPJxdSOuJMCctQwEYEhYsuiXDcRDNJxEJm2klOEdHEHpW6FhQfkoVxIc01fMGrB3RTxIvokpGig== X-Received: by 2002:a05:620a:347:: with SMTP id t7mr3763845qkm.164.1606938723253; Wed, 02 Dec 2020 11:52: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 c14sm2715856qko.29.2020.12.02.11.52.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:02 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 27/54] btrfs: do not panic in __add_reloc_root Date: Wed, 2 Dec 2020 14:50:45 -0500 Message-Id: <2bef28c4b030b238ebfd8a143f4ba08524b9312d.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 e9d445899818..7993a34a46ca 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -637,10 +637,12 @@ static int __must_check __add_reloc_root(struct btrfs_root *root) rb_node = rb_simple_insert(&rc->reloc_root_tree.rb_root, node->bytenr, &node->rb_node); spin_unlock(&rc->reloc_root_tree.lock); + ASSERT(rb_node == NULL); if (rb_node) { - btrfs_panic(fs_info, -EEXIST, + 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 Wed Dec 2 19:50: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: 11946971 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 B8EACC8301B for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6708A22203 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389818AbgLBTxY (ORCPT ); Wed, 2 Dec 2020 14:53:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389802AbgLBTxX (ORCPT ); Wed, 2 Dec 2020 14:53:23 -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 0FB23C0617A7 for ; Wed, 2 Dec 2020 11:52:06 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id b9so1535312qtr.2 for ; Wed, 02 Dec 2020 11:52:06 -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=z0Ugk0rFkbZ/xud4PafB395oaAw53VS/FKnPJZs/Gs8=; b=cbG8lm0YFTYd/WKJP0n5tZD7KAGUDsyRJqYcWgMA0EskbJ74ZYA3STrRET8zI/RCRC 1fOYODzUfa1lHs1AaIVtfrD4EY8sxTt0EO9zhr9zLStn/50lWSm7zn78jW0KCB17iQ6G i80OXv/Jkaff2McgszCeUMQ7ZdKUYc8RyRseLuXAeDOAjNPrFhbecxDQH9oRAbfr75UH 9sV9TUJgX/OwotAbkA67NBxUM8lm5LjO0/LunGsMhT5yDGr0tAEXEzlYBX3l4t/fBuKH ghQep8G2ifxe8k60iQYFh2gBVXo2PzzpLzIvNtmhY8F0FT7kJ0qrCqq7OUcAgvc/hOA5 GiHA== 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=z0Ugk0rFkbZ/xud4PafB395oaAw53VS/FKnPJZs/Gs8=; b=B3kmtJw5pBfzPsqjJLqhB7zHDuE4WVwizd6r7W/fu75ems/IHpEPmHLiRedggPMKy5 ELiqKruq6BQj0WabvefyCe3yjNgn+xuNhPffVSpucT68j4ZkSk/GVsCR/0trZXGgU/TP FUa1q0habQd8HSDRk6/SdQfbbem6q4jRJ8jQpdXhmbdp2cipP34Pti5xtDWry0cAwDsQ pMpGhRKNTcyh1GYkhsk1XHHtv+A4vcRL4I4btgBuIMEL8TfuINqD+BdvXlMLnRcT3wXO dDxDWEapDyAkLiQccZeKVhT6pZYMn6CsjOLe6FBfMecm+y+axi12PlWLHj/9akN1mhtS pwbg== X-Gm-Message-State: AOAM533MuZ/m+uE2eovT5EoXpXMQgX77zhYz8Tc2fOV/ULX+I4dacg9b vDhMOT4Nh8RKQuEkkVBdr8Dtq9FWB1pSAQ== X-Google-Smtp-Source: ABdhPJxcAFtySBiG2wgfXx+tgVag+dLJHCMshIqTAZlRagowWjQN9yMeOycjWNetpCo/R9gVEZs9lg== X-Received: by 2002:aed:2ae2:: with SMTP id t89mr4295905qtd.82.1606938725002; Wed, 02 Dec 2020 11:52: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 b3sm2601341qte.85.2020.12.02.11.52.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:04 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 28/54] btrfs: have proper error handling in btrfs_init_reloc_root Date: Wed, 2 Dec 2020 14:50:46 -0500 Message-Id: <102adf0f328cc4064a76e60e70274a3f7dcec8d3.1606938211.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 7993a34a46ca..6d3a80d54b32 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 Wed Dec 2 19:50: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: 11946931 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 6D7EEC71155 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1DD5922203 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389698AbgLBTxD (ORCPT ); Wed, 2 Dec 2020 14:53:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388416AbgLBTxC (ORCPT ); Wed, 2 Dec 2020 14:53:02 -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 BA99EC08E860 for ; Wed, 2 Dec 2020 11:52:07 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id b9so1535381qtr.2 for ; Wed, 02 Dec 2020 11:52: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=kUo76fLcAsALSQirbMUNUbbQZPoQ0cgMX4qI4IVPrQg=; b=gDhK4AlaM2vUrGnNyf8Is831BKGqTqbOsx2XBmqtotk+FG2+7UJnGFrtK8HjFEoJbQ bLfwieEdAHKkgf1DYDcdC+RxdiHDxmzjklQ/fFYHRmIs+l4gFT473j3ASmifOZWm9vfK gUhnlYW2VXS4cEMrYFQDfH88aido4uW91u5LMrUxp7uSvKaAFnfL9IQ3ByYb+j55vPP5 FkUOuFMaBSxQCbG/bmbdyS4SOo15XGXFdvdlwAFZ1WNViFyAsGAX8G/hcb1Abvan29Rj 80h/ke8IRmJE2uR3hTBIl5CGV8MlR8/l6zgyAGOMy1cIxXeV5lU5gFQxzd47B4xQ7ET6 mBpA== 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=kUo76fLcAsALSQirbMUNUbbQZPoQ0cgMX4qI4IVPrQg=; b=b7xPQ36AKFCpMuI2YTmsgvXPSc8fvoTfCxD7j5uIFGO+RWCRO01ydTYXdkdlGJ7kek 6enKMAaYKZn+aF1gghyMoHnfNZSPzVJLR5NajGbWsbrXeduzRaWYJ33OxkMkeV5Vl9Yn OE5FmmguI5tAO5NyBXQMFW1IBiQJy7+bFGUMKA4JJHxglWzIoT410ZzgbSzvdloMeo8C 3isP98JtRTPa6EaRENFPLxAoG/rsxxChQXUOrMkAYEaFPwq05Lnb9E79y/PgNC/jPd/O PyAl//uUwK+t80Rrte/fSv6f3BnSnVXv8YcGlcXINfYlIs+kuldETmUCzqmVRFYkEmsv +wmQ== X-Gm-Message-State: AOAM531ZC6ChXXCw6/hIlArejrlj2kAzLg3XR5eErg47hidnr5upo4ud +d+nxNUmfClOZC2UWOykyPu9nHng6c7pig== X-Google-Smtp-Source: ABdhPJyMqAMmP7nGfeQuplQ4tFC5UAQZXTLmjrbzETQklfXJiW4eTtdMOLOrpX+BtnqbO3PSGzrHkQ== X-Received: by 2002:ac8:590f:: with SMTP id 15mr4346637qty.249.1606938726690; Wed, 02 Dec 2020 11:52: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 d9sm2640983qtr.68.2020.12.02.11.52.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:06 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 29/54] btrfs: do proper error handling in create_reloc_root Date: Wed, 2 Dec 2020 14:50:47 -0500 Message-Id: <045a0b4cb56d0d79728ad98749a022cdf664ad5a.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 6d3a80d54b32..cebf8e9d7d96 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 Wed Dec 2 19:50: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: 11946983 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 B201BC83013 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7ABEA22201 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388104AbgLBTxe (ORCPT ); Wed, 2 Dec 2020 14:53:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389828AbgLBTxd (ORCPT ); Wed, 2 Dec 2020 14:53:33 -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 8B5A0C08E861 for ; Wed, 2 Dec 2020 11:52:09 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id 7so1996118qtp.1 for ; Wed, 02 Dec 2020 11:52:09 -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=jNrtG9846/kEJQvBoisAkpzRNcVVY2IovcaCwIO6TuA=; b=BTpdihMwoWKbedu43HITnSU8Q3/m5r48+7Ph5s17zepnX3SbzoZHczsJNWqObvRjd9 5lEcbJYVifjDb4KYgS48tKn4xbdgf51WKM6UBcxTZ/ofHWraExsAfngJHIfpM8HSPME2 jyesyk1ecVgdJHH1KURaEr7UqrSAU3t2v/QDqt8lDtLGjNeN5jpdXXZaiObxiD+Lc8yb lpyvxXzTdmJ1iV2sCQ3hejD1B2iOlqbn5v1Ia0x/nVrEGS4tnyuOuTBlFfXeCyBgkzpq 6KfPBpARKu4SkB6lpn5k4F3t5vpG3xbkGdjKFRijT047gaiGZptVRL6sLnkPLK+XsymX DgnQ== 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=jNrtG9846/kEJQvBoisAkpzRNcVVY2IovcaCwIO6TuA=; b=bGUbpQ/zxwQyKy9F6RW9LcKrKcIZpzw9x8wm7WY6mcnB9sNE8v5myronD8ZEe66Z1y IlXiSgjy5yVV3gzxAa2q76y5l2bkKcFK2pafI6CWjRwpTeIz3BbiE1jZtkHwlBehVYlE sAA3EkrUouOBSoGPW4TV036d0NIQALlunvnTIdGJpHFWszYwV8yw7hhsFSv81sxRrTRt W7DMZWKF6fvWE3emQCh8EQDGzOD37xPPEioudcIhbufcpzZFSK3tmfsxdoKJxxDd4UjH kGgWIi7k55Ulq+uSYddeYvpaGMfeBp37fPX3yRjgJdi1d/iAyxhsRf1p39/fdS13P4Fw JiQA== X-Gm-Message-State: AOAM5318CLOsNWSkcvA52dszJia8iZgUIursfTUjC+qg4+Un+7ucSFFJ f3WlhtVu7K6ojon//YGAxwcfyGCVRlDIsQ== X-Google-Smtp-Source: ABdhPJyhXS1p47Gjxw/jK7v89vBwC/aReTlhQIFfP6O6lHz6bZC7VNT7+1w8UxKpWoYPFE6rrX/pXg== X-Received: by 2002:ac8:7316:: with SMTP id x22mr4321658qto.386.1606938728437; Wed, 02 Dec 2020 11:52: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 m54sm3034535qtc.29.2020.12.02.11.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:07 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Zygo Blaxell Subject: [PATCH v3 30/54] btrfs: validate ->reloc_root after recording root in trans Date: Wed, 2 Dec 2020 14:50:48 -0500 Message-Id: <60d12b7256e6877061eaa9df99ce2ed1f0f3d012.1606938211.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 cebf8e9d7d96..c9df05f02649 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2078,6 +2078,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 @@ -2579,6 +2586,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 Wed Dec 2 19:50: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: 11946933 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 9A484C64E7C for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4AE7C22240 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731137AbgLBTxE (ORCPT ); Wed, 2 Dec 2020 14:53:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389676AbgLBTxD (ORCPT ); Wed, 2 Dec 2020 14:53:03 -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 C7851C08E862 for ; Wed, 2 Dec 2020 11:52:11 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id z188so2458567qke.9 for ; Wed, 02 Dec 2020 11:52: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=YLT30jDDPjAI9bRwtfTiSJ+iMHBOrJFaI2d0TTwoY0c=; b=zfj1rWnfKvYiiVDZ3U3D85irQ/R0iNQvgHYf1zv+K66nQNrz2VobeWohWqEqwz2M2e e3eJV1QIUdw8j6TyGPpT6FoJICaHkmWIVQRG0uG23zdzg3U5KEP6LkrUOyIsNyz91Xab isRxrM4zuDH1nRIQO+HrSpoDYUf8QtPMhs9IeVD6GONd5XG76JqFDw8dOxSmQO18vDrU yNzq78kMJCzCyuRqVMvg/dfNbiB7C4D/UeLk0yvdCIxobJWJvymBwUsrdlMKWfVaH7lQ dWEeANiu8oincLEYQZ95SkIG9m7xUP5ZH4kUtBQTaLGOgY4Y3qhm0D8WNAikZW4qPoGn rcQg== 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=YLT30jDDPjAI9bRwtfTiSJ+iMHBOrJFaI2d0TTwoY0c=; b=i1BTBIctky5TYiXI28YZNrTaIr73v8yIaqE7jKNkk2n02g5RUw/QfWQUpcyLR3P8KQ GS1MzpPrnlJqSButR2fquK1lJi8F1NoGLviUIOfQE4JBbNnxBesh3clgRj0GE8K6Z8em o0KuisbpCeSMSYwugmEp7O9KLypB8ZvN2J/PZOGV1Vh+u35ifr4FnjhWI+DN+jm94eAx ZHYRizwybZFODTH4nUF+9UmUeURReL7QeUQ4jXgL6hR8KV6GkKDgJ7aPuwpZICGbr/5A EY6Jp1Wvpzv6acZIr72oTeoXzfVuuP/mxFJ5DH6HdoaBcNEt9soTsW4gf6lKHr8PmMB9 3YsQ== X-Gm-Message-State: AOAM530a8WW6oJX+AsQo05d3KyeTBBbl95xP6JCtTHyXIgQHKMwYUKRN VOL367d5B4lpDCVkTWWk1XbsR/91wDRT7Q== X-Google-Smtp-Source: ABdhPJzHGze7qffb7A8pf3MGfLidKjwW2EWAKoFJcTH8GgKcsY3x+pAauFSQQoXEYIFeh9mVPn0mdA== X-Received: by 2002:ae9:edcb:: with SMTP id c194mr4264874qkg.46.1606938730552; Wed, 02 Dec 2020 11:52:10 -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 189sm2906402qkn.125.2020.12.02.11.52.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:09 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 31/54] btrfs: handle btrfs_update_reloc_root failure in commit_fs_roots Date: Wed, 2 Dec 2020 14:50:49 -0500 Message-Id: <55ff15d8ef98e0eab03044fc75e44d6cb2bc64b5.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:50: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: 11946997 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 8B044C71156 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 385D122201 for ; Wed, 2 Dec 2020 19:53:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389850AbgLBTxh (ORCPT ); Wed, 2 Dec 2020 14:53:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389839AbgLBTxe (ORCPT ); Wed, 2 Dec 2020 14:53:34 -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 533D5C08E863 for ; Wed, 2 Dec 2020 11:52:13 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id 7so1996307qtp.1 for ; Wed, 02 Dec 2020 11:52: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=OX6WrPTbzeZRdN+o3wHO9+qTtQHxTk57fWbzaJs7QH0=; b=Ym15HeGz8osURV7FfiqxpSaEpEbate4HMMyHMhB4HDNeOfL61uig0HQJuKCtx9fQb1 OQMMj1G6Jj/Z8XFU8CghYF7XkOhcreN96Wc0xr+hu4McBQt3JkTSjXGpN+4EJjqqrR37 ucNqzeUnAik3qrPIkBiL2zJZ4zkAiGx9k49Aq8ACM7uvNtzxMz1JRAG/NQ4cUcVPm0KC 7I/MoaJHzLmikXa1EJNz0YPMPGCsMCcHlFQmELj1JQGv5Qy//ep4777ZIn4bYct0qJFA lfrXv2RlJKRrCT7UjoMHR/zuVeZu0zDpo633bjocLzstPGPpUqIX3KihA9fKrArb8igl pihg== 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=OX6WrPTbzeZRdN+o3wHO9+qTtQHxTk57fWbzaJs7QH0=; b=axYuwTiCPLm+Z6N9dxnRk3z1UvLkCSVzR6Jq1mGt80LtwlgPFV8q7xcstP/0pl8W2C 3e9QHa9LdqF3OSRUcJvXS3pbSTnYUrClxhlaP6ORsXqCDI+MpAjF0k6x/cEQlZl020Jw GbEj8EWSlOoDQOzBGavvbweBG5AH0TqHDKi+4a/sXcjsJpdg/6EN4m7NzUZYACn6bTwT MkYuUkc2s6EaUaZkBMskPawJtFokjvOOstNOzPjYmNFBjJKaiH55XnY5Yy9vDpf9wmdR hSrG4E0iyxslT5WAa9TklZkzzDPGYfrs6YoovTgGG8MaWa/RQj2LYP4VnwzPFq1q+5aB dcuQ== X-Gm-Message-State: AOAM5339xBgnEFcRv0Fht9YiK/XEixdMr5oUBvpGvQLSqLFiSdVToAI4 d9xkJtfnUioj75J3V5J1pOI74H92WuHm/A== X-Google-Smtp-Source: ABdhPJyvKxfSxIdP1BRYAAR2Mu90rk9g9wmfuETIEt94eXalWY0g0Sx0W5/PQ9yTHMxUiswSa/ri7Q== X-Received: by 2002:aed:2bc3:: with SMTP id e61mr4370910qtd.276.1606938732158; Wed, 02 Dec 2020 11:52: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 u72sm2995129qka.15.2020.12.02.11.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:11 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 32/54] btrfs: change insert_dirty_subvol to return errors Date: Wed, 2 Dec 2020 14:50: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 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 c9df05f02649..6b2d7168f98e 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 Wed Dec 2 19:50: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: 11946939 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 C1F80C71156 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 76CE222247 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731148AbgLBTxF (ORCPT ); Wed, 2 Dec 2020 14:53:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726463AbgLBTxE (ORCPT ); Wed, 2 Dec 2020 14:53:04 -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 0C112C08E864 for ; Wed, 2 Dec 2020 11:52:15 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id z188so2458743qke.9 for ; Wed, 02 Dec 2020 11:52: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=TTb/5zE+ygBXYb5Zd2mchi73Z/HKs2TAejUgXdrdOJQ=; b=oWYRuITNDbi4YwfUM0BtkfWrlPU/t/MNtPfkrrr45kI9zANDLupoO0BC1cgluTMQVH 1KR7ykoOA3vJo2LJUR/7M48WmvJlrqpWCjRGBEeFVn0MZZexDUtMnXrVx36I08vzTXKP MbBNr/aRl13h+KDmxmScbRraUrNClWCSKwiP8Ffp1ZfYhlgRdBYr45QW0uBmEtzPMQyo KaMZgR78YZpHtWh50m7SDbH7/JuGtKtMJi/ICaUga3SKUzBieuOmQ80Q+Qy3PhC4oXWU ojG94+vrRd0sVmieimWlmgynWaFz6+wfeAebpshY/iWFPsEy6dqcuKthNBcanasmW2LY Sz2A== 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=TTb/5zE+ygBXYb5Zd2mchi73Z/HKs2TAejUgXdrdOJQ=; b=Yp7+b33i1LMJnt5MUNGFvXtnTuas9LIUAlPeEjUU3uzruVP2cFDT71YMVks0pw8X+9 +tX67fNSi3gRSKdH1VwAgB+U1+PO1Ta9x/PQCjtl6/vDpDDa9D8sPhY+RIMi7STL0O/F ungGbcTwBrBkzDjHKaEcwc8Usrso2GhRUFfGHo+2HRwj2KG45LMNnH7N3oRuavY2q4DY pwLzccyaY4XqNehr4CTmDZp++fmMqpxLLmnSftcnkXjyMyezrd26neUg4IcQG8ncAmLe 3vj1nT2B1tlTV/ylOO1R12xgrIPO9+Fgkrw+k+iEMIWS0w2TO1qbs9al1uAcDm/FKG4n uFBA== X-Gm-Message-State: AOAM532EL34HJfVzac+gip0m8b8Q4mSspQ5WxL7/KxM8te8tCqM6OcZu gW713cGgsRHM8Sgs2ZYNYu/vjmtX4aId0g== X-Google-Smtp-Source: ABdhPJzveWByL2Uvj0+7jLKxs7WrjnlaZ3pz5SiQ/SjjCWdmMVGWFQkGO4ewTjjvDE+xQ3cJdPG9KQ== X-Received: by 2002:a37:5185:: with SMTP id f127mr4233069qkb.225.1606938733924; Wed, 02 Dec 2020 11:52: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 i11sm3054203qkg.45.2020.12.02.11.52.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:13 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 33/54] btrfs: handle btrfs_update_reloc_root failure in insert_dirty_subvol Date: Wed, 2 Dec 2020 14:50:51 -0500 Message-Id: <7db77da1018bf56f0256a29aeb68ab585d212466.1606938211.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 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 6b2d7168f98e..96cc9376b3a6 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 Wed Dec 2 19:50: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: 11946965 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 87C4FC83022 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4C2C922203 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389826AbgLBTxa (ORCPT ); Wed, 2 Dec 2020 14:53:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388104AbgLBTx3 (ORCPT ); Wed, 2 Dec 2020 14:53:29 -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 D03A5C08E9AA for ; Wed, 2 Dec 2020 11:52:16 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id z188so2458843qke.9 for ; Wed, 02 Dec 2020 11:52:16 -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=Ux6kb1oPImsvcNd1bSX4gOEAsxeEfeZNSXoy0UM5v5A=; b=Obpzvc54ulx8GTRq2PuKO6EzySLWy06U/yRgmfcf9WYmNKUswB8t95NwCdXdswv8At 59naaC00eAgYGfBy0Mfbf0kNP6Nlrjex9eNxXGa3itFruRowU0eiNMfh00RhIzciEPkh T4AHxxdPR9w2Ts0jnx9pHEESeC1lwEYMc9fI9DhmRCo6GCqtgUibHf/5IpkkjeE3e9mp sdJqIzfTVa6q3CmHUQCCTdvPsifk5hCQuA9utnjYFzGqKWHyKGjiRskQDEQ+VocblWOd CNCWhYn63xmgA01kAryyQEq4eeOIfyzyabbY5dsm/lg+7L+nfqfHIBFcm9b27x9uq4Gk scvA== 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=Ux6kb1oPImsvcNd1bSX4gOEAsxeEfeZNSXoy0UM5v5A=; b=rHYlrbSnrMmTp++BzV96lxc8l2MAh9+F2JOJTkDGgm1jnPO8j8wmSvpZ2K+WWotnJe YcxDpiMch3wjnXJLrBuW/ubx97aKrUiDUMVYivkTzbyeIPErtI6KIaDTItUPoxC1c4Rf AQiGM/f8P+L+qFYkf3rForq0bP8M1EiqYDtBl2sAXvGocoSBu83nvPaZ2qVr6s1zWYq5 fePp33ZR1AIu5OrfD4eeWv+rYXL5HCfvgUAnAwXXswbUpIS+PAXJXspLfyw/BCGZnSJK 1JYIv/KGqlPTE+2j0KYBP08o2Uc15ExMNO24auxXRMGA786+mysQD8HoXwhOWYNDvP6a FULA== X-Gm-Message-State: AOAM531ToOAZujkQhEczo7umOmKJc6sSTQcBKXWn7aQoyLsw9wkbfLJf z5n117Dm05Z+P0RjDNFKA0nc+j+E/CRG8Q== X-Google-Smtp-Source: ABdhPJzP5+Unlt8siDQl7/nLYPmNYm33eAJDPdF8vIx1hZU3WFDddVtz8XQKRz1ambblf7YnVZLlvQ== X-Received: by 2002:a05:620a:80d:: with SMTP id s13mr4147971qks.133.1606938735675; Wed, 02 Dec 2020 11:52:15 -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 u22sm2627138qkk.51.2020.12.02.11.52.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:15 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 34/54] btrfs: handle btrfs_update_reloc_root failure in prepare_to_merge Date: Wed, 2 Dec 2020 14:50:52 -0500 Message-Id: <92a4360d1451dacd1da485abfcc95dce801b0293.1606938211.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 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 96cc9376b3a6..e41d14958b8b 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 Wed Dec 2 19:50: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: 11946937 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 0659DC83013 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A4BDC2224A for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389753AbgLBTxG (ORCPT ); Wed, 2 Dec 2020 14:53:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726463AbgLBTxG (ORCPT ); Wed, 2 Dec 2020 14:53:06 -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 7FA99C08ED7E for ; Wed, 2 Dec 2020 11:52:18 -0800 (PST) Received: by mail-qt1-x843.google.com with SMTP id f27so1980780qtv.6 for ; Wed, 02 Dec 2020 11:52: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=jVT9E1U8ZeeJL6ProMQL7eX7XKP2lcNPsO1kcV6xP1E=; b=RTN1YfQjFGt6lMLDLsE1XsjeARPos0Up2rzo4wvx5SLb+CdbeEK+DyInX6NrdzrKJB E5kOinKDtgAxNRZss9/ke/1Nr9HSvHApsCEoWfwfjL1eY/V6qbA9bNsLyu/lgCXY/xCr lTPR8x16C8KtVUZhzjaDax1ItJzf2szVnR/jYaBJxU6Qy5L1Xd5NCGAEcbMpe0zDDA3Q gebq2GRuNyNteVsZ615D5EKO1gBG7KQVlsbF4c+5DWcSB9tPnOoZO6W5HcxWX42JMDuv Cux88jdv44jbl1gY2MIP4zpV9GaoBnqEDeRwYmyVmhlfUnATamHZnXkBCHQYY2AHT8Ak anUA== 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=jVT9E1U8ZeeJL6ProMQL7eX7XKP2lcNPsO1kcV6xP1E=; b=XdfDoYxktzlWOIYoiDzgmCrc1X394dsctk5sTOlooHl7deu/gLY5cYbo6s3dO8QIqy btKigptQ2cJs8eGhTDPbQtI7i7TsFtyzcz7VJ6G7o1d+HEMx0wL8cKCWUH1hp3Hm+cF1 pxaXHb2/ZN0JfS1eN/+EjiZ9qEWgpEqWOzfHfXXsDbGhBXGbq19GfSyL77htRMt94mld CtRH4hQfjq53bRjEKkk3aWFjwjDy7QLwZozN0PceG3ZZzZG1lukU9edKpu2XtxwKA3SL ik9mLy8izDpWpeyte6W0b2NIF540K/UiSXIE3LG0HGbXXByoMjFZjC3eYrvjWzzCUEw4 PFvA== X-Gm-Message-State: AOAM532liM+CMcjBmyKSkvekrytyCi6dlQD6GWmz3pdG/muqNJ0ko6yz 2kmpF6ZJlL5H0QrOvoSK7CAP6gFJ9lF9Jw== X-Google-Smtp-Source: ABdhPJyoqwxJAD4D5BDBN2r2tIZY7V1dkGgZvnMaXKOFtNpNdMPwSyOj0HpOs24Qxwrn+KZK/ex3AA== X-Received: by 2002:ac8:7589:: with SMTP id s9mr4288324qtq.238.1606938737349; Wed, 02 Dec 2020 11:52: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 b4sm2789819qtt.52.2020.12.02.11.52.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:16 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 35/54] btrfs: do proper error handling in btrfs_update_reloc_root Date: Wed, 2 Dec 2020 14:50: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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 e41d14958b8b..2fcb07bc8450 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 Wed Dec 2 19:50: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: 11946935 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 27EC5C8300F for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D2D1422203 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389761AbgLBTxO (ORCPT ); Wed, 2 Dec 2020 14:53:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387412AbgLBTxN (ORCPT ); Wed, 2 Dec 2020 14:53:13 -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 2434DC094240 for ; Wed, 2 Dec 2020 11:52:20 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id b9so1535848qtr.2 for ; Wed, 02 Dec 2020 11:52:20 -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=5lapE7qpsjWGx29+FZ7863fV6bSKEyu6jWFWb0w/eaw=; b=pIglmT57LIs7b6cHHLT/UpZKL26MrxgxLZjWuSwTQhcdhr5uo+SqxHArobLw8z2eYQ 35scIghgKaF4IWd+0cr7UkU/U+zuo7nSNlCepuKczcZvVY+loMZs/KX4Cnr1kOJ97pNu z2hvX1V6kcskUiGGbjUjfpfP8mVIdve5kvT7FM+l8MFyiVaGLQ4VAfJQIrC9KSBaT2+C Gjn0shoedhnGVajT1sohkhwbyTvae8el8BuTYlFgisk4bux9If5B3fg2CWqvk+SLeTfc XB9vcmGKzb4HEkcjNvQV6E/KawAe9pxjej9Oe/tGqNgmjLKT/v3zd5TL2EHVe2oZfpkj Qi3w== 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=5lapE7qpsjWGx29+FZ7863fV6bSKEyu6jWFWb0w/eaw=; b=eeGVPUjGMmsvBakM5dGTHMNQ+xcBlq7vdgEpIggN/Kx/7X88xHpXafWf42vnTwbZ09 cqSKlEdf/+m6mHZACPi1w7ojd3H28mKp7gcpezcshBI8ug8JAtlvkHWp5JOsjqLYGGzQ U2A80lxcnjeVPlDKD6cJWtrXjhCPreAapGR81OW+UGdAAIOgcpboZQjEfGkaDeqidk89 SsHbJqWiheM9Gp5SOIM7dDN4kvd4/lMABD2ih5ReqZZ9usuYN9McR1j4l3XyfjMm4Ejn FhDS2XxSvxyZWxHqYiKJ8OOFxJaRrvrOWVYFSmEEmuVlXTES5PjKWflxTuSk5Ss+JI3i +Rmg== X-Gm-Message-State: AOAM530Zn35DgJG+SkVO7qxFD67b7hhQqSquYcQxwOeoSQVjxFLhCRhM r52tKRoQdMoYt8SEHkqNwB01LKgOHUuafw== X-Google-Smtp-Source: ABdhPJyl0+XSHN2SwWEccX2Mr82GBAfEq2dIn6mrPHWNVp+J2GV9on6xGuBVGtDfmDO19l5m+kfoEw== X-Received: by 2002:ac8:6c4:: with SMTP id j4mr202966qth.174.1606938739072; Wed, 02 Dec 2020 11:52: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 e19sm2798640qtp.83.2020.12.02.11.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:18 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 36/54] btrfs: convert logic BUG_ON()'s in replace_path to ASSERT()'s Date: Wed, 2 Dec 2020 14:50:54 -0500 Message-Id: <118c78ea8991141e12c404753fa851e055de61ef.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 2fcb07bc8450..b872a64de8bb 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 Wed Dec 2 19:50: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: 11946949 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 18A7DC8301A for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9720522203 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389791AbgLBTxT (ORCPT ); Wed, 2 Dec 2020 14:53:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389770AbgLBTxT (ORCPT ); Wed, 2 Dec 2020 14:53:19 -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 103B5C094241 for ; Wed, 2 Dec 2020 11:52:22 -0800 (PST) Received: by mail-qt1-x844.google.com with SMTP id f27so1980923qtv.6 for ; Wed, 02 Dec 2020 11:52:22 -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=2Ycmgq7m/f14gdbOTd/vz5fekccrt/XmcdSLSn8cRv4=; b=PCXsEhuSzGvo0wjYMk/1OockXiLCxdPI5MD2eyR9zd0zU3D8h7H2rdPPCAvraaKb+v SFe5YQVHBxape0HT/cWBZQJK98Uq84eeyRwiPg5dEJq9hlnDxmxKl3OQdEJzCPtRyAu5 HxXmazLnSZSDsBm7ViJQVfmybk1K4GqzKwP6BgSmPy5xE6C3BwGQtCow2bdpdP4HFAll Py52AkhHrIZ6WQ5UMxpYPAEXQLCTM/Iv64vs8c5cJ1ixO/Ygun8iHT3rP9PaS1EkScxs 1e1bMYbjl0GeoTMIYsgY1uhh2ClZrj4TUF3JRg8tPU09h/1GFRaScq+nM3/R1R5JqZeB fOSw== 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=2Ycmgq7m/f14gdbOTd/vz5fekccrt/XmcdSLSn8cRv4=; b=uBRV1i5w+IYgIHqI3roo9ACMacsM3MALeB9hthijgvi/mbjA906Efq+G5fEdoltZMn 2hwehQ5gZ6iQ2DzwoCf7wxu2VpR3CUT3oGNZoRgTWUND14Uem8WWVlGdsk5WD6fgo1P1 WiKQ8BBOM8+5G6aeIRVWKUz1GWbxiyyQH1CUmooAQK/H823ib6zn2yibCkkIUG0nYo2u +4Fq9VIZ160qumD7jT+9KjhPgGdw4ncf/HRH16lcPKlIbL1aUTaAiFDsEx4/fZSM8OGh RiinHFsAO3e1AkFM/shMVsQKHgkxNG3gBUE3t/tIRT6qp9NHUuOU9BRyQlqYYrnLT7kB mleQ== X-Gm-Message-State: AOAM530HNqdIWNO7j7R0c+fpvxZY1P2195J0ldV3uJ1gbTmawTBULAdL 89nTx/SKwuqXaqPbGIblXpNXyLJJReUrFA== X-Google-Smtp-Source: ABdhPJyIewjCU75W0V2sBCknozkWsR2chyjWcouSDw/TjSy1GXV7KKjt1IOqxb3KFEzXW7p83p38UA== X-Received: by 2002:ac8:7b85:: with SMTP id p5mr2005956qtu.264.1606938740877; Wed, 02 Dec 2020 11:52: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 h24sm2899434qkj.85.2020.12.02.11.52.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:20 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 37/54] btrfs: handle initial btrfs_cow_block error in replace_path Date: Wed, 2 Dec 2020 14:50:55 -0500 Message-Id: <6b80c4787250be970ff8bb1c1f261492cafba7df.1606938211.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 error out cow'ing the root node when doing a replace_path then we simply unlock and free the buffer and return the error. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/relocation.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index b872a64de8bb..52d6e7ab4265 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) { From patchwork Wed Dec 2 19:50: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: 11946961 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 8DFD4C8301E for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5A28222203 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389806AbgLBTxW (ORCPT ); Wed, 2 Dec 2020 14:53:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389799AbgLBTxV (ORCPT ); Wed, 2 Dec 2020 14:53: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 CDC62C094242 for ; Wed, 2 Dec 2020 11:52:23 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id u4so2466122qkk.10 for ; Wed, 02 Dec 2020 11:52: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=zulpyi5SLM44cKCfoKl/mIq7LY9yIfa92iZ4+KP+dxE=; b=kDbVce4eMU33vD6nh7UvUFjcOSyxZLaTytpyX4UpDzv4/V4/RzgOoHK5mm5C9boZxm A7j2Wt1vV+g0ChREosk+ZIBIn0NFXI7RtGj/wdTcz/tTRksDw3MrMlw6URmiFs22/mbB okcdSLzWtMftr9OBAOea6W8yQ3sjjA5hBC/sf39I374AFNZOxfdQ7o3dVd81W1fCO5CQ 71P5TKuYMi7tSaGFdulC6zrBoXEkZEkZA8AHd7Rpg/b71FiMULIZN3/oBzl6a0QPoGw3 X7cVFc88+hEDU0QtckriPLvRv3We1N1lfdL4RrJBMqo/R5NClQ84v7inJH8+WFs95QIj /p/w== 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=zulpyi5SLM44cKCfoKl/mIq7LY9yIfa92iZ4+KP+dxE=; b=aJNk0+aoKXRC5hmybTA7/aItjMJJfiZ0FX/aBbLQb9AsSFFYeLAbxn26cG1PwfnEzI 3NW8aqDmSEPRjbG5jATYgOCIPEy5vjESahcsAtUO2iJR2b4EeJTDTZFkAplIl5DtzY/u dDte/uqLPskRTKzW6tu8ozTE1PL9/XRTFdckAtkEjXDTKKNCBEFyM47MekMalHm+z9yz ZMx+f791BWV8+f2xJ0AMoY7Kl4UwZaCn7t1c+ntiqAAz4ciSRb7kB2P9stb0MTfbPbMS xpeYshfL4WLvYzBbA9WsxY60WT320uVQ7HKpA2g1MKhQgUlgeLIhHq+nOX6FMLWlTOmj PZig== X-Gm-Message-State: AOAM5335SS4VJXF2mM1zHdWgrnaOEi+0/HPhVP+MpUS/JqFyRMGfqiXG XpRD1BF0d6JWKc625XQjLwJwB/fWhreNPQ== X-Google-Smtp-Source: ABdhPJwB7EIroXffxLQVt/6QwLQwN77dYE7Har8zPEb/bHnBRaTc8saC21RuTsLXmehUL1DmneTawQ== X-Received: by 2002:a37:4f4e:: with SMTP id d75mr3870912qkb.284.1606938742692; Wed, 02 Dec 2020 11:52: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 v6sm2768201qkh.83.2020.12.02.11.52.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:22 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 38/54] btrfs: handle the loop btrfs_cow_block error in replace_path Date: Wed, 2 Dec 2020 14:50: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 As we loop through the path to replace it, we will have to cow each node we hit on the path down to the lowest_level. If this fails we simply unlock and free the block and break from the loop. Signed-off-by: Josef Bacik --- fs/btrfs/relocation.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 52d6e7ab4265..781908f3a3af 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1286,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 Wed Dec 2 19:50: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: 11946947 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 42AE2C83016 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0D36022240 for ; Wed, 2 Dec 2020 19:53:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389765AbgLBTxQ (ORCPT ); Wed, 2 Dec 2020 14:53:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387412AbgLBTxP (ORCPT ); Wed, 2 Dec 2020 14:53:15 -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 B224DC094243 for ; Wed, 2 Dec 2020 11:52:25 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id k4so1966277qtj.10 for ; Wed, 02 Dec 2020 11:52:25 -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=41wznrbbP7EJRnAZgFwcJ8Zc4Rn6ZDo/o1TGdHD4OCU=; b=BP9QevaUxLQzT6aaGjXRBcHwG734FzM/Cq43dRbCEPPh/ppp+j1DaSmKzT87GkSDJk V2id0t8pgjkiJQAo5a3AcFRLLQL5xauwe2CdToRtQQsW9sUmDngUDXXS675IZWrgs7q2 W7VZhEm1J1N3TtPH9LtmtLBIXHcYTTSAd4pFjOLTolr2mYi0qeawNn7eNonXedx5218Z 8puprf4L57r0UsyFVsw4sz22JG+VCoGb14azCb5yK/+DWasD+8IkM1k3GgPZcq/h9hg8 FhCx2My8OJduLF1Shp1wDuPWvm1uRwruCjj6GXifK7UPz1zk32jjnHsfcBfiy7axokd8 YLUA== 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=41wznrbbP7EJRnAZgFwcJ8Zc4Rn6ZDo/o1TGdHD4OCU=; b=knmz4L6ec37ca4P9WoB2JLxaOqJY4Oc2+uE8UBJ+slO8g3WGLixZ3+dCBDd6W8NUDz POeOf1yEmZQj2v7dJEsf8U4cj/HCOr/DZhxW6T03Vvn02vihxJ1InOJuJoslFT9ptJFZ z76Ecf+62ultjamxSFyZmVPmLnqSkFqeZCx/FJ2K8qwivRZSnV50FSDHs+suHtTQL5Oz mV/q4mPRbB4C7RgZV3Fz4th0nUbGYmsDo9OiPr7UPNvFxEF9aIPl7n4ROY2dKw8FKnXG ktJ9gfMqr0yMi+eTD79dRXwBF9YWSwVr2qL3X9j+7iXrmLewE3nRzbANWPKB5a+fSKui vy1A== X-Gm-Message-State: AOAM531fQska93sI+F+HHbrLU+CR+WP7Ia405jy+Kq/0UKyezNKDo+0/ vvWmPVTtwdTSEAb/MIiY0s58wwrKK7vvIg== X-Google-Smtp-Source: ABdhPJwxclJq9XbBbfyX+Q0mL1HD3vCQCH499xpAtfi1xxAskNRwrdJcMTc++lgtBfgeW/HBDzgTng== X-Received: by 2002:aed:2ae2:: with SMTP id t89mr4297169qtd.82.1606938744611; Wed, 02 Dec 2020 11:52: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 b14sm2841684qti.97.2020.12.02.11.52.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:23 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 39/54] btrfs: handle btrfs_search_slot failure in replace_path Date: Wed, 2 Dec 2020 14:50:57 -0500 Message-Id: <3ad95395a035d5364f77170c6d734b96f7ecc345.1606938211.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? Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 781908f3a3af..8c407ebc5500 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 Wed Dec 2 19:50: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: 11946963 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 CCB2EC64E7C for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 957A222240 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389819AbgLBTxY (ORCPT ); Wed, 2 Dec 2020 14:53:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389812AbgLBTxX (ORCPT ); Wed, 2 Dec 2020 14:53:23 -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 986C4C09424A for ; Wed, 2 Dec 2020 11:52:27 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id z188so2459450qke.9 for ; Wed, 02 Dec 2020 11:52:27 -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=jNGNXfmkBckieQ1CpLwdBI/IgYlgSuiJ+CZZGkppJcA=; b=0cBAC5MhVIy96BVZZHHIqMbolT+q0YAFuAcHM4SfHr6UjpyN4244DyiNAk6rgordkP Ryrxuj28dxg+x324c65TWfP7TUhKFR/V5d+QjRkb0azipvUkkzPIbgjRqkb3IUvAqqlG 4cwCA9IKVR3B+CeWTITIf0l/2gKrJD+O5HtfgGZVXMX3s6gEoir36iGycc0F0u2a/maG yu19kDdN5Gyj2hPs6KUAOW2A7GfxNdIDiLRmObpBKhUu9IacKSwRrZRESHSZ998a7ATN vsi+HfIcFQhuEfJfz+bt4WEZOwYAoEoy/28+tFyRCooxa86VGKulO5L2oKWXvQ3Ghyl6 r0/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:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jNGNXfmkBckieQ1CpLwdBI/IgYlgSuiJ+CZZGkppJcA=; b=Q5cQ8rCQ4CRPiOl1dzk4LFBuzprFm+2f5JUwY5K7+CvEXZEqv5nBryMgaM4ikDVmTK rpwdbXmhQiFXHDG6kvDuYbSocT2JnE144MUXWCEbEDGR6VdcK76al7MQT+Nah0/AZz0c Y3RpVzcpqocN1ZuHA/hsf+QldUakUtN+D6fUzQsOKi7GfJz1XjaBduX+I9j2DMEehdHo e0/V66hD0lndWJ5leiTROHEHeLl13aXgaxaCxDIOeJhRiWpjnUVNqUBf2v7oyQrZuLb7 9KO9yaZtzcj+1Ai+A4hiuMxu+Dz0HCnk8BsAcn+VN9asOrhZsWpAZi9Xmg/8bNw9Kqd5 mkZQ== X-Gm-Message-State: AOAM533hAzaKuYAB8Umf6UKM3qQZbuakFtXtAY7oHVrBnEf0KkOaofvK hHsIxHlkSyFJdcTYKhSaBhjE4xd4AQwuSA== X-Google-Smtp-Source: ABdhPJzpTcNOVwDYVQn1cQHjAhKCNb+eI1YnRRXedGu5AobP46fe957nfj77DvO9Z7NGQuHnlBQgpQ== X-Received: by 2002:a37:4384:: with SMTP id q126mr4366320qka.30.1606938746310; Wed, 02 Dec 2020 11:52: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 l79sm2965202qke.1.2020.12.02.11.52.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:25 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 40/54] btrfs: handle errors in reference count manipulation in replace_path Date: Wed, 2 Dec 2020 14:50:58 -0500 Message-Id: <25314fe734d56e1a4fc924e7a5f923ce01fed88d.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 8c407ebc5500..ef33b89e352e 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 Wed Dec 2 19:50: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: 11946941 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 73465C83014 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AF2422203 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389778AbgLBTxS (ORCPT ); Wed, 2 Dec 2020 14:53:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387412AbgLBTxR (ORCPT ); Wed, 2 Dec 2020 14:53:17 -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 B0283C09424B for ; Wed, 2 Dec 2020 11:52:29 -0800 (PST) Received: by mail-qt1-x841.google.com with SMTP id 7so1996972qtp.1 for ; Wed, 02 Dec 2020 11:52:29 -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=H9OyfFhjnh7teDrQrhXaWI0lpgeZDH5GlDP9+X7faiw=; b=s5DDJHNA8EN4jr3IPPN7rdpdSIwqFopZ3ANXZg67gwtePAUopSU5dQbkVwYHBtNhk+ 0+Nu780WhGnfvmlcGWZfiRM02BrIIyKIC70k7UfXXMrp/WhtoJQS02uJoGuchBJ8PTfF y/e4+HaBIeRZYNQ4iCLScQWX0ibbjBmfx+pD73oHHtlnc9yTjODnxIwpg75LwpKtGByB XqQer8Iy/kdMiK+Ig/xeztxf1Q5Mbq3d0m9RXLGtDNMAr+Z2QPgtSuG1cXCOcNDPs/gz 8CvmQS/MT5sd9IWR02bjcu5NEk2F1f4OTwkaqWmd9XKgVO1hl/g6C0w6RlU1AegWd1nB 5JoA== 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=H9OyfFhjnh7teDrQrhXaWI0lpgeZDH5GlDP9+X7faiw=; b=RhTl2lKf+NvO0Mqzx86se9KPXrLFj4WU6FOnHVTE18HQ9Qpo/e+leI5X5E97NWS/WC LlJHdOl21ptY528uB3U0J95W+hlAy57lgVV1h8kIXboibQEpzGJn6BD4LrNqYQpZ0qz2 kanU+eh4KwV3ZHtnmSviYQ9PgPdQ2l/czhO6fFS2HInyRmKqD+MBSZCMVHwil0w/kVr2 /++IWnp1z8zFGHXSNjV6OjXwzXXCnQiecIa9oqpYGYIShCr6g/ql721qyHt206Gf3ySu yCVvwXNgDL1eKrSMBHWvwEynNplVMgtclQAutqNkwEvfASYavmltNSgHoOKze1VAzwE1 vu7w== X-Gm-Message-State: AOAM530nd/00GuZgC8L8VFJji1M9lR/ulZ+ZIgvsUzqdfaWEOFTSLCk+ yVJP15nFzFRnpbYWIiLWxUaAuFYskpbV4w== X-Google-Smtp-Source: ABdhPJznHln7V3lG610Vgkl9VIJJ9Wj7/Y5LRXaWjeWl2degYt17sO//s1OlDwGSskLnd2dtX9A4tQ== X-Received: by 2002:ac8:71d5:: with SMTP id i21mr4287330qtp.4.1606938748531; Wed, 02 Dec 2020 11:52: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 h16sm2927682qko.135.2020.12.02.11.52.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:27 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 41/54] btrfs: handle extent reference errors in do_relocation Date: Wed, 2 Dec 2020 14:50:59 -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 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 ef33b89e352e..3159f6517588 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2433,10 +2433,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) { + btrfs_abort_transaction(trans, ret); + goto next; + } + btrfs_drop_subtree(trans, root, eb, upper->eb); } next: if (!upper->pending) From patchwork Wed Dec 2 19:51:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946945 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 9E1BDC83017 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6852C22240 for ; Wed, 2 Dec 2020 19:53:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389783AbgLBTxS (ORCPT ); Wed, 2 Dec 2020 14:53:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389770AbgLBTxR (ORCPT ); Wed, 2 Dec 2020 14:53: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 5CBC6C09424C for ; Wed, 2 Dec 2020 11:52:31 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id f15so1958975qto.13 for ; Wed, 02 Dec 2020 11:52:31 -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=Qhokq9in10lp163pHnGcT2VBA0zMfVv69pIfLJBBEPo=; b=0yoWQoxQh7+/iPkNROyNew4bdvYqoWpWBeil8BpnYvSqBLq8adTkzteiBdV7tEBIPK wjIYKcVcat5LlPYELlINYLovcIo5kuLSjE+7I4pWKqHFsB6S4EDhqlIRom5dFMGGa+lA xr397pv1bkGbRRpU8TlnUGzKgNtUZ8F23bF9gO0qESBPjvhAW+aAhTjXY8Aet9e3twhg 06I7qc1OqkfhBZ7E8zzhh8q2PvQdCSYZtT49arh5vhRVshLd1Vz/VJDtvpEGQVPHRLVn UCsWIaVZN6LOcnkFav4TF/cGdgwynWINCSDCasfb51FrP5ccjTG9XGhdcH6D/Ul0YA26 Aryw== 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=Qhokq9in10lp163pHnGcT2VBA0zMfVv69pIfLJBBEPo=; b=ZDSPlonBlZZRDtZ6sqYRrSFMALTFTkahH6r/N/9CQd1295Q/o4kVflxhcrW3Vg5gIY ny7FDTBt+uJN5Lwgo8XBTDP8ZnjadS/FcMqImIC8Ogu/vGfvts7FPoePdFJ+UOO9pIA3 h4jDWmyhCl13T27WQvKGbwIUMKp3F6elcsMZ41dXWOsgy+/0M8V8DHjKbv0S13wrUEtj CuUZZ+gTkjyIIsogbv4WA54zjsyQvRfSdpfZhqUvI0ph8SLYmSrgMYoUcfYnKDwn8OqQ zSjkfMkT64JGtnqKu+gXSf1JgP1JHhMkq9TliUqIw9VEcmV6jM0EttiUwUjYiCCuNorh dKUQ== X-Gm-Message-State: AOAM531FH6Dyop0L5Vntk8ZJb+2jTF9fWHtYiUNkQBDWj6I0xSl0SoMm tqv3/ONNrtzEVaN28UDctfuH+/pVz1EgjQ== X-Google-Smtp-Source: ABdhPJyhUimQ9uTbfvNCRylI6cUv1EgK3F7tCB87FySOsDgjOYD+0X/2P2o4Xoez3sJoToJTVawdIw== X-Received: by 2002:ac8:5197:: with SMTP id c23mr4311603qtn.202.1606938750282; Wed, 02 Dec 2020 11:52: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 h26sm2888919qkh.127.2020.12.02.11.52.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:29 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 42/54] btrfs: check for BTRFS_BLOCK_FLAG_FULL_BACKREF being set improperly Date: Wed, 2 Dec 2020 14:51:00 -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 need to validate that a data extent item does not have the FULL_BACKREF flag set on it's flags. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:51:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946959 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 0AD96C71155 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C225722201 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389812AbgLBTxZ (ORCPT ); Wed, 2 Dec 2020 14:53:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36652 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388104AbgLBTxZ (ORCPT ); Wed, 2 Dec 2020 14:53:25 -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 2EB4DC09424D for ; Wed, 2 Dec 2020 11:52:34 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id l7so1974722qtp.8 for ; Wed, 02 Dec 2020 11:52:34 -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=VJjId8hZEVzyIER86VZ8xDHAVM9xeJsKzfY/gc8fAqo=; b=Blzy/UQPQ7RjU17BmwjFc3GqvspbG1drX2MqvVwe0iERjPJ+I8MoxLSFWQktEgl23r gyRLnrm7Qomm1p5O4M54cPJGO0wejU/T5jMK2eVU4Oj2qJgJWCioP/mKiG2Ssjt0Jx38 4MVKyeeoW59aC1Jvs+wRBhz5dA0dh3HsmGcnTJ1ThEydq/zvsu8Si1wK7ug6/eHwKzVs rWq8R8rophqwFPP2u07zuC+9MKbFLoY4e2ID5BpIpteFtcQtt4dZB8Lkubm1Bp+IQoeX bK1NkmURmq/9h3vmZWQagdfL9SThht1PzI/bbYRPp579+kjzlW8OFt82mR9VncknqHH1 WKAQ== 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=VJjId8hZEVzyIER86VZ8xDHAVM9xeJsKzfY/gc8fAqo=; b=OCGD8O+4uq25FoPvdi7h4KVijjflclX9f44aK6Ck1wlbwrza/0ma51NKEZv7aEw86W h0ksP90Azq1+VxplwzWfLzBwnV5GzBspPDNaI/kPBPeHNeg1sBlfXsmiQOqd84fN00Lp 1zr1gh09pyZA0F6yuWIQwUg/WhHRashcf38jxOpHi9Ztaw73mZ5BKxSmkXmYDYayQjnn b6mWOZGLMTuXsV03BAcqJBha+ZeSupDvTPhF9/8s5K3oQh0fwD/x840gP/gadrs0vUoH U2CGwzqvZqIeQRrygAY1/AEIIwPZBJ24DBF3xHol+9V+R4VPwHablXQtBqWUh1QcrsbT bKuQ== X-Gm-Message-State: AOAM532YBaq/XQ6bxgSbcyyO4cCoRcGEgBDIvQIBz2MBpB/6U+V1V0wF Ul9hlrT2KFInKxRY+6jC5jEmq1z+itwfUQ== X-Google-Smtp-Source: ABdhPJxqXyqzJ0RjyMXu/Mw4/LEg9tKHxk2KqAxWSL26EM1EQmD1TYuY/xcmyrQL+UFMiMb7BUejog== X-Received: by 2002:a05:622a:30e:: with SMTP id q14mr4519352qtw.77.1606938753074; Wed, 02 Dec 2020 11:52: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 d140sm2836702qke.59.2020.12.02.11.52.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:32 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 43/54] btrfs: remove the extent item sanity checks in relocate_block_group Date: Wed, 2 Dec 2020 14:51:01 -0500 Message-Id: <09013ee34800bd1bd6354254a1b6a29ddf68f09f.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 3159f6517588..8f4f1e21c770 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3370,20 +3370,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) { @@ -3435,7 +3421,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; @@ -3484,19 +3469,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 Wed Dec 2 19:51:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946951 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 3397AC8301D for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F162522203 for ; Wed, 2 Dec 2020 19:53:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387778AbgLBTx0 (ORCPT ); Wed, 2 Dec 2020 14:53:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388114AbgLBTxZ (ORCPT ); Wed, 2 Dec 2020 14:53: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 D2CC7C09424E for ; Wed, 2 Dec 2020 11:52:35 -0800 (PST) Received: by mail-qk1-x741.google.com with SMTP id y18so2454152qki.11 for ; Wed, 02 Dec 2020 11:52:35 -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=iRc6MA10E50WbWBouELNpGSiDE5XtkCejSC8vLj01Do=; b=tyocMGvzI44RD/B8GERpctEcfNqNBX7aAAUIEVAGPWUvVfhCPVrAn7N+EYlFYRSMol IiBF90en5WKJ2dUVxpqu+J7rasDsOg+2ED61xjsOer2vyxGnfcCnTfs2wAEuVZNoniDe pRXEe0eROkuaQns0GcTuA/AWf+wubegkqtQFIn70Bf/xWPC1oTbzDIqAsANgUNVyV+85 O1Uv6VuK2QoItHPNonIfwAqQPGFlWSifLVpgJS5xOYrqF2iGQgEU8FYKy1HACo62vH71 HJLmQSzNWcP+JZ6iNmToOAAc0vaN2lCWMh6EwTyk1HsKPmk+qOkLAjA3g0YVtoMUFjIO xMVQ== 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=iRc6MA10E50WbWBouELNpGSiDE5XtkCejSC8vLj01Do=; b=baUpgLJQybn3yNJmNJ7iO/1yrSf4Sw5aOWHWbL32fQnXdqFy8Ac1clGZhV0z6RTLvI f6zG/M5y7qGLIdw7gy5LLGpjeyhdxL0w15ol8F/MGvhe1FbuMnLjoI1UdSChTZ54WFHz WolKfnU9AAg0eu0mV3EMvRfAHbc4iNjv0guepgjedzHPWdNC9g/ljQx+wneQmbpvnsg4 GXN0dpOM5Q1Vdv4lEfvpIPT7SAOiryzAc1V4uVsJrnhZIq+7bGxG7fhOoAtOQvz8PQ5r GJHNKt36vM3UN0yqZLiN9ULXbiLIhj38F0QU9anmTMalJ2VXjicnYbnyJ0IkcAGRw6n6 bUfg== X-Gm-Message-State: AOAM530kBjKkb6jACC8gwzqhempkMZAkmPUgIT/dqunBoKc+T2w4PV0s IwKduMCbtHLKwbrGs9IwEOynbv5+wlxVGQ== X-Google-Smtp-Source: ABdhPJybf17/2n9vYQWZkAcGfMUT6efQ3xvnD03paq07WpFD1NOMzK9NIQ8AfvmHGLU+oRxwSHu5+A== X-Received: by 2002:ae9:f402:: with SMTP id y2mr4251760qkl.9.1606938754747; Wed, 02 Dec 2020 11:52: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 q15sm2754754qki.13.2020.12.02.11.52.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:34 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 44/54] btrfs: do proper error handling in create_reloc_inode Date: Wed, 2 Dec 2020 14:51:02 -0500 Message-Id: <497be2d1fd745d88d6cbeda5d77168781b5522df.1606938211.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 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. 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 8f4f1e21c770..bcced4e436af 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3634,10 +3634,15 @@ 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)) { + 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 Wed Dec 2 19:51:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946987 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 0E323C83021 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B85ED22203 for ; Wed, 2 Dec 2020 19:53:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389804AbgLBTxW (ORCPT ); Wed, 2 Dec 2020 14:53:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389796AbgLBTxV (ORCPT ); Wed, 2 Dec 2020 14:53:21 -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 79363C061A04 for ; Wed, 2 Dec 2020 11:52:37 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id q5so2451104qkc.12 for ; Wed, 02 Dec 2020 11:52:37 -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=UsD+lUV2GcZMQYswSezo3sELwKxZU13lI6ByUqYpBsE=; b=J0PozPmdzDCbOFU8ivymJJtSR8GfjIZhq51piCVpY2h8xBVLCu2JF7ftT4bl3/fnlN VogfXfSKlMSJvoX3xgl1F4HiMAqvyOifn0DlZELZ1SGTawj7nB8Ed3rq8qsU6k/DM5BA mTa0YJjp+nFLZH0vnXgnjQaCZoyH7mB/OOM+evhAxx6bHLJf0ywr7/nIqUP5I2O0lGew EK9C6/PITSzw8kcu3m80Ml40JSqqpYTYNhAhhMsogstEWxik03lns5uPFRuXZMp4oOxv hlL7opYRGZIyPvSPvQaC2IFTZa9/ZujFMrKm27xViNuRCbEGUrqpLmUMOoq4JC8W/Gs1 5Xxg== 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=UsD+lUV2GcZMQYswSezo3sELwKxZU13lI6ByUqYpBsE=; b=Z3Rv1IPXQiHXdLQ4bKKuZ66xk0I8j1Yd2b5Ah3seew5HvbZRBYZ8FhSPwEjkH0+5Kw LtdvSlzmLp+ZfT0DC5J1QH0oFxAdVHSdnYW7cg+dsNFVoQFTeVIFdASCw9g9hsC5fykl f+/nclUxdc3x/W2IiY/Pvy9e42dQ8bZmQzXSHTj/gsHNdVXGbBJpwNXvenzsRVFZvxkN Rx6zo94zKK5yBeJVm8W6wTq39KLkGPiVyLs4vC8V4pjTWZC3aQumqDYCARb8jHveLoXB MqIwKPKqZmLmYcbbyMX+pvSA6nNIMxXPQ5pE7WIbj8TM3KJpcAuwlrnbkRjm22tE1aXY PWYA== X-Gm-Message-State: AOAM5334VP5OiHFW92dYWBGMg/xGSgwlDcoROUBXfwfpCn0nMDrYWAHE 9UHZrQdCuxOSjnybU6KpcTEaZCS8ix3zOg== X-Google-Smtp-Source: ABdhPJxUgAxFPJvC3CwjUu6yS9na1MTJbK9AjJkilDJcXMNF48SYD0NBrL10HcZqj+Wq8w74kAZSUA== X-Received: by 2002:a37:dc02:: with SMTP id v2mr4310856qki.181.1606938756443; Wed, 02 Dec 2020 11:52: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 o125sm3112040qke.56.2020.12.02.11.52.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:35 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 45/54] btrfs: handle __add_reloc_root failure in btrfs_recover_relocation Date: Wed, 2 Dec 2020 14:51:03 -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 already handle errors appropriately from this function, deal with an error coming from __add_reloc_root appropriately. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 bcced4e436af..6315e74c1da0 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -3984,7 +3984,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); } From patchwork Wed Dec 2 19:51:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946995 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 168A5C83026 for ; Wed, 2 Dec 2020 19:53:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D42FB22201 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389846AbgLBTxf (ORCPT ); Wed, 2 Dec 2020 14:53:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389828AbgLBTxe (ORCPT ); Wed, 2 Dec 2020 14:53:34 -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 4D3BEC09424F for ; Wed, 2 Dec 2020 11:52:39 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id k3so1312811qvz.4 for ; Wed, 02 Dec 2020 11:52:39 -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=3XOlrMbZqOyrnJ+x40p8pbEpFfea+152PUTnEKjMIdw=; b=RPeQQHIGsyO0ggtosVIluOaJD7yI0Ma6i6DGfYohxP8qINFLoNmkSz0vylyTyzsiqj QIFsGEpnjbcNa1SUnN/KjnES/jwGKM3N7MfGdxfdAk8RTG0Bzy4jzi0oQaLCtIlCr2w4 Rthrf7SJrLIk/z72SXceq+RlPMMnDCq5bkPh9KHcdC/IFfue+8o49Wg35uvmAe4iM8Z1 GG4P+nXKaDPcRKZsb9XOSkXvU6GWqSRcUQPR5yVKZX99d1CgR9BQzZj9Hn8sP/mJN3dz FX0qpT2v/sJe5muupQGjUZ9NEVVBmxgj2QC0IqpLMGXXHCOjskj1yRWLekycB/f2KAK4 S3Fw== 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=3XOlrMbZqOyrnJ+x40p8pbEpFfea+152PUTnEKjMIdw=; b=oad42+eIOcEuq3QF7w+xn3SCMw4I4nGsTN3M7YEgOn6SrH6qQmHvjJCyBJItaUPbkJ DM1WXTS1FDAbijcWSDlO2rOJWqJsKKdiUELeORvBQriycUji+ilYBXRRWP0XRdQuGkCO J2HW8ajMdydK5XzgNmtye7lRrvfem2jvis/MV4f66B9O7yATmY051Lo5MwRZqJSe/Msh fvS1MqETXtZ6sUSwtsyrF8nHP36alxcO2xuF/q6TOAR1PzIpONxf8dPCpw9DcSC67A85 JkSQ1wlzL9eyyVySGoQuz+CemKE7kQcIlZAAXDzyTAmqV2J2KZIWL0/A1QVibpYPqQtg 6WyA== X-Gm-Message-State: AOAM531XrT9Ej2IlA+W9zTRnwwFfVaeAMmvJ7Co4PmdGNMNykdTpjE0v JX/GsKIThX4sJzdjBkSHQVDyK5SNrOnNog== X-Google-Smtp-Source: ABdhPJxQWT8M2qJIDfT1FpJ0w5edxWeaE9xISsvcaKdECtmMEEvkt/5wG8Zn5HCQoGotR/p9kAeh7g== X-Received: by 2002:a0c:a992:: with SMTP id a18mr4198138qvb.21.1606938758213; Wed, 02 Dec 2020 11:52: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 a123sm2855067qkc.52.2020.12.02.11.52.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:37 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 46/54] btrfs: handle __add_reloc_root failure in btrfs_reloc_post_snapshot Date: Wed, 2 Dec 2020 14:51:04 -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 add the reloc root, drop it and return the error. All callers of this function already handle errors appropriately. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 6315e74c1da0..695a52cd07b0 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4204,7 +4204,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 Wed Dec 2 19:51:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946977 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 E58F5C83018 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97C7422240 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389857AbgLBTxi (ORCPT ); Wed, 2 Dec 2020 14:53:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389849AbgLBTxg (ORCPT ); Wed, 2 Dec 2020 14:53:36 -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 F2883C061A48 for ; Wed, 2 Dec 2020 11:52:40 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id y11so1301912qvu.10 for ; Wed, 02 Dec 2020 11:52:40 -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=ak6MdgHVZgfQ23eyX7yqKDQ81qYG2eiQWsu5biXUKO0=; b=uXST3Yd+/Eabybklv+x1UwyYcKGehZ4YIYMezceUDqm5BbKtWPqOrczcWBv4OUUqNL ysxXJXCuR06g0mXdJJ2NKCRhLM5dpAawFsWbBK6juBCumyBYZt5zY7rbgqxGmBBTEiav oSWsj0YLtoinzPDPNv1R9S0ldiNC5MR48EfVuYJ13/fFYcxEYwP6KE0VGesjiHihhhUW 5ioYQGfYhCk7FARLsWfQeDUTaywzDO+NlByVYpl0eDGgHXzObzXn6A1B52YNmR29HeNw +60aTYTzrvA7ce5GmKkW/UIvAPeuRGD+VyVSkw1sDCoH9SbM3T0+duMxrMMIp6b/jiwJ 6y4Q== 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=ak6MdgHVZgfQ23eyX7yqKDQ81qYG2eiQWsu5biXUKO0=; b=g3s751e7p5XneEkbnSLyuh2rwWt1odjCTmoGkMrQynLvyFfmn2roiagns/EO1GDvEt 20XW0on8098jIHwW0of0S6qKc0dcBFnGw9GXhjy9qqZYyIKHAwI8PZKwtRs/M8QvR3QV SQGmzTfDiGu78zBXxff/QBfAHIH9gfr5y7mMSqYC09egZl5S3kEovZ7YBHWPLnJo011c +umFLBO4p+j0WptPNIyU6g3moP3RIeaFLQ/y6NrarGtqJBFPtX4nH9vRZcQ2sSLWKxTg +ShGyS/fV9xb7EMtf7hBMuk/cdXNaSXvG7sLl3f4G+HfcgBR3V800NhXNrzVdH6WIJe4 LeuA== X-Gm-Message-State: AOAM5300SX9UCHmQvleD1uSjR6288lV/VuUl8FkDUI0p2YpjA2FCAhaX IMdCwsRpO6UOBX868RkU089JwkzXuMCVRw== X-Google-Smtp-Source: ABdhPJwrmXfdBK7oqjlFDpboOgSYQZeoFiXWHrXN0U4R2qSopvxmv7AkfBAe3UuSj4prGOymqZDmTg== X-Received: by 2002:ad4:4908:: with SMTP id bh8mr4486761qvb.58.1606938759885; Wed, 02 Dec 2020 11:52:39 -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 z81sm2617479qkb.116.2020.12.02.11.52.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:39 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 47/54] btrfs: cleanup error handling in prepare_to_merge Date: Wed, 2 Dec 2020 14:51:05 -0500 Message-Id: <6e41922428a5b89b5ef0d7d47f8274e11468ee2c.1606938211.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 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(). Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 695a52cd07b0..d4656a8f507d 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 Wed Dec 2 19:51:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 11946975 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 3A221C83028 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0272422203 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389863AbgLBTxk (ORCPT ); Wed, 2 Dec 2020 14:53:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389855AbgLBTxi (ORCPT ); Wed, 2 Dec 2020 14:53:38 -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 C955FC061A47 for ; Wed, 2 Dec 2020 11:52:42 -0800 (PST) Received: by mail-qk1-x742.google.com with SMTP id b144so2443877qkc.13 for ; Wed, 02 Dec 2020 11:52:42 -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=ypRVW90fQhKQFSnRgRMLz6HPjjcOrzK4ogUGXPlH9Ek=; b=eajXhA5+cHYDAUuqCTuAEuKIVRbNjqmNF09Vcxtj8FnqgfduwQI4lOM9yEcuDKX8Pq Kz4dZYklKbFIar0glZd9DJGqos7nPWagz/DYKe2fdFzOoPRz+WbqJvac1jQh92jVQUTw 7qcyqgncfRizQqAqOtQTnAxIMwX3n91Sk4x2ACl6p72XngeoQZOVGFYOyzeZpz4oF1QT A+EsEQJC6T3gzoPT3zz6HJ0d2F3YQktr2yTVLeofTu5C5RoeNeYvj3FvjcAABtTiaLqC ACN4OpwmMfHAWR/fG3QDiI0/B94fDnpwt2Xco7AlfL2NNrk2oxVJ8Qbs5WsHMxYq33BU AP2Q== 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=ypRVW90fQhKQFSnRgRMLz6HPjjcOrzK4ogUGXPlH9Ek=; b=oqxRO97wEhZig6FH+j0okE/fLBfFZ+/hrS+WJNI1nPRHhqV0IoMGpb3VuZ1r/db317 4pG9xojdXj51vdTYwohdvyu1PAPSVlA2doDgkMuE9LyTyk3DcrCsDHabXLPYXJN4fyPo /oJ7l1hwdPs+8Vv+5koriBaG9U8S9DP/zJnKNX0zPheCdQ0VbPEL6OV6S5OCOQDRrMlL 9piZIAHVb1FNGv8jZfJ5BBlF3DoV9syd16R0psfdejvRVx3NqgJUWgki9QLPeeCOdn93 pSG7K7MJ7vtyjkxVo9VslRN+8eV3AthAd4qPvNM0rM0Ww5gQaOsmfcMEwovRFo+ooaF+ i7bA== X-Gm-Message-State: AOAM532OpQ/Pg8TL6KH3U44R9WX/7vLAazjwrK3tyUzSExjajWhlgpvu sCiGVn7DppiViJTIrRdKrI83wICo7wFJpw== X-Google-Smtp-Source: ABdhPJxsLBjtMku42uDfdW7ypLtjomZb0bBUMLMpIvBbE1nW2520EkKmovUftjOrqZ013XrEkBGIEw== X-Received: by 2002:a37:ac8:: with SMTP id 191mr4094788qkk.381.1606938761710; Wed, 02 Dec 2020 11:52: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 t205sm3008134qke.35.2020.12.02.11.52.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:40 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 48/54] btrfs: handle extent corruption with select_one_root properly Date: Wed, 2 Dec 2020 14:51:06 -0500 Message-Id: <6570c4cd1433a02a9d84e6fcd93f9a971d7f42fd.1606938211.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 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 | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index d4656a8f507d..91479979d2a7 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2200,7 +2200,16 @@ 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. + */ + ASSERT(root); + if (!root) + return ERR_PTR(-EUCLEAN); /* No other choice for non-shareable tree */ if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) @@ -2598,8 +2607,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 Wed Dec 2 19:51: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: 11946973 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 2490DC83017 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C65B522201 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389860AbgLBTxj (ORCPT ); Wed, 2 Dec 2020 14:53:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389858AbgLBTxj (ORCPT ); Wed, 2 Dec 2020 14:53:39 -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 7280FC061A49 for ; Wed, 2 Dec 2020 11:52:44 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id h20so2475182qkk.4 for ; Wed, 02 Dec 2020 11:52:44 -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=MNYfN9Weo90pg02yoVmh2ok1f8E+gOfxD5JlSFIWHws=; b=sweugU5CnIlm6haV6/30uIrbOuXPxXNZUPjlV+zqBrg3saN9Teg1LxALUi1sNnA0bC +1ZYhecRq8VV5KhMmveogA1S5hxilrNCNzeYnYTucbmJf8Ujxphxf2s+vijbIIHWcDna IAvFdoIwLXqsDAcu/AqbUBQtW9uzRz75VCHSjJlR/jP3kMhsSSm3lQFH4O3tJKD6suxC CdR26tGgWYileXHy/U9tyFLwAAF+eZ+qsV1HgMl2JQTCYTT0CXxtXCBMfT3GjSL8tuD2 MsoTHqg3eYebPpboQSCQO+Z9CAhZFqbhga8usmwZq4Lpx9BgpyBFbDyBR09nSBeBkU75 I07g== 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=MNYfN9Weo90pg02yoVmh2ok1f8E+gOfxD5JlSFIWHws=; b=bLzK4JvB7bIKe9LRNhmSYET4IN10nGzHMVoscMU5wiV/B+Fl+x3RqPcnKpq2PPBch2 x7KLGuUw5HWR/b6kSQtdGMnQW7tGaQUkyee+LNCHW3mGYQhedr/zSniQPV5+BgLKEONH kNjVxTGu4kbXai4PIkSLcyN+2epjQkCizJGbQktJkeFL4GJRF0WCMe/7B+tZPUGobq2T tSZZK+kYvjPUT8GjPAS+z9VT9kRTOlfePnOkRaYd2+1wxFHVd3BGMlG/RYO9AJjbfqfB MJpELU1X4/NELWHEWDgniLbXu5A9BjkoS4fBPXkIWBqpv197xXlnBasV46NmPPV18iRg cxKQ== X-Gm-Message-State: AOAM530hig6z5jCmh2h08/+1KcPuKlV2xRSBJPZUCMA5qoO9djh+0i46 x/VuL4ZYMK0CJw50PvmOiVjtLpiZBOv8DQ== X-Google-Smtp-Source: ABdhPJzAAVMcRKtWvQiBq7ZClt4pGAwrXHOuIviCw4u1eCHAE5GlKRcjh6fs+O+gUBWEWW8S3YbxEA== X-Received: by 2002:ae9:e8c6:: with SMTP id a189mr3317224qkg.334.1606938763353; Wed, 02 Dec 2020 11:52: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 j63sm2816630qke.67.2020.12.02.11.52.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:42 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 49/54] btrfs: do proper error handling in merge_reloc_roots Date: Wed, 2 Dec 2020 14:51:07 -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 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(). Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- fs/btrfs/relocation.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 91479979d2a7..099a64b47020 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -1949,9 +1949,18 @@ 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. + */ + 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 Wed Dec 2 19:51: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: 11946985 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 64299C83016 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2F48E22240 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389865AbgLBTxl (ORCPT ); Wed, 2 Dec 2020 14:53:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389862AbgLBTxk (ORCPT ); Wed, 2 Dec 2020 14:53:40 -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 3B788C061A4A for ; Wed, 2 Dec 2020 11:52:46 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id y18so2454673qki.11 for ; Wed, 02 Dec 2020 11:52:46 -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=SCXwhYzFuPwr3RgnPUSmchJkHEK96nIte7RNTMMphEw=; b=LJ8onik8hQvgr+Mm/qxackeQazeVuy82irE9cr48aECCCR5VIVLH+VZaMJ4V0VtYvV waMIJdoQ6NYKoFe8GseqGGjaC6yHLJCShcIAttPKDFYAWbGUcAzx5oHR4Gjcs2zemu8N uRxfv3oOLln3T3uXOa1WkSOrTdJEv+LEC4H8grVAYopgUzib4qq1EY1Q7NCtJ0mj0gj8 1j8Nw+CoEuD+ZjHv43W5ViSQJpcppWvi/QkSSED/KiB59qULDC/4PhTls5lF7d70LQKD +b3r1GxoDwNZCv8z9NX/LybeXDQomVnr3S3FUqlux+ivxk0uOMGQYNiciLUdwip6Udsc kyMw== 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=SCXwhYzFuPwr3RgnPUSmchJkHEK96nIte7RNTMMphEw=; b=WAYefkFFVoGkIPxlvGaDveXgcB+ISXzVlelktpkM0cea1m7mPZc83lJ666LtIneMpj hcfzrRgB6wRzEAUmNWUTnIvgQ71gg/7NUHiCLZTgKW/XWVAqO/4Gqd4FKqU0GowzPQEQ gvlPoFLIN4FV13mS036XUEt6X5XHI9LDEq4h3sfobyNCuFUK4j0TfVRKq5BAP1uP+5UB EI1vsJ7j/TzgHe+x0VZ1Ag0XEeXRKEsQ4i/DKz+4MsCJHqMrOEyb52xvysHUM/+5LaoO Gl4SyOGMJCZ0manc0L95XPRlxT4+nB86ThWLwFOktJTtkqUCg/evD5hQkkVqK7WdG59t ixpA== X-Gm-Message-State: AOAM532ILNDrk81wfzlFs4Ba4EAeHxHEFS6RMrxVmp4fnbCDDFacHEBi +mfFU/IYDvv7OTdTMgOeSjFKkgUvkftgNQ== X-Google-Smtp-Source: ABdhPJxVAAUVmp60FlhGAkHSQaeU4+2iXXssZzX1RvaYwpuAU6vUtauSu+3aSSelFCjclZHd/BcdRQ== X-Received: by 2002:a37:9d04:: with SMTP id g4mr4222516qke.358.1606938765087; Wed, 02 Dec 2020 11:52:45 -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 n21sm3004395qke.21.2020.12.02.11.52.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:44 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 50/54] btrfs: check return value of btrfs_commit_transaction in relocation Date: Wed, 2 Dec 2020 14:51: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 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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 099a64b47020..15b6e54394b7 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; @@ -3436,8 +3436,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) @@ -3596,7 +3595,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 Wed Dec 2 19:51: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: 11946979 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 407E9C83025 for ; Wed, 2 Dec 2020 19:53:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0C33F22203 for ; Wed, 2 Dec 2020 19:53:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389847AbgLBTxg (ORCPT ); Wed, 2 Dec 2020 14:53:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389841AbgLBTxe (ORCPT ); Wed, 2 Dec 2020 14:53:34 -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 F2590C061A4B for ; Wed, 2 Dec 2020 11:52:47 -0800 (PST) Received: by mail-qv1-xf43.google.com with SMTP id q7so1295969qvt.12 for ; Wed, 02 Dec 2020 11:52:47 -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=xxEdC7Cgc3ejhw8F0f63bBz8LkNgTjH3u4q8NYHpHi5l4ocK+TcZfpreNrMlvRIF3f BMHFQAsGTLgYQDzD6TECQaQoGSGeUdmUYGTy0Sodkvw4zSQIpn9xevyj3SNfafsUW870 1rLOb+BY3PbMMsX86XXxLZQ4S4jZVEPRkHdgHDgJGTRd8cGMeJE5y+UhjpGW26E0x0A+ MkKUraNtuxPydF4rvt6ziTfW+5S0htkwQPMMIDRVUxRlPhDnF+MdaEkC7jVAoZVzzqqM XqpvzgIEAYsG0JZAtBZHhc6rlGDCWm0B4JS1odRq8/bnNpIywjqpJI6dXg5U+voioUdA i7nA== 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=p4GiqyILID/lSBcLCkTZqakP2I669SCyYsfIfnd8rBNwQ0x/JK/EQktVZHMMJRUxVY 5Owx6PDHwAq5la+z6Sfr+Y7DG3+qC3oDpPg6/0IsgZc91R6uInmr19X/7byWI5NiNkUY xpegPiVmjoXYXEXufMumRufeNEge6izje0NBF7PToU+aahkcA5JiChIp9g/3sf+Pq0/2 0r8vJQtxTMyRrH5kyMF2lGke72G1FcMt0Oa+2vd95XHu4WIk4XyR9cYmQpgF2YWiyQjL 2ZKaGS3gZX4wtBYpDX5HHEZDqk+A4iBqZeRcdvRNIJYP8pAdSfYlhppyghkQ2DBt8GsZ zVCw== X-Gm-Message-State: AOAM532WaFejjaQQa4/gBFOV3ytCRG2tsqJND02MGvGY1evmhqEOW2z4 ipB6bOEB6jleo9+n5jpm3AazVnYNM8x/AQ== X-Google-Smtp-Source: ABdhPJy5fzT0CKoZym1WtlXIMUIH/fGBl3Yq/ZuOljetTRo4Ai6dyR0vK4sgt04PMcLSgQ+x2OIO+w== X-Received: by 2002:ad4:5587:: with SMTP id e7mr4075189qvx.33.1606938766852; Wed, 02 Dec 2020 11:52: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 s68sm2921415qkc.43.2020.12.02.11.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:46 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Zygo Blaxell Subject: [PATCH v3 51/54] btrfs: do not WARN_ON() if we can't find the reloc root Date: Wed, 2 Dec 2020 14:51: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 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 Wed Dec 2 19:51: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: 11946967 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 B547EC83014 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 63D9322203 for ; Wed, 2 Dec 2020 19:53:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389853AbgLBTxi (ORCPT ); Wed, 2 Dec 2020 14:53:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36768 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389842AbgLBTxe (ORCPT ); Wed, 2 Dec 2020 14:53:34 -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 A1B96C061A4C for ; Wed, 2 Dec 2020 11:52:49 -0800 (PST) Received: by mail-qk1-x743.google.com with SMTP id q5so2451695qkc.12 for ; Wed, 02 Dec 2020 11:52:49 -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=LPT7aEYnMVET6RU2QhdABJEzg5OVvT3nShfG4ZVnk/g=; b=ycXwQm9TMvGKme5FhtoGwX7eyaxVL30DFN68RO9esM3eE28uYYt0cLOwacfw6IfmBk SbNomiu0droGPbQvyt650kUUc/cVEy/OhaV1D0e4DXLE/kdCgHLetLTIbdniAj4ihNqK 52Y2cNlEqJAN2u4hs9ki+RyUyrPmm6ZGIlz/edTgN+WAPDI8YhuFqu00GWpVzjaQ5xuk sIcJBUe+ExoKF2gSuTdRaBakaQlV++BB6TNT02iZUHYSohOaBSBbpWgBoH1kgitORQdu Wsv9Mq0ET7UvZutNsvM+vQ75SnJHxnoyYqpAxC58Ak+pytxR8M09ewULnr17t9/sYq5t ck/w== 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=LPT7aEYnMVET6RU2QhdABJEzg5OVvT3nShfG4ZVnk/g=; b=peimameqSXzWtD3CWDvwhjakk13jge9Ubun3Mo6F6xXte0naBwAJHD+qcT1LP9jfmF WpSevzzwiT8RRxpfNg19/IpDP8V7M/ryE30IpNFfY9Do23ercG9cQ47cmE3qr5jMQ/So 6R/w9IGV+Q/Ga9VUpMlYtSBxA3uDDTlML3o69SeLmEuWTpzKGLTJH/c5OomlAH/vDpLa hrzANwxj3qb6EkHuXIR8zyi4hC7jp663sxsNBBV2VloAH6skyBJhUply5YxHamaLuDXQ zGOeMlWs+s4HlfAUA5boPcQhiSsH5owIQFQLSUftQsu2QBKSAquVZQv0ENjw1f2ueGQZ eIlw== X-Gm-Message-State: AOAM533NphPS9K+lKYTh1wnHN+2QMZR7RdbWs+galsuV8o30TVpD5RDS qbvePbfH4xcEZng52M0XBIA0QEVU/HFIMQ== X-Google-Smtp-Source: ABdhPJweSXAOCHyCxPq4H4IOCQ7Nr4Ic4gpZaO7xotn8C4WSziiPEo7N8B7i+Gs++3fYGUlefZrA5g== X-Received: by 2002:a37:afc6:: with SMTP id y189mr4317134qke.361.1606938768501; Wed, 02 Dec 2020 11:52: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 b73sm2934309qkc.87.2020.12.02.11.52.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:47 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 52/54] btrfs: print the actual offset in btrfs_root_name Date: Wed, 2 Dec 2020 14:51:10 -0500 Message-Id: <3575cc74f0d9f63647e92082979fa8cfd3901e90.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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 Wed Dec 2 19:51: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: 11946989 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 8E718C83029 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5BB5B22201 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389869AbgLBTxn (ORCPT ); Wed, 2 Dec 2020 14:53:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389866AbgLBTxm (ORCPT ); Wed, 2 Dec 2020 14:53:42 -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 52DB6C061A4D for ; Wed, 2 Dec 2020 11:52:51 -0800 (PST) Received: by mail-qk1-x744.google.com with SMTP id y197so2473515qkb.7 for ; Wed, 02 Dec 2020 11:52:51 -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=AsRjczG2u/IZBO3TnGiSTj7YRPKVYiweycoLH2spsog=; b=wEF2DAgs/jbbuJKt/RT1vBRxHvOZlxsvnTLOCphN4fWdFkCln58kDfNQ2yCq8aJUsX d+ctjU7OTl/oiTKap3AdSXRerLoFzlURyqpnzMHFcgvAjZpSW9mD2jzUOyGEPVLv1pDp hydGMWDzEcWD6FXVIv3W7CMlylYAKLea68weSPjACYzusJ337NPtwVFMXHRl6D8RfB9x JuiTlX9/ldyHRAPaFs2EyBVgRxJyJbgkzTWKiSAxMW/qNUGQKn43H5MCwcBbgc0mHukn BtYknKfBiYawWhQ3mo+ug4t5fp7EwdAIh8LqaiQtvrUrWzrjRbVGjydNvedTM4bJnI+Z RHLw== 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=AsRjczG2u/IZBO3TnGiSTj7YRPKVYiweycoLH2spsog=; b=lGz+uY0RY5Ds5wpYRx2T+UQgsEcM8W3d0zv+wm3VCKzme0qe+KnJUp5vobpqlhhaqs JkhqeKiONQrZst5YHOPYYOmNvXM3Iw7RtXkstZhxncRqiXDyPHEmtEw4gkU5kGo06q4j 7UE3lHF95YwRqaRYSGHzCcxUCOEuZzv1w6lIxqzW8Oh8rbvh9AGrPx/Ny/EGfxPdaMQD kwjbrhcQGzgfmgdqojU4FQcRmDQw7pO9pepxNOcAXWuQ8r8y4P5q93mp4NisQD90lRHm yKR8Z4XZCq7is0jOLW7q/9fj5fiG4ckA0eWnTtqs3UYOXRTl1NS0U3JruPfUsw4M4iY3 01zA== X-Gm-Message-State: AOAM530bVf1Q8FQ1859gbv+iTY3A5VjTNkSn57Ue8QxD+utkxGrUGkGb Xj0bgzHXLimhlwmaHtyTGOXnsMFkRjPeEA== X-Google-Smtp-Source: ABdhPJxgeG0nbKi+En3wyN5IQsT6pJGT6yqtXCbIaeo4PllMWg1HAWS0j0eZUI3sJLZJHI0f0qhFVA== X-Received: by 2002:ae9:f506:: with SMTP id o6mr4129671qkg.414.1606938770151; Wed, 02 Dec 2020 11:52: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 l46sm3025278qta.44.2020.12.02.11.52.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:49 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 53/54] btrfs: fix reloc root leak with 0 ref reloc roots on recovery Date: Wed, 2 Dec 2020 14:51:11 -0500 Message-Id: <8938404bfb921d70018de363dd006f24f1beefd6.1606938211.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 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 15b6e54394b7..a49a422f2f9b 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 Wed Dec 2 19:51: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: 11946981 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 E7D97C8302A for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8E7C222203 for ; Wed, 2 Dec 2020 19:53:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389872AbgLBTxn (ORCPT ); Wed, 2 Dec 2020 14:53:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389862AbgLBTxm (ORCPT ); Wed, 2 Dec 2020 14:53:42 -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 09D83C061A4E for ; Wed, 2 Dec 2020 11:52:53 -0800 (PST) Received: by mail-qv1-xf41.google.com with SMTP id ek7so1308104qvb.6 for ; Wed, 02 Dec 2020 11:52:53 -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=mpzw1Hlljdl9wJfmKJhG85XKsureCOTUxShwr0elV94=; b=bXSfZV0hBO7OUvpNx3IAA//8USM56jDeng3/S2OwFyU2KMfCPiQuQiaPKdvtU5Q08C SaEIvzUX9BavdurHiA7vEJLce2kOIxZPWX2WZJQyixIBdgus2JwgXDKoXwWoWqJRS8I0 HiqOUBFTN/i7q4VGFMo54L6QQF8cb6Hu551lAIcVtc0bxrJ9W3osgX43XauqQ67SgVOR pT9Za6nPtxmegeTZOQrB6cCwKYyYT3W9FXGfSwh0WGEhrkq+Ef0puA8tHCgpOLNy+5eo Ka+dIO9xtyRwvV8zSSIPewcb4aX4eLunfEdvaXxAWZIUw6HN0RL3NMRzFwouiuIr0AW7 9kkw== 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=mpzw1Hlljdl9wJfmKJhG85XKsureCOTUxShwr0elV94=; b=ssrKSu/bhVUJ98bfaAGZ8Mo+Fw+do5ppCI2WgveU+MHvlx4pDc5mz3ZG0QuBpokVN8 e/U4K50c+R6g1P+AecpWllvs0AkKQCrYL0chi9E8OXuxW7d9GhzYP5XeAtxawEW48eG1 hEJLAM+F/p0vMIHYdWKKDD2kF3ZobdvVmdqzyrfJ+GwpPLFg/wFi/i9yFtmc46VdO4v1 XL3Rq+3w5OcdntPa6asnMYKA69hfKHCOL2zS4lw8gt/GI/RfyEfVzn8fYn4ttUKVH/+W sWykiwvri0JEtzpGL/bgOvVtfzsIQsDBaP8d1dCDyxR7BYPjyPpO5vF8hcRr64CvOFsL vzjA== X-Gm-Message-State: AOAM533zYvQgfhKvQrfh9DhKQYyRYiFM+zqRvShMFB9QKQ7HVORFnGjT wZyBBGwPH4KnieMm8/oBBvVOfNNQq6/iGA== X-Google-Smtp-Source: ABdhPJw5XtIEuweISoSu52qqmXTP2NbjM8LmmjWL4NC2nrKPIJc425zkD71lojk1OpbtmTsOoRdYYg== X-Received: by 2002:ad4:54cd:: with SMTP id j13mr4128026qvx.8.1606938771807; Wed, 02 Dec 2020 11:52: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 o21sm3023223qko.9.2020.12.02.11.52.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Dec 2020 11:52:51 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 54/54] btrfs: splice remaining dirty_bg's onto the transaction dirty bg list Date: Wed, 2 Dec 2020 14:51:12 -0500 Message-Id: <9d97cc69e823574da0c7586cdfbd49d210b8a246.1606938211.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. Signed-off-by: Josef Bacik Reviewed-by: Qu Wenruo --- 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); }