From patchwork Tue Feb 22 22:22:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755992 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 66CA6C433F5 for ; Tue, 22 Feb 2022 22:22:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236031AbiBVWXN (ORCPT ); Tue, 22 Feb 2022 17:23:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51052 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236020AbiBVWXM (ORCPT ); Tue, 22 Feb 2022 17:23:12 -0500 Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 481056A053 for ; Tue, 22 Feb 2022 14:22:46 -0800 (PST) Received: by mail-qv1-xf2d.google.com with SMTP id j11so3645445qvy.0 for ; Tue, 22 Feb 2022 14:22:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=fDoa7wYFkdWRI3HBjncU8tIUs/ZSJ6olZrfU3RVf3Ig=; b=wXsyhR8+xEBjtkKap3gfGfHxrTOFARtLg9e6aYkWHNyeN3SZv6HG+DXxx8NzqHMIko aXt5RvTbjXNbh8xe1rP4aUnqBXmCN/El2hZwzDdMX7MVTxAwKC3ctPFFNJQRECCUXbSa jTPU1F/pOxNnP4Z0CR+ZwZ/8t94/7owz/D5yPJdQr37Z+wBs8zia279p5vY1UJ9VJP71 tZOS+GJFll5tDA6Sbu9Szk4T99mJ8NCDIOn1hzCEg2qPXhQUHSvmgTwrM/x0wAqVyGOs YHvjXsHdxTpqj6hboKJ2Gqn3P09fdR4sEuWqbsJ/rgHWtWrmgAyuSZeX7TaTUVi+2yHq W5OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fDoa7wYFkdWRI3HBjncU8tIUs/ZSJ6olZrfU3RVf3Ig=; b=kHwXB7PW8Drew3u0/m87uPNJCeQuCKvgOXpdylUH3JwaWrpj5Mjcg2HCh6VVz6Go7a OO12gFCRxesuGQ2lgrl+hVvNLvjfrUbDov6RxPgWmtNVkICWH9mGQ6lASW14ZoTIiHtc 61XeXl9EwUWX1ZDzjy/xk0vfso8SO/eDnWiPIEvh0/xzIwG5y17wNziD9j5RIACNlyrj LZdssjIjmqRx2W2JaoiAXlMiqw3mYkPQVzeN18UECdJx365XEI49VWA7GG8ACzm+474z XEaJoLqOeOk/csGSXiTcE8wr7yZ5DZDwK9Za+Ek2aj1p6ZqgzK+8JLgSBsJsQnuaSC6F 1kyQ== X-Gm-Message-State: AOAM532waaY2HU9ToAGApVMfmwkeFkR7quq/vR0f8J0j+2aM2j/z5x+i Vwm+WbEoUItrx7peb7l876mNPnq+AjJHSZOH X-Google-Smtp-Source: ABdhPJxeDiNwt86+Zw/aPjjzIxBC4qxVxBsaGIkXFks/4qDrdAKnDev7KIhbt8OomxZNqBFZW2gxGw== X-Received: by 2002:a05:6214:21ed:b0:42c:11d1:70cd with SMTP id p13-20020a05621421ed00b0042c11d170cdmr20965448qvj.115.1645568565069; Tue, 22 Feb 2022 14:22: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 c14sm709104qtc.31.2022.02.22.14.22.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:44 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 1/7] btrfs-progs: check: fix check_global_roots_uptodate Date: Tue, 22 Feb 2022 17:22:36 -0500 Message-Id: X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org While running make test on other patches I noticed we are now segfaulting on the fuzz tests. This is because when I converted us to a rb tree for the global roots we lost the ability to catch that there's no extent root at all. Before we'd populate a dummy fs_info->extent_root with a not uptodate node, but now you simply don't get an extent root in the rb_tree. Fix the check_global_roots_uptodate helper to count how many roots we find and make sure it matches the number we expect. If it doesn't then we can return -EIO. Signed-off-by: Josef Bacik --- check/main.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/check/main.c b/check/main.c index 8ccba447..abe208df 100644 --- a/check/main.c +++ b/check/main.c @@ -10207,6 +10207,8 @@ static int check_global_roots_uptodate(void) { struct btrfs_root *root; struct rb_node *n; + int found_csum = 0, found_extent = 0, found_fst = 0; + int ret = 0; for (n = rb_first(&gfs_info->global_roots_tree); n; n = rb_next(n)) { root = rb_entry(n, struct btrfs_root, rb_node); @@ -10215,9 +10217,39 @@ static int check_global_roots_uptodate(void) root->root_key.objectid, root->root_key.offset); return -EIO; } + switch(root->root_key.objectid) { + case BTRFS_EXTENT_TREE_OBJECTID: + found_extent++; + break; + case BTRFS_CSUM_TREE_OBJECTID: + found_csum++; + break; + case BTRFS_FREE_SPACE_TREE_OBJECTID: + found_fst++; + break; + default: + break; + } } - return 0; + if (found_extent != gfs_info->nr_global_roots) { + error("found %d extent roots, expected %llu\n", found_extent, + gfs_info->nr_global_roots); + ret = -EIO; + } + if (found_csum != gfs_info->nr_global_roots) { + error("found %d csum roots, expected %llu\n", found_csum, + gfs_info->nr_global_roots); + ret = -EIO; + } + if (!btrfs_fs_compat_ro(gfs_info, FREE_SPACE_TREE)) + return ret; + if (found_fst != gfs_info->nr_global_roots) { + error("found %d free space roots, expected %llu\n", found_fst, + gfs_info->nr_global_roots); + ret = -EIO; + } + return ret; } static const char * const cmd_check_usage[] = { From patchwork Tue Feb 22 22:22:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755993 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E5A6CC433FE for ; Tue, 22 Feb 2022 22:22:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236033AbiBVWXO (ORCPT ); Tue, 22 Feb 2022 17:23:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236032AbiBVWXN (ORCPT ); Tue, 22 Feb 2022 17:23:13 -0500 Received: from mail-qv1-xf2a.google.com (mail-qv1-xf2a.google.com [IPv6:2607:f8b0:4864:20::f2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7F9956A052 for ; Tue, 22 Feb 2022 14:22:47 -0800 (PST) Received: by mail-qv1-xf2a.google.com with SMTP id 8so3525677qvf.2 for ; Tue, 22 Feb 2022 14:22:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=UEPp2e53ngJl+3Oyq7uK+LzqZHJ/Nia41q0m5X2uOBY=; b=GYT0Y8d+BecjzUjyd/nH7+WnAthzA+Mr6Pbov8IGUGKZBi65IdEsmiPPwCeA2LJAYI wOm36BtRUNkrbM4tGSsd5gpX2GqOl6fBQbo0HcBoNFJwnrUAK/DahxzPc6VoemdxErw1 Xo2SO46IYprvedFsG2CKPZE99YA4mTqLNbuUzX7WWGOn0busFU7nW3cndk8nItQ6cQUN 1BbuyXRLjZakTQ1+NG9j6oNtoiUJJtQZS/Eu1W7QM35JdEEDMncUBZtBS7wIOl59HnXe LsLLSdbpqtg5t7z+RPyxxvhPrmv8QIBxbCehG6SS/WzW/yvY+mxU1Vkl7H8VKlADXyiQ N78g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UEPp2e53ngJl+3Oyq7uK+LzqZHJ/Nia41q0m5X2uOBY=; b=cGvVxl7MzXFTCmbbaouw0CXKxA00Mu7uodfsO9JpX2obLI2Kmp+hhVA0Im05gpcWQo 1w/g3EIIIeeXSOTwMFwg/2Jh+2qFTHhL/HH5MqwMtViPtdMVqOc5ijZ7jCy2FIw0B97N zrno0cFoh6bhYVH+HMtB/XAZY7uC+hsWJ2DRkrXPUU99ltLTvuL2hd877elDhby3FGBE GTZMDgFsZXwWy0X4HVQgGdDn2pIQYykqEQ6QL0+USdIL+ndyaCWHGHmL0VDKbVV4sZ2z x2mu5jJ7GCK9jJElwpchIDTog7gPYCu5EwtbjYJ6FABpWNFHTjos89EeO9hf7WZvrzpx o90w== X-Gm-Message-State: AOAM531poWCdRZULxS4JEAM8R47KHR/PfwwD7lwh2q3rzgklj15XAdoE E90i7ghF9JL/UBNULROx1ras2ezoslYUeVRu X-Google-Smtp-Source: ABdhPJyG+v7lbEdW2qy2oOJhepVNhD2ABKZUrAsoTJ1z+dsOnfvGS4Dqlig1r7SuTxQYLerKRBwk8g== X-Received: by 2002:a05:622a:148d:b0:2d6:b8ec:70bf with SMTP id t13-20020a05622a148d00b002d6b8ec70bfmr23840319qtx.520.1645568566355; Tue, 22 Feb 2022 14:22: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 v145sm595149qkb.63.2022.02.22.14.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:46 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 2/7] btrfs-progs: fuzz-tests: use --force for --init-csum-tree Date: Tue, 22 Feb 2022 17:22:37 -0500 Message-Id: <88a86bf01abf5f367afb36f0b028d89d08c43403.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I noticed that 003-multi-check-unmounted was taking a long time, this is because it was doing the 10 second countdown for each iteration of --init-csum-tree. Fix this by using --force to bypass the countdown. Signed-off-by: Josef Bacik --- tests/fuzz-tests/003-multi-check-unmounted/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fuzz-tests/003-multi-check-unmounted/test.sh b/tests/fuzz-tests/003-multi-check-unmounted/test.sh index e93a20af..c6f9cc9f 100755 --- a/tests/fuzz-tests/003-multi-check-unmounted/test.sh +++ b/tests/fuzz-tests/003-multi-check-unmounted/test.sh @@ -14,7 +14,7 @@ check_image() { image=$1 run_mayfail $TOP/btrfs check -s 1 "$image" - run_mayfail $TOP/btrfs check --init-csum-tree "$image" + run_mayfail $TOP/btrfs check --force --init-csum-tree "$image" run_mayfail $TOP/btrfs check --repair --force --init-extent-tree "$image" run_mayfail $TOP/btrfs check --repair --force --check-data-csum "$image" run_mayfail $TOP/btrfs check --subvol-extents "$image" From patchwork Tue Feb 22 22:22:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755994 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 225A2C4332F for ; Tue, 22 Feb 2022 22:22:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236036AbiBVWXP (ORCPT ); Tue, 22 Feb 2022 17:23:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236032AbiBVWXO (ORCPT ); Tue, 22 Feb 2022 17:23:14 -0500 Received: from mail-qv1-xf2a.google.com (mail-qv1-xf2a.google.com [IPv6:2607:f8b0:4864:20::f2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BBF7D6A052 for ; Tue, 22 Feb 2022 14:22:48 -0800 (PST) Received: by mail-qv1-xf2a.google.com with SMTP id a19so3481592qvm.4 for ; Tue, 22 Feb 2022 14:22:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=yqdw4YVw5sSSiHWU/iJ/VPFp1vA39yJmgksyJJqcEms=; b=m+2FGDyafrrPXtb17sjNj9/ed8nQA4ySvEddEzJCTgNmrVt23UwSUs/KZryKA2/61v A5f9k8DEwlzTX/xiuGwb9rXUrxLLlIlMUfhwo2vQp8B9X4jFArR6tK0WS0r5WVfkQeVT REop4AVGomgONpRlFVzcETlsxC07XxcZkl6Cilkwhu30VAwRmS2rxVlrGwZm/g+3RTz0 P00Mb1FWyosFDkiujJwKKpRO+/h9aF8Yyx9Z4D7BYLKzRSrsJTKV+sLCTrq+oUznxDsD ZkMX6wA9AQ8qiyl95xBHRaaJVXQSJacd/uMDhYQA/Gz/YiMdQdfgys1+4tOt5yuihXcB U7MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yqdw4YVw5sSSiHWU/iJ/VPFp1vA39yJmgksyJJqcEms=; b=bfD4YaLuCLLUAmuul7C8K+ZqEa+RSECIXYLtLqAlzOb5+7eKKnkNj7PV2pEPjDMJqr E3USTxQSwsuCYtEDw9xIFMYOXrHel2N+zqSQtBU1KkKNqGULfVy02VKS7E0Fh3GqVYfs evey0CEE/5E5OqLQQuIhS0rSphVaCS01KDbJ/+VyWvjnwujbBBgBXavIIZATiNpzDC/R uhvqs2tLofOqQimU2IqG/mNnacr+udd9brc1iMuTq10JY7hFhDixUzgTCEZftAq+u4ZR yKMlZZdQkSnqd+vvDH9xUXvl7cNGBh0Q+B8+0F3Pd1R4DQFwIBtJLi41V/5sxn3tnboQ CU3w== X-Gm-Message-State: AOAM532v5+Xf5wGCpkjCPjWbDHXQ2eb0TWMBCCBwpsIkDnMqYjVE3tM6 5GPUTelF9m0rQOAfhoZbP9m92AoMYCOImc1c X-Google-Smtp-Source: ABdhPJwnofHeephwR2sRrqegFLarHqCSdGsFnxTA0ypeK4pgkik0GKlnjydnJ/MIeXt7zeKF6tMRdQ== X-Received: by 2002:a05:6214:e43:b0:432:58fa:4cbb with SMTP id o3-20020a0562140e4300b0043258fa4cbbmr2057890qvc.94.1645568567697; Tue, 22 Feb 2022 14:22: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 f9sm580617qkp.94.2022.02.22.14.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:47 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 3/7] btrfs-progs: repair: bail if we find an unaligned extent Date: Tue, 22 Feb 2022 17:22:38 -0500 Message-Id: <447c176d9eea07e902c7ba81e307d64b496443d4.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org The fuzz test 003 was infinite looping when I reworked the code to re-calculate the used bytes for the superblock. This is because fsck wasn't properly fixing the bad extent before my change, it just happened to error out nicely, whereas my change made it so we go the wrong bytes used count and just infinite looped trying to fix the problem. Fix this by sanity checking the extent when we try to re-calculate the bytes_used. This makes us no longer infinite loop so we can get through the fuzz tests. Signed-off-by: Josef Bacik --- common/repair.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/common/repair.c b/common/repair.c index f8c3f89c..a73949b0 100644 --- a/common/repair.c +++ b/common/repair.c @@ -178,9 +178,11 @@ static int populate_used_from_extent_root(struct btrfs_root *root, if (slot >= btrfs_header_nritems(leaf)) { ret = btrfs_next_leaf(root, &path); if (ret < 0) - return ret; - if (ret > 0) break; + if (ret > 0) { + ret = 0; + break; + } leaf = path.nodes[0]; slot = path.slots[0]; } @@ -191,13 +193,20 @@ static int populate_used_from_extent_root(struct btrfs_root *root, else if (key.type == BTRFS_METADATA_ITEM_KEY) end = start + fs_info->nodesize - 1; - if (start != end) + if (start != end) { + if (!IS_ALIGNED(start, fs_info->sectorsize) || + !IS_ALIGNED(end + 1, fs_info->sectorsize)) { + fprintf(stderr, "unaligned value in the extent tree\n"); + ret = -EINVAL; + break; + } set_extent_dirty(io_tree, start, end); + } path.slots[0]++; } btrfs_release_path(&path); - return 0; + return ret; } int btrfs_mark_used_blocks(struct btrfs_fs_info *fs_info, From patchwork Tue Feb 22 22:22:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755995 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD214C433F5 for ; Tue, 22 Feb 2022 22:22:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236039AbiBVWXR (ORCPT ); Tue, 22 Feb 2022 17:23:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236032AbiBVWXQ (ORCPT ); Tue, 22 Feb 2022 17:23:16 -0500 Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BAAC6A052 for ; Tue, 22 Feb 2022 14:22:50 -0800 (PST) Received: by mail-qv1-xf2f.google.com with SMTP id o5so3495811qvm.3 for ; Tue, 22 Feb 2022 14:22:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=WTqlgxxXhrlzo4psylQE4cqYdLntx9kuBQkywth5G54=; b=pjes3EOBdNhPAOFMYWSmM+yOHVH+u8nXl/6mmTKmeNDeT96Uk9Eb1HguKq6I0B2A7l 0FAEO6xPLkMJWUs1maga7GL275v4c7HV/0WGy6vheoUu1tDdrVlAxQSs+WliFPpRFEBo xuW+gJbXVjeE5JJif/qtsnLLOfL+TrPJ7yoVtxO6ZVokU1W63dM3tl0zsydt5a5azOKp mdfTX8vbFERMZHpiqRPN57hUQ4B1oy4GBS/8F0BdkJtIGJnj3wXnb6cfNX+kTfcykBzq gOl57IT+YxRSDOClwH8Ug7t2FYGDEICFykX924V6biuauzzdm7e1ofVFMKO7B86lWOdL nIqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WTqlgxxXhrlzo4psylQE4cqYdLntx9kuBQkywth5G54=; b=pkpbWRH5AzI4iUg6gYSM09u5IpgU9+WEKsyd5Cswsb3f2Wrm8r2uCasOzKgiSSIDwc a2prp1Fvswx8r6Nf7Pp99PbvRuRRoEVMVR3CGJNf1hS1I3wjl8MEmNlc3Ubi05vBzhPq Dx5+XbfdLVpDifnLrgVhUIlSdXbInsJycJkf3vC79dvJ99Nm+zkJAf+wWQ+iqrYsWdhP /Z2f1Y29dZdf6lzvcAcL1s3xKchR71pOBgYUbCk1pk1+2Tzt8VBt+w/k/ackwEjRVRO6 NbEGcOr/C48nqoFxoNsb5adHFYlfeX/gDkn/qPca1EhHAHt3GprpGnUovtEIoGtPQ8jX Q2YA== X-Gm-Message-State: AOAM530Rjjf+OHocDWMzHQkElTN8rNXJQNYU6bTFfaEcwvzkIzB945b+ VtiJVe6tb59wAkmhdNFu2h0LcAvdx0gHPyZt X-Google-Smtp-Source: ABdhPJxySsQdbtDtlgLKc/Vz7GxWdfkIGDUJ9AWMZxjv/dWxJMOSLlOkhYSlBzo1RLSMf5DQ152dlg== X-Received: by 2002:a05:6214:10e8:b0:42c:6e7:c7d2 with SMTP id q8-20020a05621410e800b0042c06e7c7d2mr21008485qvt.56.1645568568999; Tue, 22 Feb 2022 14:22: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 s126sm592174qkb.72.2022.02.22.14.22.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:48 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 4/7] btrfs-progs: properly populate missing trees Date: Tue, 22 Feb 2022 17:22:39 -0500 Message-Id: <0acd92a3b95f21b89e249fdf2f78e914b6b9c1c0.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org With my global roots prep patches I regressed us on handling the case where we didn't find a root at all. In this case we need to return an error (prior we returned -ENOENT) or we need to populate a dummy tree if we have OPEN_CTREE_PARTIAL set. This fixes a segfault of fuzz test 006. Signed-off-by: Josef Bacik --- kernel-shared/disk-io.c | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/kernel-shared/disk-io.c b/kernel-shared/disk-io.c index e7eab1a1..1cd965aa 100644 --- a/kernel-shared/disk-io.c +++ b/kernel-shared/disk-io.c @@ -1059,6 +1059,7 @@ static int load_global_roots_objectid(struct btrfs_fs_info *fs_info, struct btrfs_root *tree_root = fs_info->tree_root; struct btrfs_root *root; int ret; + int found = 0; struct btrfs_key key = { .objectid = objectid, .type = BTRFS_ROOT_ITEM_KEY, @@ -1124,9 +1125,51 @@ static int load_global_roots_objectid(struct btrfs_fs_info *fs_info, break; } + found++; path->slots[0]++; } btrfs_release_path(path); + + /* + * We didn't find all of our roots, create empty ones if we have PARTIAL + * set. + */ + if (!ret && found < fs_info->nr_global_roots) { + int i; + + if (!(flags & OPEN_CTREE_PARTIAL)) { + error("could not setup %s tree", str); + return -EIO; + } + + warning("could not setup %s tree, skipping it", str); + for (i = found; i < fs_info->nr_global_roots; i++) { + root = calloc(1, sizeof(*root)); + if (!root) { + ret = -ENOMEM; + break; + } + btrfs_setup_root(root, fs_info, objectid); + root->root_key.objectid = objectid; + root->root_key.type = BTRFS_ROOT_ITEM_KEY; + root->root_key.offset = i; + root->track_dirty = 1; + root->node = btrfs_find_create_tree_block(fs_info, 0); + if (!root->node) { + free(root); + ret = -ENOMEM; + break; + } + clear_extent_buffer_uptodate(root->node); + ret = btrfs_global_root_insert(fs_info, root); + if (ret) { + free_extent_buffer(root->node); + free(root); + break; + } + } + } + return ret; } From patchwork Tue Feb 22 22:22:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755996 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2763BC433EF for ; Tue, 22 Feb 2022 22:22:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236040AbiBVWXS (ORCPT ); Tue, 22 Feb 2022 17:23:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236037AbiBVWXR (ORCPT ); Tue, 22 Feb 2022 17:23:17 -0500 Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49BEF6A053 for ; Tue, 22 Feb 2022 14:22:51 -0800 (PST) Received: by mail-qv1-xf2f.google.com with SMTP id x3so3485110qvd.8 for ; Tue, 22 Feb 2022 14:22:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=6BZ+XXWGNqSveaOKvZEzymkDdFbbFwhSqrpr7+8yraI=; b=WrZVs49vjMNFYpWiJ0Ju7B0HDw46e2WL00qhtbNsiZ8qKXGC7l0EvYuSmbcKdUlAM0 sSCTmXoeNn+fpH945ojn3Xdkq7aevGoxxsrdeksxcE3H+J3BZJRAPhKF13GdKDvZGVEo NC+CdeJQ6Lcf8X9cXvvCuR3ggoAYg8Cwx6qc0mNdMlq3LzEFhus81f42HpWFQ1rNH/j4 F+/qm/rJiVsVy8+CPebFzaMa0cBNHsRtw0sGQQQd84INylTZVA/d2nYSZPieU7Y8M0q2 o0qbD57aZK4o1eY8xvyKXJOiDDQYE8UcKDklemqm9No8rLywFyoNfgNvMi/uIysRi5nY bHng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6BZ+XXWGNqSveaOKvZEzymkDdFbbFwhSqrpr7+8yraI=; b=31orPOAakBJAV+Wg+T9m5AIIOY5ErHytSXYxTNB9DLVa8S7e0Co5Ef0W3zGMDZdmV1 X99RJdKMY8UxSFxMijMiahhX0RyZI3hnQhLgJbrl+eL1FuMihZv7RQMPXwqUG1ZWJ7Ea p3zJf8E+um7laDc86swyCbELIW/2tUR9U47JbflX8OgNHiOkYa9eJbp4JxUj7R3yvoGj TsB7nofwNY9LEOV9saU5ULMtGBdJR7KhPxEQInyI78gXLzC8fNj0L6P70GCqAUNs9QMp SiYa3gY3VcGE2Y2Q/OymxLSt3U9G5RaSSLWm0Slxbq2ZVgGZ6RMYwoGNSkuAjMxoZNuI CkJg== X-Gm-Message-State: AOAM532/xBWycSzeUEFHN8UV0CawWJrnlg/sJ0HJxiocDojXj1/LWYnp pVN3VGLrrsaSEqsZ6cLbyPSPWQUa3AOiJIyg X-Google-Smtp-Source: ABdhPJzQL2j6O7R6/AnnCvDOCPbgwuHJroTtZ5zmAUpBAoTa/kP/yv6EOia6R7YOSu9sGVV05v6e4Q== X-Received: by 2002:a05:6214:e85:b0:42d:f76c:d229 with SMTP id hf5-20020a0562140e8500b0042df76cd229mr21032319qvb.68.1645568570196; Tue, 22 Feb 2022 14:22: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 s5sm630946qtn.35.2022.02.22.14.22.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:49 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 5/7] btrfs-progs: don't check skip_csum_check if there's no fs_info Date: Tue, 22 Feb 2022 17:22:40 -0500 Message-Id: <1a0bbdbc600efc9bf09d89170e15f8047480474b.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org The chunk recover code passes in a buffer it allocates with metadata but no fs_info, causing fuzz-test 008 to segfault. Fix this test to only check the flag if we have buf->fs_info set. Signed-off-by: Josef Bacik --- kernel-shared/disk-io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel-shared/disk-io.c b/kernel-shared/disk-io.c index 1cd965aa..637e8b00 100644 --- a/kernel-shared/disk-io.c +++ b/kernel-shared/disk-io.c @@ -174,7 +174,7 @@ static int __csum_tree_block_size(struct extent_buffer *buf, u16 csum_size, result, len); if (verify) { - if (buf->fs_info->skip_csum_check) { + if (buf->fs_info && buf->fs_info->skip_csum_check) { /* printf("skip csum check for block %llu\n", buf->start); */ } else if (memcmp_extent_buffer(buf, result, 0, csum_size)) { if (!silent) { From patchwork Tue Feb 22 22:22:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755997 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BDFA5C433FE for ; Tue, 22 Feb 2022 22:22:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236042AbiBVWXT (ORCPT ); Tue, 22 Feb 2022 17:23:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236041AbiBVWXS (ORCPT ); Tue, 22 Feb 2022 17:23:18 -0500 Received: from mail-qv1-xf29.google.com (mail-qv1-xf29.google.com [IPv6:2607:f8b0:4864:20::f29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A30916A052 for ; Tue, 22 Feb 2022 14:22:52 -0800 (PST) Received: by mail-qv1-xf29.google.com with SMTP id a19so3482200qvm.4 for ; Tue, 22 Feb 2022 14:22:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=W+rvRUtZVNz1v5bV9gKWlKDCVW1gXcVkluaKc2htTpQ=; b=jdG/riD5YBzQv6dTjwv9Q3OCUngT4U5MOu1gqcTlIX6eUR5YyiasIFt+tC4Z6nnXff YnlMT52B29oXa7wOwyC01M/J2Pv9xkdf/wRyNL8zE2D3s8lk7ow7CwuM1Kyf5ft5QIsC iSVT/o+WhXjJxkC2h2y/Zm/2uf4Vr24CmGVjPTxiMPig5DHmDIC41scLWo7XlFcn6T3u qop7PYV4eCNGXOIbCXSSLkxwdo6kI3Dl5cORbH+4bPOmRwZbbl5TPOLZ6vHZ6HTHbn/u f3x2qM/UGPKxS3/s3bnIObco5/nlcHTp9+ljegeFm/R8c2rhcSI/om9h7FMeXsBIiK+E NIIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W+rvRUtZVNz1v5bV9gKWlKDCVW1gXcVkluaKc2htTpQ=; b=QQQMowp4ANS2hKp+1QSu3KX0UBEm9Qteea/KQuorwn+Tj2ou+XmKRKQ90RDn71sL1E aNXK97vCwexEansN+Yn2Pcxf2QxpzqDBTyUCkK8/3Vk/1Fyuwut19v5uNXnNhfxbnlG6 BeXYRDmFV0Zi9uf+nph1h8vRkxTvzV24/lFbGVf8X9Hnfg+Ms7WZEesTwmZF63PVMaBZ T072rK2arn5SLMbHFw6J35ttfTQpLevY/A4eNHpH3y2vPO+ev0oYKEUzhVVAjByEU67N 4caGpsoe5lGQnCjJ0981MIjes10+hP1TW/Um7vBDBoo562KOrhheBfyNoseQE1AjOfTZ BVPw== X-Gm-Message-State: AOAM533jrx3tNGEjoCHJIHmNtM7wPzXilBRCwmBmXyg7dxyzyXDohXJL 5CWktvGaOIO+R2mFE/hXkSH72ulMyB1HHR6+ X-Google-Smtp-Source: ABdhPJx1zMSeI7B/+CYIg1oaNqYqQPldOMsyfE/Ot8Gu/9r5GR1fpZdcUrd34A9AlDF02QdeKzs3Ng== X-Received: by 2002:ac8:5756:0:b0:2de:1ce6:bef7 with SMTP id 22-20020ac85756000000b002de1ce6bef7mr11251005qtx.461.1645568571476; Tue, 22 Feb 2022 14:22: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 h123sm504357qke.18.2022.02.22.14.22.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:51 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 6/7] btrfs-progs: do not try to load the free space tree if it's not enabled Date: Tue, 22 Feb 2022 17:22:41 -0500 Message-Id: <8bbb4ad9ae314e7f3eb03d7b4d6b6e75d957a8e5.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We were previously getting away with this because the load_global_roots() treated ENOENT like everything was a-ok. However that was a bug and fixing that bug uncovered a problem where we were unconditionally trying to load the free space tree. Fix that by skipping the load if we do not have the compat bit set. Signed-off-by: Josef Bacik --- kernel-shared/disk-io.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel-shared/disk-io.c b/kernel-shared/disk-io.c index 637e8b00..f83ba884 100644 --- a/kernel-shared/disk-io.c +++ b/kernel-shared/disk-io.c @@ -1192,6 +1192,8 @@ static int load_global_roots(struct btrfs_fs_info *fs_info, unsigned flags) "csum"); if (ret) goto out; + if (!btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) + goto out; ret = load_global_roots_objectid(fs_info, path, BTRFS_FREE_SPACE_TREE_OBJECTID, flags, "free space"); From patchwork Tue Feb 22 22:22:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12755998 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8514C433F5 for ; Tue, 22 Feb 2022 22:22:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236044AbiBVWXU (ORCPT ); Tue, 22 Feb 2022 17:23:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236041AbiBVWXT (ORCPT ); Tue, 22 Feb 2022 17:23:19 -0500 Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E800D6A052 for ; Tue, 22 Feb 2022 14:22:53 -0800 (PST) Received: by mail-qv1-xf2d.google.com with SMTP id a19so3482344qvm.4 for ; Tue, 22 Feb 2022 14:22:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=QbVBkN3XlY6j4jmnW4C94cRYNQSPdh8Ok2fbNkQNAsE=; b=HVTEyvTDwHNTBKZEk426cTqLlWjejmjBKIiFEb1q9MyIBT6xw0RRPoZ5M5c9nQNYrK 5BOBH4tpaWndUYnRZo7Y8iq79W4ZXq+wFi+krobCKyt6v/uaxMGRMd32sZr7mbLBNC6y CzPezQx1CmVTv/t6jmdPnsnDm7sXwA/k2FIdfTHuiZczIlKBHZ7KsRV+7VOAeYWd1Plq IOJoVW3c+CtnCXJtrTNpXrzcAgIB/voBpvqP6ntlJPbDHWtBnVRtBSK7RppOdUE+LgNu aBsaDZZKOL1lZvp1I6fPF8DgKSoQfuVWjs4eXCBunK0U2EkoTOrye0ByWTfHzMUoJCjy dvrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QbVBkN3XlY6j4jmnW4C94cRYNQSPdh8Ok2fbNkQNAsE=; b=YQX5JfgKsYKEq5hQAWe6piER5xJdEBBe+Vkt+s1B6XiQFgEiadaWoVWvSvR9tMp8iS W/CdJntoKtbdUh9r46HwB2cMIW698U4owpmW51LYZciBl7X92KgkV/iz1Vm0VmO0OxhU F4Jrg5vnlYX2vitHllKWLO1LDSlFJbj9Qcyd1W2Gs6GfjeB8NxJMhJuFtMIU2lVfXi4x F8egzucjEUX/FV95/RfY7WETurT+5EYw6xdD+bF3pDG5JZofM759o0MlniqmiEgiKx+w E5BYzS4XwfT54L89ZZWuLOu+9BL5DsALLA4/Ea2/dDJkC+reHM+KKblVrpYi5odjyDpD qxaw== X-Gm-Message-State: AOAM530SOlBbTNQukrImFLX0TKYZCyMa8KnTUq81f0Dfl45ZpGF4rica ACFmfZG3DymOHL/kmV+89pgkfw06nn8YBt5v X-Google-Smtp-Source: ABdhPJxmIFYsTlj/S1Hu22PBQqQ8mGEY+gM3Lnsv8kENhAAgZEgooa+smxVS/RNE+gX8H8eyRfF3hg== X-Received: by 2002:a05:6214:d82:b0:42c:4038:1cc7 with SMTP id e2-20020a0562140d8200b0042c40381cc7mr21044854qve.114.1645568572844; Tue, 22 Feb 2022 14:22: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 17sm624909qkr.60.2022.02.22.14.22.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 14:22:52 -0800 (PST) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 7/7] btrfs-progs: inspect-tree-stats: initialize the key properly Date: Tue, 22 Feb 2022 17:22:42 -0500 Message-Id: <85de81980e760a84783c68668b75771702d5fe4d.1645567860.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org I started hitting a segfault on fuzz test 006 because we couldn't find the extent root. This is because the global root search stuff expects the actual key to be setup properly, not just an objectid. Fix this by initializing the key properly so we can find the extent root and other trees properly. Signed-off-by: Josef Bacik --- cmds/inspect-tree-stats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmds/inspect-tree-stats.c b/cmds/inspect-tree-stats.c index 1fa35e7a..eeb57810 100644 --- a/cmds/inspect-tree-stats.c +++ b/cmds/inspect-tree-stats.c @@ -447,7 +447,7 @@ static const char * const cmd_inspect_tree_stats_usage[] = { static int cmd_inspect_tree_stats(const struct cmd_struct *cmd, int argc, char **argv) { - struct btrfs_key key; + struct btrfs_key key = { .type = BTRFS_ROOT_ITEM_KEY }; struct btrfs_root *root; int opt; int ret = 0;