From patchwork Mon Apr 29 13:29:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646962 Received: from mail-yw1-f177.google.com (mail-yw1-f177.google.com [209.85.128.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9004D67A14 for ; Mon, 29 Apr 2024 13:29:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397399; cv=none; b=hzRDKEM/O25sWcJ/BRMZ83SEcK6BJ+Mus+8GHNLAUdnzILCjkqluuQqbqsJkyttKHqfoJwxsPyhErCCtft5p8mAv3OBmBSOGy7qyab4HktF6VDV+rCo5VOF9B0RcAh09Pmtl9e8ZN7Qt3N5wQFJTyQYyxCB6pAGcf8l0h80HsF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397399; c=relaxed/simple; bh=F3d6Qihv++wQKFxkvWTlrSEB4w4EXSa83G5JD6f4ARE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rrqz7PtPIytZXGSoB/12t1nts+ywZQmwYOfNV1VjLQOQfYeAjUc2hRRdNAk74e7nP9aVarfTBZpmBuKQUd03Fh3xUpD7Q3zVrxfPIFUjIsNtaL25jNXL9kppjnFVdsZuaohPFH3EAKxp65yPcN9DCCmFSLz8Fg4QDJIPZ2KNNS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=A4iskGXX; arc=none smtp.client-ip=209.85.128.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="A4iskGXX" Received: by mail-yw1-f177.google.com with SMTP id 00721157ae682-6150670d372so33300567b3.1 for ; Mon, 29 Apr 2024 06:29:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397396; x=1715002196; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=T6YgBjv6xHbxEq4dJcwOVpR1231RQWvmYFp/ZNwUhRM=; b=A4iskGXXF0M1L1WIhsJULQ1P84hs56zQ8c+tuxGkLLQlLdvllihWqU9bzMT0RyaxGv m+x+3dxhoi42/REJo5zMK/7sL1ht23YkWPWVpOkzBoKHc2ug3g6b9tykG/7zXsFKESRe jr8PMMDKRSqvYS9oCVYfMlMSVt1ftRFfcz0hWG3T2AHBi+739XqFyOZLnGGaFchhW966 xSdUjdKqR5ohHp3Lcx2WCwRwMyIc2zbKooYST2gBPBA2YQd8vECMEeHi8pYWSAVRop+H AssRR9DgKMue0ejtw9mex5vRYbePhSFEMOp/j1S/9O+9dToEFVlNuYocXQNSxfjx9PUD hA9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397396; x=1715002196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T6YgBjv6xHbxEq4dJcwOVpR1231RQWvmYFp/ZNwUhRM=; b=bPor3cw76Wb8oQAJ7wPeIHKmP/KqJOetAs4A9Q2bwAZylZpAYh4P0NmLow3l99KznJ dW9JL34SLPuY5lGA7/1cJvBkz3UTvQD6uCHRPnp3EpLRtA4ztyoU65daWhtlR86UuUYz jvnbZKP/Yg/YMDDuFl22E3Leo50LrwTHsTwiCppUNb3BNB4knXw3ZVIIQrhVKdjB2MT0 /mPPCQiNL4TRo/YccjgcRz4bhQbHJ18AIrWglwWsdcgOkQNM2MkkFVQEMwVqqw2+nGLp W/WztOCRph+pBAzTLdPoOZ+t4fFfTsgVC2efUY3yPb50wquKQGd/TdEu+9UA/kFybQ1g NjEg== X-Gm-Message-State: AOJu0YwLp5brpM0UkJKD7MslvqVgoczk3ZrrsmyDSBFvTLv6LI8+G0VD XlXbIpq4Z9NJ9Dc03i6KFAXhdhPB0AQZjquGeyPI6kx6a3M3FGcHCJvFvblxSMcMXJ1GXEgTUSp M X-Google-Smtp-Source: AGHT+IFodyB+9L1wOEzOh35UAb9Wnkrwcc7XidsaQnVX0b//7Jwp8qGT95CnpLWMYk1I0vDeDHV3Lg== X-Received: by 2002:a05:690c:630c:b0:61a:b548:93a8 with SMTP id ho12-20020a05690c630c00b0061ab54893a8mr7987552ywb.1.1714397396409; Mon, 29 Apr 2024 06:29:56 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id t16-20020ac85310000000b0043718ece8dfsm10283013qtn.12.2024.04.29.06.29.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:29:56 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Cc: Qu Wenruo Subject: [PATCH v2 01/15] btrfs: don't do find_extent_buffer in do_walk_down Date: Mon, 29 Apr 2024 09:29:36 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We do find_extent_buffer(), and then if we don't find the eb in cache we call btrfs_find_create_tree_block(), which calls find_extent_buffer() first and then allocates the extent buffer. The reason we're doing this is because if we don't find the extent buffer in cache we set reada = 1. However this doesn't matter, because lower down we only trigger reada if !btrfs_buffer_uptodate(eb), which is what the case would be if we didn't find the extent buffer in cache and had to allocate it. Clean this up to simply call btrfs_find_create_tree_block(), and then use the fact that we're having to read the extent buffer off of disk to go ahead and kick off readahead. Reviewed-by: Qu Wenruo Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 47d48233b592..d020ee1a6473 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5433,7 +5433,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, struct btrfs_key key; struct extent_buffer *next; int level = wc->level; - int reada = 0; int ret = 0; bool need_account = false; @@ -5459,14 +5458,11 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, path->slots[level]); - next = find_extent_buffer(fs_info, bytenr); - if (!next) { - next = btrfs_find_create_tree_block(fs_info, bytenr, - btrfs_root_id(root), level - 1); - if (IS_ERR(next)) - return PTR_ERR(next); - reada = 1; - } + next = btrfs_find_create_tree_block(fs_info, bytenr, + btrfs_root_id(root), level - 1); + if (IS_ERR(next)) + return PTR_ERR(next); + btrfs_tree_lock(next); ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1, @@ -5517,7 +5513,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, } if (!next) { - if (reada && level == 1) + if (level == 1) reada_walk_down(trans, root, wc, path); next = read_tree_block(fs_info, bytenr, &check); if (IS_ERR(next)) { From patchwork Mon Apr 29 13:29:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646963 Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E03E6F061 for ; Mon, 29 Apr 2024 13:29:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397401; cv=none; b=t0+K1ZpPkxUyIFT7GjcYFOIrkma88/zCx/HThcepOVA0TxVk6SPjqcVB4W0+2oP3kmuXaq2OgS1xdRvCvRvpYQuU85Nl0mBoQUkfo7sYfjErQj0QNPXa85rkz1w1X6/48fAAGh5huPUDJznTmO1Gb5tM+jbvwvYS2OQiRXWgRPQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397401; c=relaxed/simple; bh=YGbDPi0JuDlU0hgLtxPiEPepBwlaJupeGP3H60dU4cg=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vf78gSk4Qoi7Vs5peIYUpZB0WuFcVW9gy0jeCDKXKxEweE4T98WEf6Ow4iMJJ8xSyHLUDtvfn/0bnRD7Jw8me8AcxWSRJv8L1n6hHGhbgVFLLzbG7NFbTYE3Pn4qzOHSQTxXLWOPuS1z+ciTVVEV8e5mesbQ//F2mUILmDLD3gE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=c6w2JPnl; arc=none smtp.client-ip=209.85.160.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="c6w2JPnl" Received: by mail-qt1-f179.google.com with SMTP id d75a77b69052e-43a317135a5so35826531cf.0 for ; Mon, 29 Apr 2024 06:29:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397398; x=1715002198; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=6/RFmZaq/0kMptzjzbqc1Lm9EPYN2ceZgwlM7sZe9EE=; b=c6w2JPnlYjaD9xfqaeRojxtgpe5HL0kyxAfl4VVq03s76+38F7WIE36Zi79UZylR5y DPLo6Tc/S/+1Xc4m1gBw+Bd2vPrqFYKPvk+eDUjU4rNgpayXPd9b6fjApJTHBT44m7KY z7j9/bv+sfMqLDZSuBKiPfTiGQvHrtUha+vQpCNDcNOro1+561qyzXXHdi7IWCppcJPS CvWNgRSg/n6TNAGH3jAS4rSnzUWQAJVAhhl3BPjjV7A7YfePVWicDDEOSEApZBBWtVYb GcPbclfpWJ8q1iC1QGKOlvcCNRsvwRmyLWUCp5nKzjPtb3eYchPEuLOn6JiQVZni4x7Q punQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397398; x=1715002198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6/RFmZaq/0kMptzjzbqc1Lm9EPYN2ceZgwlM7sZe9EE=; b=ZT6mMcO7RyOFvFLVMB75k1YC73acxeanExT5/iNrTKgvO1WgGzrPDW3iJ6Q0c5nVEg GpSoVawdKwqmalEoecQQlPRlr0SIynTccN9TcQaDFQXWg3VYPnZIrB3JV3XWsMVJ6Uon DkCEPmDmBQxoUxp64KqKLIzxkpiI9/S6mKGTnxGBVUT1xVdq0Dhl7/cr8jy6Ywh0LmJ/ Ed+eYR9Vsh457roOP5k6ffS1HZu0j5UF9R2mraj6JrUMyB0vWTCqzpLKapW6mXYUV7OQ NNRtEr2e+SErI6e6EHMlSiVFNgcadpfX9NWmDfGtJ/Blso11V0SQfdw6KM3VeDkvDllO KscA== X-Gm-Message-State: AOJu0YzWzz1hztRyWIhVqci5uUhsA/+zJ6+OiRftOUMc/pT+kg3+rhxS QtVayrjU0yHnJP8AUqRqQp6L5VnbRKZ2i+nmIekTPfB1ul0d65VQPs0hdoqfS8OtR1EpYhgRMVw T X-Google-Smtp-Source: AGHT+IGng+95vhaConYKbfVLDo4GlF5K3lPb7kqLNs0o3CvrIiVE63JjGAB3t642Brg10vVip8z47A== X-Received: by 2002:ac8:6f10:0:b0:43a:f50e:c7e6 with SMTP id bs16-20020ac86f10000000b0043af50ec7e6mr3470884qtb.10.1714397398025; Mon, 29 Apr 2024 06:29:58 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id w2-20020ac84d02000000b00435163abba5sm10363602qtv.94.2024.04.29.06.29.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:29:57 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 02/15] btrfs: remove all extra btrfs_check_eb_owner() calls Date: Mon, 29 Apr 2024 09:29:37 -0400 Message-ID: <5bda8e7bb4a93c39c3af31e0a7b62a7191aa572d.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Currently we have a handful of btrfs_check_eb_owner() calls in various places and helpers that read extent buffers. However we call this in the endio handler for every metadata block, so these extra checks are unnecessary, simply remove them from everywhere except the endio handler. Signed-off-by: Josef Bacik --- fs/btrfs/ctree.c | 7 +------ fs/btrfs/disk-io.c | 4 ---- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 1a49b9232990..48aa14046343 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1551,12 +1551,7 @@ read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, if (ret) { free_extent_buffer(tmp); btrfs_release_path(p); - return -EIO; - } - if (btrfs_check_eb_owner(tmp, btrfs_root_id(root))) { - free_extent_buffer(tmp); - btrfs_release_path(p); - return -EUCLEAN; + return ret; } if (unlock_up) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index e0bdf3ed2449..de71e793431d 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -635,10 +635,6 @@ struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, free_extent_buffer_stale(buf); return ERR_PTR(ret); } - if (btrfs_check_eb_owner(buf, check->owner_root)) { - free_extent_buffer_stale(buf); - return ERR_PTR(-EUCLEAN); - } return buf; } From patchwork Mon Apr 29 13:29:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646964 Received: from mail-oi1-f177.google.com (mail-oi1-f177.google.com [209.85.167.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30D567172F for ; Mon, 29 Apr 2024 13:30:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397401; cv=none; b=kRb6fZS37NN9eXtBgMaboNaOHdoBNs1UXm9y6Fp2NVe+IJ6Hbovc/0yW7u62k0om/9tnetS3P0mqOTGtk6e3UpaE1idUnO1ZrB6w/KUKST7QqThG2U/Uf7W3C5SSoKDfCPnXFKlod9x0u624s70m80xgYSdot/BHzTOeYQKWoz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397401; c=relaxed/simple; bh=HRe/cY89W88DPjqUozx9WNddjUI5Jt2zRhFofBo1x24=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a79iYYfuMt33jAElEvCJhV3FN01fLyTOE0oTR0saWkZUW5jxc2H+pEAIicKGsg/FufghAiReb9GbRi9MoHwd+udPhKLfPoqSZoDz6//pOmIcvfynjmZmMJ5x592CgQVgmcNSR5RbTgkNlPiFDT7GhhoiLFL+sWOMzocGpvnrZHo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=ze23JWfm; arc=none smtp.client-ip=209.85.167.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="ze23JWfm" Received: by mail-oi1-f177.google.com with SMTP id 5614622812f47-3c709e5e4f9so2861453b6e.3 for ; Mon, 29 Apr 2024 06:30:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397399; x=1715002199; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ccXBod5dCco1QGMkPtLIUd6x9rTE1uxOFGGOETtDk7k=; b=ze23JWfmmuKEBlg8mI7geFR3AxQn1aMBrzoMV9d6vheEPuOzUasw4gWg5uqmoA0rgS wBqK76AV3LP2rkNKbftNuc8jhwhmZOlc5XtZ7hdZcAN2a6XVRsxwQ7gOZPdjmJXdBUSZ sMO9eRjf2Ghuv76c4p0S/RsgsuWVZJEPnen1sNZsSsZFNhkTQmyq9tQQqiIjY2WCu1nD h8M7NgWhwYAuEMDDr+TeVu8yjFsOnBain8Em3LDws6h4oZxA+IawRbupn7OdD2I30hUX 4UJbmyY/TIoVM/FK4J5mSitG4VpIkwRoecdNACnJ+7pYIMVj6/s/QKmBMwzrqGit4qRt xewQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397399; x=1715002199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ccXBod5dCco1QGMkPtLIUd6x9rTE1uxOFGGOETtDk7k=; b=D+4LRwvViiF0YgNkmsrPS7sQlEWZ37KZxTVDPBk0GubabrDWfdIXUGVG6PQK+yuL3y JE2u3TVcxGaeifz1TneiuERrPvpZMY3Vwva15ApgTwWtzQac1XrWC8RDoCj232hsjue1 h1j42cmknmhJuUb5EjxCKrmzBGIBJb1V+25WohVy1KkECveJVVy+osvk2l3KSdiGjPKb g0ujl2q9OHYsp1pRIwMTOiLxXih8XIM+LWVtslxv2Wm79MrH7PeTjOLOZJ+9RQKZUG+U ywAz8NKt1sERjXNxn7FLH6D9vDyd/8pqKBSAlQn8xt+gIYfTMuBDDcku+b2WSoTLG4Pk AVjw== X-Gm-Message-State: AOJu0YyIxjw6zBYOAhBX5LN1NPxZykvVkZIZVUJxJdO0oPRbIphPDBPV Gf+ViW9nnAap2JMNNZzLL2BqKhAfzF47rkC47qBUlLrKyN/34hcMndg6S3q7OK44MGRiUeBWWaD n X-Google-Smtp-Source: AGHT+IElKeOETBgr3UgYGmiBh6MgFFEpk3V0EySd64a2oDGHh6/sEbcPaBLFlBMKpImM3iFGDNtZYw== X-Received: by 2002:a05:6808:358:b0:3c6:e81:4272 with SMTP id j24-20020a056808035800b003c60e814272mr11166817oie.10.1714397399213; Mon, 29 Apr 2024 06:29:59 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id d13-20020a0cc68d000000b006a0d46d13bfsm407872qvj.69.2024.04.29.06.29.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:29:59 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 03/15] btrfs: use btrfs_read_extent_buffer in do_walk_down Date: Mon, 29 Apr 2024 09:29:38 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Currently if our extent buffer isn't uptodate we will drop the lock, free it, and then call read_tree_block() for the bytenr. This is inefficient, we already have the extent buffer, we can simply call btrfs_read_extent_buffer(). Collapse these two cases down into one if statement, if we are not uptodate we can drop the lock, trigger readahead, and do the read using btrfs_read_extent_buffer(), and carry on. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index d020ee1a6473..fa59a0b5bc2d 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5507,22 +5507,15 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, if (!btrfs_buffer_uptodate(next, generation, 0)) { btrfs_tree_unlock(next); - free_extent_buffer(next); - next = NULL; - *lookup_info = 1; - } - - if (!next) { if (level == 1) reada_walk_down(trans, root, wc, path); - next = read_tree_block(fs_info, bytenr, &check); - if (IS_ERR(next)) { - return PTR_ERR(next); - } else if (!extent_buffer_uptodate(next)) { + ret = btrfs_read_extent_buffer(next, &check); + if (ret) { free_extent_buffer(next); - return -EIO; + return ret; } btrfs_tree_lock(next); + *lookup_info = 1; } level--; From patchwork Mon Apr 29 13:29:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646965 Received: from mail-oo1-f54.google.com (mail-oo1-f54.google.com [209.85.161.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 738C471745 for ; Mon, 29 Apr 2024 13:30:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397402; cv=none; b=FHitYPMb+Vv1AEzYoxCr3Ku5O5bzvP3vTxlJEETEASgVUG0PrMSBQ+Cw2X+8VOLaG+LE2rL3GQm4em6Hh9aTmEqVI31bTSL1bHIMfa/yxW8xAvpLmYmOt9A8tEe9F238x/v0UXNhtlvHuLsevUg3Qvd3jfCkm4Xl+JkBK9GuH/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397402; c=relaxed/simple; bh=fYq78qYTSQ/+Y+QM3pFr52t3obwjC6nncoDUrZbsqLc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UMP61VJiwxcZDN0TzTiprE/14vOujsdiKNdC2JGV6so+3LaP3CGjFSaSICE+c7abREA8L9+Ot0dh4uZnzyB1id79A70Oj4v2QSfDaBOOrEnKXHSyeob3Rj5FBUS/ddyTtHpcNW/iNB8dSaRlsdvxN2idJeAETXsfxGaCqn61Oow= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=qumU3vWj; arc=none smtp.client-ip=209.85.161.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="qumU3vWj" Received: by mail-oo1-f54.google.com with SMTP id 006d021491bc7-5af23552167so2908196eaf.1 for ; Mon, 29 Apr 2024 06:30:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397400; x=1715002200; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JUMgMR07HOPlAJJcrUpT3nPIaH1wKehtqfxgaAiuFec=; b=qumU3vWjn0SAIvQVgIL0TGyp/oG3X0+Lcd3bPcG2G9/Jc1hDysXGvNVWc8utYvqoGT dMgavSYaj8WDBOC+0oKy5vWqZV6nDUFoAT/gGKIpBHlIIG+M6pBIImZ3I8+vLbb+NREG Z2LOZqCF4UFFJD4C/Ghl2NeoJYhupchvq/3EGFgwyMkF+3hYTeTYD55X6ChFVeZBjbYw Ub84qR4NBUT3RjuIXIU8LhvLlbCxPgN1dtPT7J1/cz9/cj5Ut6ujlvAJQUKb9RcGQz9q 7CKLB0kME27idBnIP0bkmyPUXRPqXVey9q11zCTPhMtyOtm2VIzMzGFZbrvsiD6PI8MO NK0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397400; x=1715002200; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JUMgMR07HOPlAJJcrUpT3nPIaH1wKehtqfxgaAiuFec=; b=tQB3a+LBR4MpB2AZOHHFFx+BoH+d8aP7g6hH+25TfPy5rBKcHlHJ3dmOXIkUtqxseL Up/0mZ6Yf+ayu8HNm2nYxpUic0nmbPalfxerJNJjy1W6+gONENtnTEh7jisej/Piy416 CBEDGtp7VEZHSh5uUGZ+0WvQkStJ97mCdvPh2kKcetP6PBMJ2bB3OPEze3slhq22trSp mg1cO3Pig1a5Y99QVzxykunRWrS84ZPA9HRzdFePSflupvtsjsofTXu1MkGY/0Hw3Sq/ xFxLynTwtuDE1HgmKWwzpiXfle6Ptv7gt4Rpq78CLJfkUQGedbsu/kEXjoVfEwdUerUV TzIQ== X-Gm-Message-State: AOJu0YzYy6A+fgOqQ2nx+tS7ZNrlzbRI+L4+FtTp/ka1oHfzPCRKaPXN 0/K6Wujm1aHN1X0XBnr7tG8RAihirntZgEe2yFrtT2fgDLUbtaOCi3VceUVqaWf9NLcVx8xScqy G X-Google-Smtp-Source: AGHT+IHXCviVfTAZUGfIGqyOt/UlOdA3laBbBrVNGVaH5E6HsR4f88BUucpsXhzhG0QexXOZVVU+oA== X-Received: by 2002:a05:6358:5394:b0:186:4ada:4256 with SMTP id z20-20020a056358539400b001864ada4256mr7194051rwe.22.1714397400248; Mon, 29 Apr 2024 06:30:00 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id ev14-20020a05622a510e00b0043971e215a7sm8379632qtb.60.2024.04.29.06.29.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:00 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 04/15] btrfs: push lookup_info into walk_control Date: Mon, 29 Apr 2024 09:29:39 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Instead of using a flag we're passing around everywhere, add a field to walk_control that we're already passing around everywhere and use that instead. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index fa59a0b5bc2d..1d59764f58b4 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5220,6 +5220,7 @@ struct walk_control { int reada_slot; int reada_count; int restarted; + int lookup_info; }; #define DROP_REFERENCE 1 @@ -5316,7 +5317,7 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans, static noinline int walk_down_proc(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, - struct walk_control *wc, int lookup_info) + struct walk_control *wc) { struct btrfs_fs_info *fs_info = root->fs_info; int level = wc->level; @@ -5331,7 +5332,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, * when reference count of tree block is 1, it won't increase * again. once full backref flag is set, we never clear it. */ - if (lookup_info && + if (wc->lookup_info && ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { BUG_ON(!path->locks[level]); @@ -5423,7 +5424,7 @@ static int check_ref_exists(struct btrfs_trans_handle *trans, static noinline int do_walk_down(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, - struct walk_control *wc, int *lookup_info) + struct walk_control *wc) { struct btrfs_fs_info *fs_info = root->fs_info; u64 bytenr; @@ -5445,7 +5446,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, */ if (wc->stage == UPDATE_BACKREF && generation <= root->root_key.offset) { - *lookup_info = 1; + wc->lookup_info = 1; return 1; } @@ -5477,7 +5478,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, ret = -EIO; goto out_unlock; } - *lookup_info = 0; + wc->lookup_info = 0; if (wc->stage == DROP_REFERENCE) { if (wc->refs[level - 1] > 1) { @@ -5515,7 +5516,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, return ret; } btrfs_tree_lock(next); - *lookup_info = 1; + wc->lookup_info = 1; } level--; @@ -5604,7 +5605,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, goto out_unlock; } no_delete: - *lookup_info = 1; + wc->lookup_info = 1; ret = 1; out_unlock: @@ -5738,11 +5739,11 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, struct walk_control *wc) { int level = wc->level; - int lookup_info = 1; int ret = 0; + wc->lookup_info = 1; while (level >= 0) { - ret = walk_down_proc(trans, root, path, wc, lookup_info); + ret = walk_down_proc(trans, root, path, wc); if (ret) break; @@ -5753,7 +5754,7 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, btrfs_header_nritems(path->nodes[level])) break; - ret = do_walk_down(trans, root, path, wc, &lookup_info); + ret = do_walk_down(trans, root, path, wc); if (ret > 0) { path->slots[level]++; continue; From patchwork Mon Apr 29 13:29:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646966 Received: from mail-oa1-f51.google.com (mail-oa1-f51.google.com [209.85.160.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABCB7651B6 for ; Mon, 29 Apr 2024 13:30:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397404; cv=none; b=JHnIMnCcw7vokSe84MaEGapYBVooRlqioe7P2tmx9Tj5uDJThepYu+7qfKpB9OiFye4svncR200caOnLdorajnaxEuh5OgVrdRGZIHfPXKjCJjWkxu2jsjTKPs2U32U1o+EtW+2n1+vFe/ljNss/Q8FZ5PIGSLY60sxOyzc2uhs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397404; c=relaxed/simple; bh=i8RXtZ0smrzDy+1N96mqeYoGyp+Hs01PVjLVlvxxkGk=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YNpnJwiIAs1asknEALbOA7EshzjcImHs6xImP1KZLM6fhbwkF2IILGqWBjSaj798hYddqpMfPyOA1dNG9TkZipWkJV1n0AvGrQ+9bwIAQjfi6pzgohQCpgm+A61GSNoXWfAxGMGlPUyecRkL9JGD0i/7/ZDSy4dgeUTU6HYHQQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=yWqYiD+g; arc=none smtp.client-ip=209.85.160.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="yWqYiD+g" Received: by mail-oa1-f51.google.com with SMTP id 586e51a60fabf-22fa7e4b0beso1632163fac.1 for ; Mon, 29 Apr 2024 06:30:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397401; x=1715002201; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=7wGp5IYvkDHig0jwh1l9YZvi35B8FpyMMfq8GLRr3wE=; b=yWqYiD+gJWEiP6ZbE3oHI0l+kTVBLA/yIolAAK9B44kTmwg0osTE4PhZf6b1y/2PJQ uBbTMZN6QUfGo8xapj/2Nmh+yVeHhP2SwZu4eRWuUDD2doTPkzdkRZIwZ2c+OG6I90LU a9CCfpJaS/aP7Uivt1mbPi39twwAJUgy6pc7lUSBZ8hiHbzZUO6BIdJN8mhvQ2K+PZoz Mz7uB360zXrE6x8zHwpNLvFcbj/dZw+38Oa005wfoiuj80KD6dqiWdnciWAGPRDzDfJr TllpoeGjNhAq1cK/bcE3ZPQUDeZNLEruOBJ5oK8e4sqX4q9ifLHN34Hc1SUthKlrSsTM mGsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397401; x=1715002201; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7wGp5IYvkDHig0jwh1l9YZvi35B8FpyMMfq8GLRr3wE=; b=d96/2D9t8WdEDxLhAURVINYm/iNbuJz8CWx/gKpiZNzwGXeOhyG09OLXVAi3Yl3y6T u+XCD8le0pNLs3CZfVHn3BfgixArdq8x4rlpIbWDHgBiajsicDwrsqtuonZJpWYbHQom kN9luxxXtOow0g4PNgdpn8LYEcbDm2yxQzEtJ62DVIN6+5HKbsiyZsCKV+3X8srmGvRJ jicxffK3iP928H/IqFTWPvECfsYPp9V4BkHDR1r6iMRCbKg9bOu0VpysdyoljQPuz4iW MmygXKPP3HhRl2B0Xmb6/jRdvREP4g8HYRb9F3g5m8bLXO4w2bpEB2LEf7Y5meYkqZFW n72g== X-Gm-Message-State: AOJu0Ywtfb+x5dTugQVid6ibB0mjxo+R8bm9pmwoqcgIzo3faaZG+ME6 DK2qiJD93spxBKmkt3rthCmHNt8mnlRCDkjI6r6ueByYTfjs449AZ6SFoHO1Xgc0dil+Du/E5xo r X-Google-Smtp-Source: AGHT+IF9jVAgMJL3izWeMSFC2lL/QPD37imuL9ti8ouxoPRr+YqK2bHP7JFnHU0Dn097VxqEh3OdyQ== X-Received: by 2002:a05:6871:7aa:b0:23a:980f:1fb8 with SMTP id o42-20020a05687107aa00b0023a980f1fb8mr11430000oap.53.1714397401628; Mon, 29 Apr 2024 06:30:01 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id oo8-20020a05620a530800b0078d693c0b4bsm10399381qkn.135.2024.04.29.06.30.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:01 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 05/15] btrfs: move the eb uptodate code into it's own helper Date: Mon, 29 Apr 2024 09:29:40 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 do_walk_down() already has a bunch of things going on, and there's a bit of code related to reading in the next eb if we decide we need it. Move this code off into it's own helper to clean up do_walk_down() a little bit. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 68 +++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 1d59764f58b4..8f5cf889e24d 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5408,6 +5408,51 @@ static int check_ref_exists(struct btrfs_trans_handle *trans, return 1; } +/* + * We may not have an uptodate block, so if we are going to walk down into this + * block we need to drop the lock, read it off of the disk, re-lock it and + * return to continue dropping the snapshot. + */ +static int check_next_block_uptodate(struct btrfs_trans_handle *trans, + struct btrfs_root *root, + struct btrfs_path *path, + struct walk_control *wc, + struct extent_buffer *next) +{ + struct btrfs_tree_parent_check check = { 0 }; + u64 generation; + int level = wc->level; + int ret; + + btrfs_assert_tree_write_locked(next); + + generation = btrfs_node_ptr_generation(path->nodes[level], + path->slots[level]); + + if (btrfs_buffer_uptodate(next, generation, 0)) + return 0; + + check.level = level - 1; + check.transid = generation; + check.owner_root = btrfs_root_id(root); + check.has_first_key = true; + btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, + path->slots[level]); + + btrfs_tree_unlock(next); + if (level == 1) + reada_walk_down(trans, root, wc, path); + ret = btrfs_read_extent_buffer(next, &check); + if (ret) { + free_extent_buffer(next); + return ret; + } + btrfs_tree_lock(next); + wc->lookup_info = 1; + return 0; +} + + /* * helper to process tree block pointer. * @@ -5430,7 +5475,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, u64 bytenr; u64 generation; u64 owner_root = 0; - struct btrfs_tree_parent_check check = { 0 }; struct btrfs_key key; struct extent_buffer *next; int level = wc->level; @@ -5452,13 +5496,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); - check.level = level - 1; - check.transid = generation; - check.owner_root = btrfs_root_id(root); - check.has_first_key = true; - btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, - path->slots[level]); - next = btrfs_find_create_tree_block(fs_info, bytenr, btrfs_root_id(root), level - 1); if (IS_ERR(next)) @@ -5506,18 +5543,9 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, goto skip; } - if (!btrfs_buffer_uptodate(next, generation, 0)) { - btrfs_tree_unlock(next); - if (level == 1) - reada_walk_down(trans, root, wc, path); - ret = btrfs_read_extent_buffer(next, &check); - if (ret) { - free_extent_buffer(next); - return ret; - } - btrfs_tree_lock(next); - wc->lookup_info = 1; - } + ret = check_next_block_uptodate(trans, root, path, wc, next); + if (ret) + return ret; level--; ASSERT(level == btrfs_header_level(next)); From patchwork Mon Apr 29 13:29:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646967 Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D1FE6E60E for ; Mon, 29 Apr 2024 13:30:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397405; cv=none; b=Zt1cLxNBlq13J/4D9lOtTuz3K0qFaEoWu1r3HKt3wm/04fpXC6gR2pXcbLSh6dqe/h+1NHsVYC58Qd/0Oh+RBN4MS7O5yKkqP+5uB9FPOO6OSA8WvyuiIu+eUyzAD2CbivQjbbMBWI/tIrVRXOVZfZzubY3zbxEir79H5gXbScY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397405; c=relaxed/simple; bh=Xkik9oyzjLOjQjX8zLJDqz5ahPdSsEF6qd/+9+fLnlc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nR4q4ePKrg6jfDxN2fhjlIdLxZDG4gF8exl8WgIt+0PbtcrcOJeTvwAnilY+UXXSD6VftSwHrgwIA/BFOAzHZd3DEMfATXS6tAsmBV07biz4roSPB1GI/SlMdwnyWh+PGtWIjLJ+N7vTaGT3ekJI34p5l+CH9a5P1IHDwtzU6nE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=A8mib3VZ; arc=none smtp.client-ip=209.85.219.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="A8mib3VZ" Received: by mail-qv1-f54.google.com with SMTP id 6a1803df08f44-6a0c8fb3540so9553046d6.1 for ; Mon, 29 Apr 2024 06:30:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397403; x=1715002203; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4Anif3BubDGLs9ZXWD9H+TR+TBYRn+hGnqSRX6TXZ7U=; b=A8mib3VZcdy6pxyeGh5/bhZ6CSFrH3FsXwIvTTXuNVUf6WAWjVOIOvtERBzwqhskzh UiHa8+B9hwBdQPxPdGDBs00d307QqEikLTTDHC38AaMUrZGGOTAi4bfPhVfHQr9eBUBl 4cogcK0AfzTlcydme7BrB1AxrBR+eXzKCyy3bz8OrdJdvzzhb1Db9IFUo0hW2MqbAduB +59r/KDpWXj7xeaU/2fSLqTjXvyPJEFDY/7v67MiDhwW6NVtM0lEoUFAV25Zyg/ldjp5 zOIAkZy+6f06zhgNT41gm5XCmMYpgqgSyvM9dLsvfPb9riGpA9vJfGVhLJ0OsV8v/k2H ZJgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397403; x=1715002203; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4Anif3BubDGLs9ZXWD9H+TR+TBYRn+hGnqSRX6TXZ7U=; b=awOuByDrAuhEnNZNLYQ/e5n3ZOYypf25VxESLu+mJg+EVPbnna67pAG4Nz+prOJzfn txPx9hq9cjMuWzx0xxN0jBsNcxGtVL3ckc9z+7p1rlvQKeHNvL6TidsXLb1CKMqzo+6r FMmpQocZMtLV6TSiVyIN3efIEK6H0oS/b2WIkNlxkc9/ILSozSeTWG56hv/SsdYrSZsI IQnlqFX9pxj/+PS9LucnhOarZNqpG8hYQmTfTC73memV2bbf7RxAB9OQsP3GhTaceddm cow5KC5UWfm14/Ugu0mChzqNUtF4rX1I/9AQoXOkR0SXu0OM80VU/49v7y534U+WzgSi Qkmw== X-Gm-Message-State: AOJu0YxSRe8JF9ty/ZFS0qc1dCUX8STz8vXKiiYYjezKc5nGBSKLbPVI 0tDJEEaY7K2L3hojcsH8Pdd5MnKc3uBw6uMG3aaDh+n8GbMPkYHvwTsuurJJDbPiLKmUs3FosfU m X-Google-Smtp-Source: AGHT+IHW+M5cErZiPj+RR2QiR7GdHdcV2qkvZdbwEGT3Pa6GFDq8qW4/+YbxR0VV0rbzqWMO59HXgQ== X-Received: by 2002:ad4:4ee8:0:b0:6a0:8da7:3267 with SMTP id dv8-20020ad44ee8000000b006a08da73267mr20011183qvb.7.1714397402859; Mon, 29 Apr 2024 06:30:02 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id d12-20020a0cea8c000000b006a0ccc14e43sm1070338qvp.18.2024.04.29.06.30.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:02 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 06/15] btrfs: remove need_account in do_walk_down Date: Mon, 29 Apr 2024 09:29:41 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We only set this if wc->refs[level - 1] > 1, and we check this way up above where we need it because the first thing we do before dropping our refs is reset wc->refs[level - 1] to 0. Re-order re-setting of wc->refs to after our drop logic, and then remove the need_account variable and simply check wc->refs[level - 1] directly instead of using a variable. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 8f5cf889e24d..ae11a2bd417e 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5479,7 +5479,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, struct extent_buffer *next; int level = wc->level; int ret = 0; - bool need_account = false; generation = btrfs_node_ptr_generation(path->nodes[level], path->slots[level]); @@ -5519,7 +5518,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, if (wc->stage == DROP_REFERENCE) { if (wc->refs[level - 1] > 1) { - need_account = true; if (level == 1 && (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) goto skip; @@ -5562,8 +5560,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, wc->reada_slot = 0; return 0; skip: - wc->refs[level - 1] = 0; - wc->flags[level - 1] = 0; if (wc->stage == DROP_REFERENCE) { struct btrfs_ref ref = { .action = BTRFS_DROP_DELAYED_REF, @@ -5608,7 +5604,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, * already accounted them at merge time (replace_path), * thus we could skip expensive subtree trace here. */ - if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && need_account) { + if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && + wc->refs[level - 1] > 1) { ret = btrfs_qgroup_trace_subtree(trans, next, generation, level - 1); if (ret) { @@ -5633,6 +5630,8 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, goto out_unlock; } no_delete: + wc->refs[level - 1] = 0; + wc->flags[level - 1] = 0; wc->lookup_info = 1; ret = 1; From patchwork Mon Apr 29 13:29:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646968 Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A52A745E5 for ; Mon, 29 Apr 2024 13:30:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397406; cv=none; b=T0zUhTKf7FrEaMw5gAlQ2wtV8feaYiad3lTdSNSBwUjSXdgtOGXGtdN2eUWCPHcvpLL8QN0oMSYZRphiX3CmW2pgmgt1EJSP3p/aJyV1y+fisNtmGfkEriWFBRHpUbBuzTqvHtUEa2QiyEtVZtYpCwD50zhbNt2WFE5FivzSDOE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397406; c=relaxed/simple; bh=LQ8r/jHHzE6+gmHFXFiUfQEBkGuWHJ1pVhZ7DHF6m0k=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aJdzTPWMYm6kwYPQCozTMUvGXbJ5RZYFrPwB/eMfRkNKutxcqT7jpauAAHUQ9F6iTgwaE7QT8CuUiNE1aiOGrYQs2KqlJbCEgkrTkxdrudDtPy1kyM0J7FdPwmKqLD46YN8QhIzeJdGyndQE47JOwn3ocR6+8nj86PFiEtq9Pq4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=sT0FU5Ag; arc=none smtp.client-ip=209.85.222.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="sT0FU5Ag" Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-79100a90868so22680285a.2 for ; Mon, 29 Apr 2024 06:30:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397404; x=1715002204; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Bs0EQg6KDmseCGr1wk4s34jwgnqkOtSw5juHC8avOSY=; b=sT0FU5Ag77A8j6BTMi6vhk1QfnRrY4cak7heZ7jaqb23+icpb6HZOsFSumIiVcmzUl 13dnmA/qqAzUvnKIRlRHSgGjhHg5okAa55Sr+KXVf7PwX2egYPxbWDiIzSRWz9uRZSI9 tTzlXjsF/OwK0BCKAyFb2iP1QHVZ9kVErj68XFLVv1qxqroPDcEGou0+HX2E8iLTVxJI YBnykfHcT0l6LJRV3FdNJmVO44Fy1QQX+4I3aaKpFiILQGmbvm6c7TUdJVFa6oxxf/6T 2+iAb4mYZs34QFxm3+jX9Hs46gvrWrCL8RV7eQb4breDDgLwcGxLqmkcPuFja55Oo0sl OefQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397404; x=1715002204; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Bs0EQg6KDmseCGr1wk4s34jwgnqkOtSw5juHC8avOSY=; b=T54SI645UVYu5h2sDrYwmyRwjA7US5YHc8b+AJluQdCNezz0Jjb/e0LsqrRNIhEqMW sfv9Q1605H6RhzlrSkDm6oOzUh1DGn+u3s1GmA7VHvnjJ23r9JjdKHIs/JnMFRmEDZEv rNAJkOmjDpz/8UVSkoJvJuNW5Gl64wpVQpymCRUDcMq7Iryh8VmUj2O7j+xRX+vIfflu PrsJzeo03d7lY2zCIoMjTpqqhwIm8jiPVgAiCmwllJHrDL9NycSnlpsXe5JyEwvngirC CjHbxryzAi/oaJua9LQ1boS3w5EunwhYpX9LTJx52O05rNS7bp7H8hkeJV68o8MhYjWy b/9w== X-Gm-Message-State: AOJu0YzMzekaA9CYMSRESf8E7zMwv6xNWKTFPQNV7UNN150XSG6enV6D 0/G0BDHC6R6Qc/Upmk/dM8AkR1qBNbh2zvx0EpHfiyoj8e9YHcxu5InTJZ+Vc4t/G7Cq1F6nZtB a X-Google-Smtp-Source: AGHT+IFswRAbtRCiEBHIRwlQv6O96/oYPpAIVDRxbZnEWXQhtGNXWqofpga7DEP7oGFEwTEZ8nte0Q== X-Received: by 2002:a05:620a:1aa6:b0:790:bddd:dd6d with SMTP id bl38-20020a05620a1aa600b00790bddddd6dmr10799479qkb.14.1714397404009; Mon, 29 Apr 2024 06:30:04 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id c13-20020ae9e20d000000b0078efd245e09sm10452888qkc.79.2024.04.29.06.30.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:03 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 07/15] btrfs: unify logic to decide if we need to walk down into a node Date: Mon, 29 Apr 2024 09:29:42 -0400 Message-ID: <7ada6f456498532fd701ce4ff42e05b60269947f.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We currently duplicate the logic for walking into a node during snapshot delete. In one case it is during the actual delete, and in the other we use it for deciding if we should reada the block or not. Extract this code into it's own helper and comment fully what we're doing, and then update the two users to use the new helper. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 135 +++++++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 44 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index ae11a2bd417e..4c6647760aa5 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5226,6 +5226,81 @@ struct walk_control { #define DROP_REFERENCE 1 #define UPDATE_BACKREF 2 +/* + * Decide if we need to walk down into this node to adjust the references. + * + * @root - the root we are currently deleting. + * @wc - the walk control for this deletion. + * @eb - the parent eb that we're currently visiting. + * @refs - the number of refs for wc->level - 1. + * @flags - the flags for wc->level - 1. + * @slot - the slot in the eb that we're currently checking. + * + * This is meant to be called when we're evaluating if a node we point to at + * wc->level should be read and walked into, or if we can simply delete our + * reference to it. We return true if we should walk into the node, false if we + * can skip it. + * + * We have assertions in here to make sure this is called correctly. We assume + * that sanity checking on the blocks read to this point has been done, so any + * corrupted file systems must have been caught before calling this function. + */ +static bool visit_node_for_delete(struct btrfs_root *root, + struct walk_control *wc, + struct extent_buffer *eb, + u64 refs, u64 flags, int slot) +{ + struct btrfs_key key; + u64 generation; + int level = wc->level; + + ASSERT(level > 0); + ASSERT(wc->refs[level - 1] > 0); + + /* + * The update backref stage we only want to skip if we already have + * FULL_BACKREF set, otherwise we need to read. + */ + if (wc->stage == UPDATE_BACKREF) { + if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) + return false; + return true; + } + + /* + * We're the last ref on this block, we must walk into it and process + * any refs it's pointing at. + */ + if (wc->refs[level - 1] == 1) + return true; + + /* + * If we're already FULL_BACKREF then we know we can just drop our + * current reference. + */ + if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) + return false; + + /* + * This block is older than our creation generation, we can drop our + * reference to it. + */ + generation = btrfs_node_ptr_generation(eb, slot); + if (!wc->update_ref || generation <= root->root_key.offset) + return false; + + /* + * This block was processed from a previous snapshot deletion run, we + * can skip it. + */ + btrfs_node_key_to_cpu(eb, &key, slot); + if (btrfs_comp_cpu_keys(&key, &wc->update_progress) < 0) + return false; + + /* All other cases we need to wander into the node. */ + return true; +} + static noinline void reada_walk_down(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct walk_control *wc, @@ -5237,7 +5312,6 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans, u64 refs; u64 flags; u32 nritems; - struct btrfs_key key; struct extent_buffer *eb; int ret; int slot; @@ -5279,26 +5353,9 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans, continue; BUG_ON(refs == 0); - if (wc->stage == DROP_REFERENCE) { - if (refs == 1) - goto reada; - - if (wc->level == 1 && - (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) - continue; - if (!wc->update_ref || - generation <= root->root_key.offset) - continue; - btrfs_node_key_to_cpu(eb, &key, slot); - ret = btrfs_comp_cpu_keys(&key, - &wc->update_progress); - if (ret < 0) - continue; - } else { - if (wc->level == 1 && - (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)) - continue; - } + /* If we don't need to visit this node don't reada. */ + if (!visit_node_for_delete(root, wc, eb, refs, flags, slot)) + continue; reada: btrfs_readahead_node_child(eb, slot); nread++; @@ -5475,7 +5532,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, u64 bytenr; u64 generation; u64 owner_root = 0; - struct btrfs_key key; struct extent_buffer *next; int level = wc->level; int ret = 0; @@ -5516,29 +5572,20 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, } wc->lookup_info = 0; - if (wc->stage == DROP_REFERENCE) { - if (wc->refs[level - 1] > 1) { - if (level == 1 && - (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) - goto skip; + /* If we don't have to walk into this node skip it. */ + if (!visit_node_for_delete(root, wc, path->nodes[level], + wc->refs[level - 1], wc->flags[level - 1], + path->slots[level])) + goto skip; - if (!wc->update_ref || - generation <= root->root_key.offset) - goto skip; - - btrfs_node_key_to_cpu(path->nodes[level], &key, - path->slots[level]); - ret = btrfs_comp_cpu_keys(&key, &wc->update_progress); - if (ret < 0) - goto skip; - - wc->stage = UPDATE_BACKREF; - wc->shared_level = level - 1; - } - } else { - if (level == 1 && - (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) - goto skip; + /* + * We have to walk down into this node, and if we're currently at the + * DROP_REFERNCE stage and this block is shared then we need to switch + * to the UPDATE_BACKREF stage in order to convert to FULL_BACKREF. + */ + if (wc->stage == DROP_REFERENCE && wc->refs[level - 1] > 1) { + wc->stage = UPDATE_BACKREF; + wc->shared_level = level - 1; } ret = check_next_block_uptodate(trans, root, path, wc, next); From patchwork Mon Apr 29 13:29:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646969 Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49A5374BE2 for ; Mon, 29 Apr 2024 13:30:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397407; cv=none; b=lk/dLrTQ1PNsu3/sBVbI6IQUlLjtiuHq8JlwHxOb0K5VvGj6Fli7PFwD0c3Tt45fPSs6+c24aG7LL4iOFEGtLTZ+cD3WHl//5dz4MK9uj+1BVt0tJr1atfXVbeQYdDUjc+OKGJdBJoYD7cHdlggmm5OFvnhvMb4Sz34kY9eBu08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397407; c=relaxed/simple; bh=ozJn28uetYl5jqiL3j5NZpx3Fnew0O9VQZ9vES2z1mY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vfa3mqbA/NVj/Sp/k96MjqLaARTwedTd8y1aIx596Nmzzh+hiVPdGLQhZTRDKXDVC+Gt9ASGS6htqH1gPECNHpQtIb4yqGjKsUq3NsNsUkzXAPOV9m1VjPia2nyBGkOG1YPwdgdynLYMqsX3N+fU+8wLxnYgREAT4KrcMQOGNZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=JuvY6HMZ; arc=none smtp.client-ip=209.85.167.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="JuvY6HMZ" Received: by mail-oi1-f180.google.com with SMTP id 5614622812f47-3c84bb69c6fso2385063b6e.3 for ; Mon, 29 Apr 2024 06:30:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397405; x=1715002205; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0Zwz3T/FubqPGoNBdrjMLwZUNRumqym3HUPrJS3Jpvc=; b=JuvY6HMZSyHIqTbNVqLuyXr/9eRxTZ0D6jOZGlZVPQWBioql7fJcQhHagVdm4bKzQH qm9ukigYOHBlvJDqQ1FSlopf17VIy0j5D4PWTjEeOMoPX8eedoDbIOF/Vd0r6YUAL/w7 fSiJvFMlroisYh2u+JtY0yBjvyDiOH4ysxprQnTOTvHtNPnIQFQYnGD1MR2JM3H8ciX2 zH1qPHQw5SlVumJdMocCuVhT2/9EUILGbfQrZWfSfc4vwBaaLzZ5kQqDfMv/MVEby9CI Q71PHxW4FHan3UTJLRPT81K8tijdS2GW78lJxIcAF/i8hM5SC3rLX7Jh6O9x9ew/NbeX YaFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397405; x=1715002205; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0Zwz3T/FubqPGoNBdrjMLwZUNRumqym3HUPrJS3Jpvc=; b=bA42rB566e+Eao2CRggICa0RHW1Cnmgq0w0x9txWAOQiQBzhOvO9LyRxyptDD65Dso w5Ien02IoNu6mD+MZNJJ88RnR5chLoG7sIW3SoJbQgjzRv5G11b5uFa7fq4waj3wlrku r3Kv9Fh32ByBMU68Nlvu9ah+UcrXCXsDtZvORITxnPLZ7zO4Okj5EUHunJxu1Sc6Vm7a ufstJGqTG/opPhVdnEbgyuBIRJjwEgkHeHpDBbLuE9HeUYIaI9AyvP6eEXBvNVDI38D/ zHV9GKxLdgdUH8HwhIJGbcGI9ipSrZNGZpXAeCRE4ibI4mo5pCION2KiGA5K0OQyC5nJ yH+Q== X-Gm-Message-State: AOJu0YwRr0febv4aUppCIGZcfZNqDQI2U1oKFU2q3BGBKTYtaVnk9hr5 T60bAwiXJlcn6fYnb3otOspdfxjk2ge6LZ0H3jNrjVTVAT18xAT0RyIKRRUYB6lKoyxuKoSSYhi P X-Google-Smtp-Source: AGHT+IFdIqD10ClN5fuRnd1jLLTh+vVjqKJRfekuRan3hXM8k/nW5EWTWdpwy7kpH5127kIx9vbWIA== X-Received: by 2002:a05:6808:10d5:b0:3c8:63b3:777c with SMTP id s21-20020a05680810d500b003c863b3777cmr5623268ois.30.1714397405176; Mon, 29 Apr 2024 06:30:05 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id g12-20020a0cf08c000000b006913aa64629sm10368812qvk.22.2024.04.29.06.30.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:04 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 08/15] btrfs: extract the reference dropping code into it's own helper Date: Mon, 29 Apr 2024 09:29:43 -0400 Message-ID: <411124bc3bfdedd085596a8ab645cc43b44c21d9.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This is a big chunk of code in do_walk_down that will conditionally remove the reference for the child block we're currently evaluating. Extract it out into it's own helper and call that from do_walk_down instead. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 162 +++++++++++++++++++++++------------------ 1 file changed, 92 insertions(+), 70 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 4c6647760aa5..bf59e2f00ff8 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5509,6 +5509,95 @@ static int check_next_block_uptodate(struct btrfs_trans_handle *trans, return 0; } +/* + * If we determine that we don't have to visit wc->level - 1 then we need to + * determine if we can drop our reference. + * + * If we are UPDATE_BACKREF then we will not, we need to update our backrefs. + * + * If we are DROP_REFERENCE this will figure out if we need to drop our current + * reference, skipping it if we dropped it from a previous incompleted drop, or + * dropping it if we still have a reference to it. + */ +static int maybe_drop_reference(struct btrfs_trans_handle *trans, + struct btrfs_root *root, + struct btrfs_path *path, + struct walk_control *wc, + struct extent_buffer *next, + u64 owner_root) +{ + struct btrfs_ref ref = { + .action = BTRFS_DROP_DELAYED_REF, + .bytenr = next->start, + .num_bytes = root->fs_info->nodesize, + .owning_root = owner_root, + .ref_root = btrfs_root_id(root), + }; + int level = wc->level; + int ret; + + /* We are UPDATE_BACKREF, we're not dropping anything. */ + if (wc->stage == UPDATE_BACKREF) + return 0; + + if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { + ref.parent = path->nodes[level]->start; + } else { + ASSERT(btrfs_root_id(root) == + btrfs_header_owner(path->nodes[level])); + if (btrfs_root_id(root) != + btrfs_header_owner(path->nodes[level])) { + btrfs_err(root->fs_info, + "mismatched block owner"); + return -EIO; + } + } + + /* + * If we had a drop_progress we need to verify the refs are set as + * expected. If we find our ref then we know that from here on out + * everything should be correct, and we can clear the + * ->restarted flag. + */ + if (wc->restarted) { + ret = check_ref_exists(trans, root, next->start, ref.parent, + level - 1); + if (ret <= 0) + return ret; + ret = 0; + wc->restarted = 0; + } + + /* + * Reloc tree doesn't contribute to qgroup numbers, and we have already + * accounted them at merge time (replace_path), thus we could skip + * expensive subtree trace here. + */ + if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && + wc->refs[level - 1] > 1) { + u64 generation = btrfs_node_ptr_generation(path->nodes[level], + path->slots[level]); + + ret = btrfs_qgroup_trace_subtree(trans, next, generation, level - 1); + if (ret) { + btrfs_err_rl(root->fs_info, + "Error %d accounting shared subtree. Quota is out of sync, rescan required.", + ret); + } + } + + /* + * We need to update the next key in our walk control so we can + * update the drop_progress key accordingly. We don't care if + * find_next_key doesn't find a key because that means we're at + * the end and are going to clean up now. + */ + wc->drop_level = level; + find_next_key(path, level, &wc->drop_progress); + + btrfs_init_tree_ref(&ref, level - 1, 0, false); + return btrfs_free_extent(trans, &ref); +} /* * helper to process tree block pointer. @@ -5607,76 +5696,9 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, wc->reada_slot = 0; return 0; skip: - if (wc->stage == DROP_REFERENCE) { - struct btrfs_ref ref = { - .action = BTRFS_DROP_DELAYED_REF, - .bytenr = bytenr, - .num_bytes = fs_info->nodesize, - .owning_root = owner_root, - .ref_root = btrfs_root_id(root), - }; - if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { - ref.parent = path->nodes[level]->start; - } else { - ASSERT(btrfs_root_id(root) == - btrfs_header_owner(path->nodes[level])); - if (btrfs_root_id(root) != - btrfs_header_owner(path->nodes[level])) { - btrfs_err(root->fs_info, - "mismatched block owner"); - ret = -EIO; - goto out_unlock; - } - } - - /* - * If we had a drop_progress we need to verify the refs are set - * as expected. If we find our ref then we know that from here - * on out everything should be correct, and we can clear the - * ->restarted flag. - */ - if (wc->restarted) { - ret = check_ref_exists(trans, root, bytenr, ref.parent, - level - 1); - if (ret < 0) - goto out_unlock; - if (ret == 0) - goto no_delete; - ret = 0; - wc->restarted = 0; - } - - /* - * Reloc tree doesn't contribute to qgroup numbers, and we have - * already accounted them at merge time (replace_path), - * thus we could skip expensive subtree trace here. - */ - if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && - wc->refs[level - 1] > 1) { - ret = btrfs_qgroup_trace_subtree(trans, next, - generation, level - 1); - if (ret) { - btrfs_err_rl(fs_info, - "Error %d accounting shared subtree. Quota is out of sync, rescan required.", - ret); - } - } - - /* - * We need to update the next key in our walk control so we can - * update the drop_progress key accordingly. We don't care if - * find_next_key doesn't find a key because that means we're at - * the end and are going to clean up now. - */ - wc->drop_level = level; - find_next_key(path, level, &wc->drop_progress); - - btrfs_init_tree_ref(&ref, level - 1, 0, false); - ret = btrfs_free_extent(trans, &ref); - if (ret) - goto out_unlock; - } -no_delete: + ret = maybe_drop_reference(trans, root, path, wc, next, owner_root); + if (ret) + goto out_unlock; wc->refs[level - 1] = 0; wc->flags[level - 1] = 0; wc->lookup_info = 1; From patchwork Mon Apr 29 13:29:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646970 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D66A74BF5 for ; Mon, 29 Apr 2024 13:30:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397408; cv=none; b=ilnoiT+30nZWAPq2lgBu6mxOiHx84nbu3UlrWHh+wLjCbSGSJtVpj/uOCqx1KijuDXUPeYS7A1gpi/4zzPAuVct02vFBGMw2NfS/xgxZDtZo52s9jvf/nRO0980xSDyGiYANJB7WQ9QY2w5IH2gy0GIgX5mMMdQHuGOLmZlptzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397408; c=relaxed/simple; bh=eNn8v4yxlSxXI5la1doDYCLdN5AUq9c9Go4aPSjyOB4=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kGSuD+lgUj2K+WrlE79mV3wsvwkjg8D2lT3rrLLauFw8Q3LZ1xYhn4l+erVcDfLffW2Z2NKWQBq/5cU20vfAfZoRYMOk949c+9KpAcLkBTCVBUy2gRI9Z8NGUVGRTYdZEVFQSxssO/KiOu/KF4dGBY/Llm8OOKGZA0GT596KtMU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=kvaYeRhu; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="kvaYeRhu" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3c74abe247bso2395702b6e.3 for ; Mon, 29 Apr 2024 06:30:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397406; x=1715002206; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Kd9anvl2wwYVLNkKNpL22YqkpY4M67UnyZ3hqVkAdBI=; b=kvaYeRhuUUBHgIsJuCgvWQXpt7WpV61N6ySmAe2sLurkKzaeCO+5BBNLF3ZsUsPXJX YNHVKFxKqe+QPrUywugWutIBXoD/HO/hocj9R8Ear78MnKCk9zHmnoIxO5wjRqySf5If Z5oupl1h5qM8M3OgINVQZ1UN14AtTCp41eGNYME2loypsDkiM94rLEI0AHVkKBpmHhbF jdQk/7ueuqpBJXzuLIcwvSKeuOQxmOeA0WMeSxwC6/D6fD6JV63d6y08Ubyq/8hgINOV 5+338p4nR/xO+BsbKJUa9sypv/vbuO7/OZteMARVUslYYM7IIa9Ui2XhfNcb5HrmoIoD +BGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397406; x=1715002206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Kd9anvl2wwYVLNkKNpL22YqkpY4M67UnyZ3hqVkAdBI=; b=PYiXh1waVYiqxDmrXJ1luAC7fz/bFVA/GsJhCUR8gF4nP+YFfkYsSW8KEGWpvfUoo0 sovsH3minrM2vJedkzKV3qJ1gGjCSuQaCE2HTWAzOIhFVqOdBqOOk9lykQ0h7W4h0Hhm CGA0qFic/PsHCWfCrbhErlRHbaBATAfUSpz7GJ8J+yzIXUoMqlvEteOCtZMLTt6gwm3T FnFwt7ZKxkfnnp7lIe6wwiE2PkzurOKOOl6M543wPAgupM6v0XYyBIkVT1ejci7xGo6h GjHj5+CBIRtnE/heRSr5yvzt8ujk6looznTCSwGP4CndKfuYC5XfiRRa4/VG8IcwIf+D ovtQ== X-Gm-Message-State: AOJu0YyL/JaKt9ms4Ye836NEkRKaAwdfaLFsb588Oz//zFfSZz0Ccr92 W5wi46k8nfhUfa/flNYEm7dgsDgbeYimQuuZoplnyHxSadmijvI5xxgYXjto1TcO+BYSGB//Qum F X-Google-Smtp-Source: AGHT+IHAZca9vx9FZPZSsIGYR+rq0akydBxUZDAGSJlhgFbrjHxKCZPeX5/TFiopiBpfIuOKUHdj0w== X-Received: by 2002:a05:6808:1528:b0:3c7:dfb:a295 with SMTP id u40-20020a056808152800b003c70dfba295mr13346004oiw.55.1714397406368; Mon, 29 Apr 2024 06:30:06 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id y13-20020a056214016d00b006a0d243cd7asm596949qvs.62.2024.04.29.06.30.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:06 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 09/15] btrfs: don't BUG_ON ENOMEM in walk_down_proc Date: Mon, 29 Apr 2024 09:29:44 -0400 Message-ID: <4a64650a4635ad7a0cd4fcbdb93e4344fe41660b.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We handle errors here properly, ENOMEM isn't fatal, return the error. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 1 - 1 file changed, 1 deletion(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index bf59e2f00ff8..df3b6acc63cf 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5398,7 +5398,6 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, &wc->refs[level], &wc->flags[level], NULL); - BUG_ON(ret == -ENOMEM); if (ret) return ret; BUG_ON(wc->refs[level] == 0); From patchwork Mon Apr 29 13:29:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646971 Received: from mail-oi1-f173.google.com (mail-oi1-f173.google.com [209.85.167.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9996757E5 for ; Mon, 29 Apr 2024 13:30:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397410; cv=none; b=uzY/bT4+4/7BdPwL8Fo5Wl2qfNBguyW+iPCyJA2hOF3LHYvJr6SFYrs1E7eQgeRyjevCfH3wy7Jr7vvz2SRtqFqRuTISTHOldlY7z/H14CfV5bzsM5QhuNWJm86xqLWyhs07NdVLq0dYTGiKSlI928JCbVL/qkRbHjkoh70IgDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397410; c=relaxed/simple; bh=zoV9661pC/mzj2acwhd6/oXf5IOiZQXnPfw67Hhy384=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ofF9+rtB4ZtfqjtFmHUAv2n5mw4llivrtfFN9VeK38xhVgQFpAtt1td51h1dzi7P5VYH1TNN/3QWYvkDVvJEyxrXdRlgcRJIpz5enp+Up9tgzNDkUnfzDwvIdnzwisJZn4nQ6iVYjrHuAgt1hoGnRTOJevZuOzKXqiT9BNwNgsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=XDLIbVig; arc=none smtp.client-ip=209.85.167.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="XDLIbVig" Received: by mail-oi1-f173.google.com with SMTP id 5614622812f47-3c8641b41e7so754571b6e.3 for ; Mon, 29 Apr 2024 06:30:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397408; x=1715002208; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rJjfXXCDeBwxlqZFPLDX4+ku/LlOc7au7TobqVnD3kM=; b=XDLIbVigC1U7oq19MZ5MXAMCYe2hCzPFQP6y05x8ZGAcf4g+aM3oW0O3iXM7dH9wN4 jYmSHoLPZL7MSUAhJ7hRDFzKLD+x6p/AmB5oY5v93ScYZF3Gfj2S4F3qMzqE7JzVjocj zV7CMTjrx/+LVUg4HJZcW8LTcSlGMo2VG4d7T88rIodBOaco8o6rLxnB6CF4c5DoSi+c QB2maazJgu0B8P3Y5iBkFKF3cm0DMDrDxpOD8PnNGYi6bra/lloy1s1MJGeLQ8aCQtDy SiMrE+FkXWEgFJ9Zlw3u9fU0N5ERfELrtV4ysc5Q8uq4i7UdSYQt2PfGsaOJV1Eqx4EO BEZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397408; x=1715002208; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rJjfXXCDeBwxlqZFPLDX4+ku/LlOc7au7TobqVnD3kM=; b=tk3fBbmZ2AQStXqUYosyjnFCVVAGbG2X7TeJSyI08itaJMKmoYEvfuzrKD8WI48NLZ TdcMktius8nyVKO2U3JQk0Q+7lJLo0WzAmRJn6NLtLydfkBC5C3sXoXOQatU0iTMN9F4 mepsP7yebqfPio/7imRsY7u8Md00qxLfp5PLU4QyLfdAkVXmw36i30TH5wz8PegW2ELx Zsv0dkbkPUUsBiwGsCwxnMFaFQgkSPwRWLU0S948HwAwNXFrC0t5gx1pcWY/RrjqSG/U y1NwY8MaGuvZtjACw4bj9cY8rNcePMmWaiejcfxkZbfDodZEeh1RfvNEThwffb8Trlkf Jpig== X-Gm-Message-State: AOJu0Ywmzdet1j5YOFoxrh23SzU78N95urtQ4gAaDoO0iPJCZlXDUdua hI5VuB6uYGmhOa3icnwdyDKi3crxBeg9f1UAIK1MxOtcSHz1ek/oBLZwJ12ofbqUZNAtwjLowKi O X-Google-Smtp-Source: AGHT+IF7UffUAh6Z+hQw/XXsqHp9hmKjsJ6LoQtGCAm5hZlgIlacgDTxAYFfmAqlao5EhPUGGBzU8w== X-Received: by 2002:a05:6808:2784:b0:3c7:4508:6dfd with SMTP id es4-20020a056808278400b003c745086dfdmr10399897oib.44.1714397407923; Mon, 29 Apr 2024 06:30:07 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id jy8-20020a0562142b4800b006a079a9adc4sm2030571qvb.40.2024.04.29.06.30.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:07 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 10/15] btrfs: handle errors from ref mods during UPDATE_BACKREF Date: Mon, 29 Apr 2024 09:29:45 -0400 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We have blanket BUG_ON(ret) after every one of these reference mod attempts, which is just incorrect. If we encounter any errors during walk_down_tree() we will abort, so abort on any one of these failures. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index df3b6acc63cf..0dc333331219 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5418,11 +5418,20 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, if (!(wc->flags[level] & flag)) { BUG_ON(!path->locks[level]); ret = btrfs_inc_ref(trans, root, eb, 1); - BUG_ON(ret); /* -ENOMEM */ + if (ret) { + btrfs_abort_transaction(trans, ret); + return ret; + } ret = btrfs_dec_ref(trans, root, eb, 0); - BUG_ON(ret); /* -ENOMEM */ + if (ret) { + btrfs_abort_transaction(trans, ret); + return ret; + } ret = btrfs_set_disk_extent_flags(trans, eb, flag); - BUG_ON(ret); /* -ENOMEM */ + if (ret) { + btrfs_abort_transaction(trans, ret); + return ret; + } wc->flags[level] |= flag; } From patchwork Mon Apr 29 13:29:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646972 Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com [209.85.222.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 833E975809 for ; Mon, 29 Apr 2024 13:30:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397411; cv=none; b=FIfoI0JDwE3iw7nbHZ0dDFwkhU2BbCl0Yl1jh13/j3zfNOeEYUihUOasktYKvOf0RdeQBT9O+cxUFbqgYkyyrNQ+gk4Ec/tuFQ5566ZNpZzX6IzXLqnJmfHB96lDwMGtBCb1qPXsb8gPm2mV5eAexmDaDlQzvSknEaMlYMFtiBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397411; c=relaxed/simple; bh=N6k4QAy6YmgIzuBv3UbjkAqckRemx80XpARWAF3yddU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HgDz6OVSBbyKuAvrgZBZnSo0bybx1mlJkIkjNqmItrX31S2W18GYBs+LZ9VTu42Y1IxnvYLG+IOGwI44vX+sLqjoxtdsjeAdMyhdsL9tG7ifKFkhq35cTVhfpFXncbIR1D+nKqFwnyE6VaXXYZtM3O1YH2BZBalQR1Ay2ilMi+k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=ATFcTBQV; arc=none smtp.client-ip=209.85.222.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="ATFcTBQV" Received: by mail-qk1-f179.google.com with SMTP id af79cd13be357-78ebc7e1586so567917185a.1 for ; Mon, 29 Apr 2024 06:30:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397409; x=1715002209; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4o4E/zlvhEvAwve3wuYe7HKWbPGiYm3aR3FSwzZ5Rb0=; b=ATFcTBQV6A+m6R3mUSW+Wc7A7SV1wVImdQy4+3mv1sHr7IQkg/EOrtQPVVDA1JKraa s0TF8pw8RtP45BIWItP4d9pT7KdacK4TelHHYMm9B2a0Or7flcWIaG+J781cbOD4I0g9 pzUbOUSxgP/Q3gQopqqEWV0KA8+gH804L4MX+xtCy2bxgvP2pFZGSFJ1aQ5VbyQIUgqh +ndJ4h9FE79kbWNEiyULB0vcNpP3ZDuupQBxvv/nHpU9ouHC6oImwWJ3peWWIZ1dKXHV kKw/rlK7lZnpJqc2uUM8Qu3EYlBYp1Oz0XsK9p3gJ4qFS/usQw9ZtE024nIsI8yDtuI+ e2iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397409; x=1715002209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4o4E/zlvhEvAwve3wuYe7HKWbPGiYm3aR3FSwzZ5Rb0=; b=ox6E66B5RyHrOusdO/maZigPxFb9gyutDrazzrp94BIq2xpWU+9vJSF4wxphBs5t/v KUPfDnI1mFRSfuzQSqu9MjoKoFpDWuh7nRe7MAqYGiCZsKQn74PXb8coZj1JSKWwOkOY RiGbCZWk389dFME1mihKqBkq0HWAa4/uvym6boi23d8Lm0SF1nOZd3rMlUFt1fEPAcKy I7YR1a14NCOMWec62ibKAEJB+Pj38HgsKaj/UWBo6JmwaHtDGqY2GCWNyhXxCkFPEAij n38iu4nb1qqh4zGeW0Jld01edxfQOt8ZlDhW7m13KWLjA+hxfMZ0zw8bv9xzi6VlO/b8 ZWCA== X-Gm-Message-State: AOJu0Yxb30496tpCPmiNJGsKabYWwP2SqgaappPEFKyVsZhtLK7cXNHR HQ4dtVGkyLQ+2rKPTloAGYy2TTITx6GAoIv/Y2mGw+jSOQTM+3b6Tk/7lHy0CGgCrvjZN/2qTBP L X-Google-Smtp-Source: AGHT+IFPByAiDudjt6/LJ7KAmcJ0eLctoR455NvIoTO+JmQF0IPNhWinQ5Et2iONokCdcauStfKv+w== X-Received: by 2002:a0c:cd8e:0:b0:69d:b424:92e6 with SMTP id v14-20020a0ccd8e000000b0069db42492e6mr12551611qvm.14.1714397409256; Mon, 29 Apr 2024 06:30:09 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id g2-20020a0cf082000000b0069c5d4b95d8sm10349406qvk.73.2024.04.29.06.30.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:09 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 11/15] btrfs: replace BUG_ON with ASSERT in walk_down_proc Date: Mon, 29 Apr 2024 09:29:46 -0400 Message-ID: <507988a161d16ddceaaaf8d22a1556c181eb302c.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We have a couple of areas where we check to make sure the tree block is locked before looking up or messing with references. This is old code so it has this as BUG_ON(). Convert this to ASSERT() for developers. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 0dc333331219..c75a5b3ddb8f 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5392,7 +5392,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, if (wc->lookup_info && ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { - BUG_ON(!path->locks[level]); + ASSERT(path->locks[level]); ret = btrfs_lookup_extent_info(trans, fs_info, eb->start, level, 1, &wc->refs[level], @@ -5416,7 +5416,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, /* wc->stage == UPDATE_BACKREF */ if (!(wc->flags[level] & flag)) { - BUG_ON(!path->locks[level]); + ASSERT(path->locks[level]); ret = btrfs_inc_ref(trans, root, eb, 1); if (ret) { btrfs_abort_transaction(trans, ret); From patchwork Mon Apr 29 13:29:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646973 Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 615B5757F7 for ; Mon, 29 Apr 2024 13:30:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397413; cv=none; b=Q0s1ptXSjg//+6DBPQAdJFUFX0OBrwawJMoE3v9jPi9qakW6S/ftHgHG8aCAmTLdyQypaqUf0xGFBzQecn0nAT2j5eGY0dyfGONNrTmKyf3VLTnIc8loimd1WD/sfdAoUXzq4PCUWZgF6mOcUxnY/XhtQy40qtT+6jdM4gXTVhs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397413; c=relaxed/simple; bh=EaB+RUTdgSiqs5x+5ne+kMGtxbi7ZStAqoIE9SmIM4g=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tVNoEzoZvd/MVd0/PqMocTE0l7x1n9yFKy57AuHiumFnPM5DgZaNgbazCoC0zyEWKyYF3gRDdkpr+gpQJPhRZKeoB5tV6aE01X9hdcVDwfxjofi6befZ9i9F6okoLFWMEHvQ0IFMzXnjttdcSgYVb82iV9o5+9mHUX+DFI+Xtys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=LrHoUBCz; arc=none smtp.client-ip=209.85.160.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="LrHoUBCz" Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-434b7ab085fso43154531cf.1 for ; Mon, 29 Apr 2024 06:30:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397411; x=1715002211; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=WFLER60IxPaUEqjPDPDJO+7MMXBMEQv9Z+urIwL64kA=; b=LrHoUBCzWSZg3cQTEPBgZEVFpZxcCJuxSDSoufX2i9Zzv1VCjwaPzylFCXn0PXzpgv 4EzTc3WL6J5EtnBX3NQ6IpyDBuFeN/yyi/fYX7JCYJx54jlb8Sw7H3SGvlmzFpgzWcrm lJv/7C9i1lGeQTCgkwCqneYRnV9kYmasCouapH91hDMoayCUL88Vr7ia508TchYrz8QL 4pZiwP1Ib/EIasKDnyjjilvdOIEG2fwtYt2l/+ck9vCIFIWmI7Q+OiCSAe97xnkXhOzC wU/aOghyvR/6iTiQQgFxwkCH0yBx7Pa6sQ7z4KcikNhyUntBJDZ/hLddQEtpXGLvR+uw J9hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397411; x=1715002211; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WFLER60IxPaUEqjPDPDJO+7MMXBMEQv9Z+urIwL64kA=; b=aAxNebL+1SGbK5h0GPHavW7UNIvTAhhp8YyrW4ahPYH++1GTggXxAnAvVBV6aEByq1 Z1sJuCtpAWoQoIP1VN79XreIpxi52vnK4zIlk6xlZcIaPDl/+7VgyI/LhdmzeC1w/wqc AOOe6kBXOoC1Mo9k2hKE7MMpXpkqIeyycBDd1XMzjyJpRn2//Wd5QXCLqRkazbNjjXPH OQspX3zoi9+lsXD0SkGxceu2Aur+BDUts96t0HpfNa0E4JzDOOMko29FqBVmOMQlrZHS shw3ccMnXyVQ8YllCMytBPadZEmm5lILCr2Bl9505btDylo7BTm0UAjFih3tC/ypx0V0 uoXw== X-Gm-Message-State: AOJu0YxFzT9jkyKs8WAjlnls0FsVqyVsnIjE6MA+Q/svnbCLgcA8cN80 ZUfCXLgkuKMj7CU5F7RBDsM/dKrE/HDy9gof1DRRgMSdsObW/N/70ZXVwEo+myHcwgp95LXNLun Y X-Google-Smtp-Source: AGHT+IFb9blO9hCgOKqMt3FY5512LLSQ5nTYoI9N4n1njO29r10jaCKztdAxFx9WlPKC6VF6JtR1ag== X-Received: by 2002:a05:622a:5b06:b0:43b:16d1:a6ee with SMTP id ea6-20020a05622a5b0600b0043b16d1a6eemr583799qtb.17.1714397411195; Mon, 29 Apr 2024 06:30:11 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id l23-20020ac848d7000000b004372459413fsm10322184qtr.93.2024.04.29.06.30.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:10 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 12/15] btrfs: clean up our handling of refs == 0 in snapshot delete Date: Mon, 29 Apr 2024 09:29:47 -0400 Message-ID: <3a191c918331eab2e7c47a3453f1ec0b8f5b5afe.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In reada we BUG_ON(refs == 0), which could be unkind since we aren't holding a lock on the extent leaf and thus could get a transient incorrect answer. In walk_down_proc we also BUG_ON(refs == 0), which could happen if we have extent tree corruption. Change that to return -EUCLEAN. In do_walk_down() we catch this case and handle it correctly, however we return -EIO, which -EUCLEAN is a more appropriate error code. Finally in walk_up_proc we have the same BUG_ON(refs == 0), so convert that to proper error handling. Also adjust the error message so we can actually do something with the information. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index c75a5b3ddb8f..cbb99454a194 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5351,7 +5351,15 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans, /* We don't care about errors in readahead. */ if (ret < 0) continue; - BUG_ON(refs == 0); + + /* + * This could be racey, it's conceivable that we raced and end + * up with a bogus refs count, if that's the case just skip, if + * we are actually corrupt we will notice when we look up + * everything again with our locks. + */ + if (refs == 0) + continue; /* If we don't need to visit this node don't reada. */ if (!visit_node_for_delete(root, wc, eb, refs, flags, slot)) @@ -5400,7 +5408,12 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, NULL); if (ret) return ret; - BUG_ON(wc->refs[level] == 0); + if (unlikely(wc->refs[level] == 0)) { + btrfs_err(fs_info, + "bytenr %llu has 0 references, expect > 0", + eb->start); + return -EUCLEAN; + } } if (wc->stage == DROP_REFERENCE) { @@ -5663,8 +5676,9 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, goto out_unlock; if (unlikely(wc->refs[level - 1] == 0)) { - btrfs_err(fs_info, "Missing references."); - ret = -EIO; + btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0", + bytenr); + ret = -EUCLEAN; goto out_unlock; } wc->lookup_info = 0; @@ -5775,7 +5789,12 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, path->locks[level] = 0; return ret; } - BUG_ON(wc->refs[level] == 0); + if (unlikely(wc->refs[level] == 0)) { + btrfs_err(fs_info, + "bytenr %llu has 0 references, expect > 0", + eb->start); + return -EUCLEAN; + } if (wc->refs[level] == 1) { btrfs_tree_unlock_rw(eb, path->locks[level]); path->locks[level] = 0; From patchwork Mon Apr 29 13:29:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646974 Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A14A57605D for ; Mon, 29 Apr 2024 13:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397414; cv=none; b=XEuP6BW7/HQ11BAw8z0LfFvuPLM/Atn67f92t+MF0a7D1T9k3zSysPI5cQnOxbFY/wwCr2K0fRZbiqGtbjOGhCHqgjPQWT3hVdwBnq2c/mK2+IDivBvniaFFPCFVlrvPjgvFpSMuuvyW5//ZCi1ogzclnOo0TdxE1LCOSznv+0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397414; c=relaxed/simple; bh=4qSJgeEzuW/yv80TO0ZNrEeDZ3LMWaXhoCYkMW7q8ZY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u/bcK4AHbIycmaICQdnTm3nmOGBjEYOYXBMwl0umAyGqz5gqf3vgrqSbZFBNLCNvwXdIcwDOG2B0VzyN+udCSGk//ZlczzZtE3dEauEY+26rrnYs2AgZPkGlXpAVibct33KaoMNe1H2o7xJppy7c2ArlWVjvyL/yJTA/a+iQfvE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=wpvsh263; arc=none smtp.client-ip=209.85.167.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="wpvsh263" Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3c8317d1f25so2628834b6e.3 for ; Mon, 29 Apr 2024 06:30:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397412; x=1715002212; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=SH/G2m48Wjdwx4WE5OIAtm4zjgDlpxd9y1O01maoRvM=; b=wpvsh263RKlJ3TZl/d+d97B3lK+TQwjMYIuLuAdsURB6E+tumW+qM+GwwW4w0nG7M2 R/LFpzObZhyv8Xu6Z3SXiTt4eoyZcyiflUJk2Rhp1LeZvhlm79fombwhrIW7+oZkjCaO rp/pqQZ2gpsbBqSuJsf7jMg8MruIcBJnkPcualAgOP2y/XXdZ6gwHLfXjl1kPodplMJ7 TIl2NF0aWbjdndzjGIV6ZN+aXwLZBHgg4cuOvCZs5BkQ/Qrz4Xws8hGTxPnBQ5nA3FCh d+965K9r3jYkqQ9bAKn0UEVfqf6OznN1F++uS0X4qDvvFZAMeGYHGU0i9bNpd4eLlph2 XV2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397412; x=1715002212; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SH/G2m48Wjdwx4WE5OIAtm4zjgDlpxd9y1O01maoRvM=; b=ZjOay467TzosJcwRGFMDDe37ZAeYlskVwp7n+HCg3NPveuDdUr7Sf1D34Iwi3LCgp/ Th3Br8tj6RyKbHpIX5dHT/TYPhaPFHYxkzlqyggv6ec7eQRN0praSMng6LZRM1UIMBxt uRkJwXrBb5ZSEfpdHZlt8Vj/efwijoAruqA40ke76p9IhsaC/CGkKOxvVqzAV8h/BeAN SIS+G8xdk8bKepCrPL0kzSZCHDyTm/cd2NdsR2le58bnvqB965SfxFnf4NWJ38hHBCca he8FZ3usT8eTqQl54yHHVvlO+pS0rszMNK5Z5hd5kAFePlDdty8dLElt/L+F94KSiNhL k/mw== X-Gm-Message-State: AOJu0YyJaNzl7LOTJY2/3ZS1UhsPWNmT63eMMKwlhfN3qe1cowAGRQ8j v52MhgzoiluJdVx7sC4kL0pfa9mzMY4OCv/LDV2uzd/ev1IDHN1V+gjikXnLvL4jx+W4BOOYS1k h X-Google-Smtp-Source: AGHT+IH0B1XT7p99wB2xuAvveNth3BPt4q8QlM6FN/u/0uhaH1vI9hl6MgDUbKPFqE1dy3KzWWGfnA== X-Received: by 2002:a54:4606:0:b0:3c8:2fc5:c816 with SMTP id p6-20020a544606000000b003c82fc5c816mr10678799oip.11.1714397412276; Mon, 29 Apr 2024 06:30:12 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id qd13-20020ad4480d000000b0069b75b8633dsm3787470qvb.67.2024.04.29.06.30.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:12 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 13/15] btrfs: convert correctness BUG_ON()'s to ASSERT()'s in walk_up_proc Date: Mon, 29 Apr 2024 09:29:48 -0400 Message-ID: <0ebad91b9919154d680a0845c597f02f2ed9ee05.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In walk_up_proc we have several sanity checks that should only trip if the programmer made a mistake. Convert these to ASSERT()'s instead of BUG_ON()'s. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index cbb99454a194..44d879b673f9 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5757,7 +5757,7 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, u64 parent = 0; if (wc->stage == UPDATE_BACKREF) { - BUG_ON(wc->shared_level < level); + ASSERT(wc->shared_level >= level); if (level < wc->shared_level) goto out; @@ -5775,7 +5775,7 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, * count is one. */ if (!path->locks[level]) { - BUG_ON(level == 0); + ASSERT(level > 0); btrfs_tree_lock(eb); path->locks[level] = BTRFS_WRITE_LOCK; @@ -5804,7 +5804,7 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, } /* wc->stage == DROP_REFERENCE */ - BUG_ON(wc->refs[level] > 1 && !path->locks[level]); + ASSERT(path->locks[level] || wc->refs[level] == 1); if (wc->refs[level] == 1) { if (level == 0) { From patchwork Mon Apr 29 13:29:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646975 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98A5E76402 for ; Mon, 29 Apr 2024 13:30:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397415; cv=none; b=H5iwgDguN12vWTn8NiTTW70AxRQHGQezNT4dP8MqpnJp7lj/VDIlJYK9rbW6Ku5w0Zq1VqcdfNvCcGfDtd3TyL5y2C+LFYhgxANnDHyldhOl4U7cmt1fzlrv7KCdHVhYFfjph9O+PjHnGOCPJJf5i7QnIe1+4RcrL9l3wj519ZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397415; c=relaxed/simple; bh=+F7jkBQmkmoIeckuwT6GTxxrfy05mKxtygXblBRMeD4=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Dtvrpa5pzGwpl1sv3T3/PrxiNIahU3sKHFaq2Hku8GRIo+oOq0NGeM843LXpYV9tBV3WyQEdV4pG7V/IH3qRSDfFGhTMQS3QySnqPUJbDASTcrqvGdtUlb7i1I5NnLgpzYXu7L8dGUvu6coAab2VmnE69bpi/UHAcXQn+m6lzkg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=Dfoip9kz; arc=none smtp.client-ip=209.85.160.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="Dfoip9kz" Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-43716ff5494so49297931cf.0 for ; Mon, 29 Apr 2024 06:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397413; x=1715002213; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ZLxhZSPgQ2ipmv45seTklPvQ3XnyCFN2Rew7PILRrPk=; b=Dfoip9kz3pHfccG+9WTjuaqj9sQ5agO6N2B//aBAwDDXjU6QBHMOfZGtFBVMGSDBUi jDwMxZkR54yHBCT4nfIILC2y/MXU/v3kEY4P8oOGZrUDEngLrWBLSiTmJiz4YrFqrOqb ihAgVDlE/ZpjQ8yUs9mEUncuYoXQ9j8lkgI5Zc/SdL8g59q8kspZ5efsXSTZyBrZaUBB bLQzS/LugEPDQrs/rpsTCqtODiRmFM9TuBazabFU6XHz2g7h7S1KK2ZsT2jRLc7+hJu3 /siubosWFIpvt3HUPSZPN7dG/sssrmgaU/WOxK3O0Stys80hjXkvNw/kcxIT9gqW1Flj pmeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397413; x=1715002213; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZLxhZSPgQ2ipmv45seTklPvQ3XnyCFN2Rew7PILRrPk=; b=vHEzYH6inEL5uAsslPDJgJHwPLiNIES0zKqLiTY9BlZS5/7s7yfmYqIyPqnWY8XkR7 lzpzonUsQnL5DbRIWAdDrQftvrz3K0XDbbd7yPbN8nvzQ+LZ5fInnKpAn0Rix/7xPpVu boL4Md6H1ZOpLUDkp9sw3lZIkRigqGFC4kVV8GNdMch3U+fWLWxRDjKJqLcd4MQh4WRa T7PqErROZmsPGcRPfYJOQLhXuqwx5AhrFhk2T6kTyGGGw+XhiiEAtVF6Jo11RBiV76+H y0SqtmIqxryq2REoVwSVx0QRSeN4QeBLWuG4/Jpe0OASCY8LKPo2+Vtu9zY+uhb7h71d zwLg== X-Gm-Message-State: AOJu0YxutVC5pE+UMr7d0ehoa7B0jTGCRELgkHa7LZpLQwc0cvcjGYAM E4BTtSzaY8GD+jII9wem+3IZXSbfpvL8Fa2/o4Atcq1dhIoBFFh88GrJLmV1PgMRsZTWVuaPWXf h X-Google-Smtp-Source: AGHT+IEdwMlg9hvB+FkgsFYyWO/gBgZRO9/l4ErYvdkS6DUQFZvyldOHyFYOF4kDFpVi8fMuyGsSZg== X-Received: by 2002:a0c:ec87:0:b0:6a0:a9dc:b11a with SMTP id u7-20020a0cec87000000b006a0a9dcb11amr14541922qvo.3.1714397413304; Mon, 29 Apr 2024 06:30:13 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id pp6-20020a056214138600b006a0d7154d13sm256381qvb.78.2024.04.29.06.30.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:13 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 14/15] btrfs: handle errors from btrfs_dec_ref properly Date: Mon, 29 Apr 2024 09:29:49 -0400 Message-ID: <0aaac24b838a9bfe51987b1a30d02cc3f567c879.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In walk_up_proc() we BUG_ON(ret) from btrfs_dec_ref(). This is incorrect, we have proper error handling here, return the error. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 44d879b673f9..9228cdfc1cba 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5812,7 +5812,10 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, ret = btrfs_dec_ref(trans, root, eb, 1); else ret = btrfs_dec_ref(trans, root, eb, 0); - BUG_ON(ret); /* -ENOMEM */ + if (ret) { + btrfs_abort_transaction(trans, ret); + return ret; + } if (is_fstree(btrfs_root_id(root))) { ret = btrfs_qgroup_trace_leaf_items(trans, eb); if (ret) { From patchwork Mon Apr 29 13:29:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13646976 Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD0ED77F32 for ; Mon, 29 Apr 2024 13:30:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397417; cv=none; b=RiRZuPA9zvaE39QqOoybdJXwz6mtOy98Srvk3pm1GHCbqun3+YFDWPwsdxzEVM3dRWD+4iLh+76JvahLFdRumBfVXjCJaMwBQsDybK8WbrEy/n/08kW4w8V61BLKPKiwTNz9fNdON0X/Cnz9cvWMqZ9TH46CbB5W5JmcY+3FPwg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714397417; c=relaxed/simple; bh=qyM8xE7c/E514bzc8/od50cOasXQ2ay6Di/2rAb9tx0=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SQodL+NDDjpsu7YQzieXIYPZxl+8ZZlPwnoRGT6G+6NyqGNxmocoTdeifRyG8eXIhyQg/cDDJHpim+Di2Bu2hsZwe7hjcvLT9so1z7Q65IndG8Vxa9CVPmtwLkghVf+uGowFosbMLlw1vklBdh/9hIEQcr2moJIiIvrdoclExII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com; spf=none smtp.mailfrom=toxicpanda.com; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b=WQELTgJC; arc=none smtp.client-ip=209.85.160.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=toxicpanda.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=toxicpanda-com.20230601.gappssmtp.com header.i=@toxicpanda-com.20230601.gappssmtp.com header.b="WQELTgJC" Received: by mail-qt1-f182.google.com with SMTP id d75a77b69052e-43ae9962c17so2569601cf.3 for ; Mon, 29 Apr 2024 06:30:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1714397414; x=1715002214; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=weF39kzj282bIU9FlIoq2hp9HHOmUmWiD3HL/WDHSgY=; b=WQELTgJCIqCi742KI09fMFqcTRIfAi0MsLgy7/5yC/Q6mhrwFk0YqhBkg/6y3hHvgH kbnGb/W4l14ZdRqI8inXwIlliI6cARdr6LX6PqDhvc4bbPH5O/56bL+44v2XoEtuTS7A 5fRTuI7i9ZqNDatFxIxm4I73uF6A/4alPTj7MH4u7MjXXcygSlUxTR5VS1+DqAajpP7f Y71lZmr9C6+NdI93C1UFlm3OW+uiL876Dn6NLX660YD2pLqjXy6nzdlsx0gM8XYvZkAJ 3uQJjrAczaZj03q71DSfmeD4OXTT0UBhQrfMkJVOzHbe1SP3l1Hl2biDq0HHBxwMM9wc 7CqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714397414; x=1715002214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=weF39kzj282bIU9FlIoq2hp9HHOmUmWiD3HL/WDHSgY=; b=sMSCFr2Mr33o2qRHqbN4m6eTZ2HcdnFAuPNCP2mucyatQs9DailS+fGEEjCe+WefiM peHSqqhUswCRW7FXtOs4UFPxYE5f/+/VYtV4nTEMdJvzKdf9nsOkelK9EDg9ZNHBpZfk rPiU5vGwuL0r70hQeDe6bSWlGX5DLM3RDAyiY6Uf9zaYEWcsuviF+QxyJmvWX8PYgfrj vgp0j/5Ig7bMjuDAVgq9UZX34cm5BNHJ+0AVibxL8CWdKbHAxqHms6tn+xDLN7wliy+l Q2syOaxVpPu9nsJM67Suw5bmI0+nlzX49pkiitghL4GMB0dmyQEf6HXLukkZwCdG4qDt dLMg== X-Gm-Message-State: AOJu0Yz3IjFGc/G92NFiljfAZFpFF80SUZKvoh8fuWydgihFJNWsM4Jn Iay13qCem2ZQJODhMNbNGrgki8q83owyyoxxdo5yTqKrOyHuIwDJgkurrBtu+JqH9B+6/dvsyNe V X-Google-Smtp-Source: AGHT+IEJhggAuLBqYmxn9D09AdBb8Xwr8EP1eBjoc9nphK3ZL1Ck+0fhV2z/vHFYAm5pv2A7orISFQ== X-Received: by 2002:a05:622a:1909:b0:43a:f9c7:617d with SMTP id w9-20020a05622a190900b0043af9c7617dmr2078748qtc.38.1714397414367; Mon, 29 Apr 2024 06:30:14 -0700 (PDT) Received: from localhost ([76.182.20.124]) by smtp.gmail.com with ESMTPSA id h5-20020ac85485000000b00439cccb91b2sm6544368qtq.73.2024.04.29.06.30.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 06:30:14 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v2 15/15] btrfs: add documentation around snapshot delete Date: Mon, 29 Apr 2024 09:29:50 -0400 Message-ID: <97706f9ea53a824b446e3149588895bd8430eec0.1714397223.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Snapshot delete has some complicated looking code that is weirdly subtle at times. I've cleaned it up the best I can without re-writing it, but there are still a lot of details that are non-obvious. Add a bunch of comments to the main parts of the code to help future developers better understand the mechanics of snapshot deletion. Signed-off-by: Josef Bacik --- fs/btrfs/extent-tree.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 9228cdfc1cba..be60bc2e10ae 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5223,7 +5223,20 @@ struct walk_control { int lookup_info; }; +/* + * This is our normal stage. We are traversing blocks the current snapshot owns + * and we are dropping any of our references to any children we are able to, and + * then freeing the block once we've processed all of the children. + */ #define DROP_REFERENCE 1 + +/* + * We enter this stage when we have to walk into a child block (meaning we can't + * simply drop our reference to it from our current parent node) and there are + * more than one reference on it. If we are the owner of any of the children + * blocks from the current parent node then we have to do the FULL_BACKREF dance + * on them in order to drop our normal ref and add the shared ref. + */ #define UPDATE_BACKREF 2 /* @@ -5859,6 +5872,27 @@ static noinline int walk_up_proc(struct btrfs_trans_handle *trans, return -EUCLEAN; } +/* + * walk_down_tree consists of two steps. + * + * walk_down_proc(). Look up the reference count and reference of our current + * wc->level. At this point path->nodes[wc->level] should be populated and + * uptodate, and in most cases should already be locked. If we are in + * DROP_REFERENCE and our refcount is > 1 then we've entered a shared node and + * we can walk back up the tree. If we are UPDATE_BACKREF we have to set + * FULL_BACKREF on this node if it's not already set, and then do the + * FULL_BACKREF conversion dance, which is to drop the root reference and add + * the shared reference to all of this nodes children. + * + * do_walk_down(). This is where we actually start iterating on the children of + * our current path->nodes[wc->level]. For DROP_REFERENCE that means dropping + * our reference to the children that return false from visit_node_for_delete(), + * which has various conditions where we know we can just drop our reference + * without visiting the node. For UPDATE_BACKREF we will skip any children that + * visit_node_for_delete() returns false for, only walking down when necessary. + * The bulk of the work for UPDATE_BACKREF occurs in the walk_up_tree() part of + * snapshot deletion. + */ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, @@ -5891,6 +5925,24 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, return (ret == 1) ? 0 : ret; } +/* + * walk_up_tree is responsible for making sure we visit every slot on our + * current node, and if we're at the end of that node then we call + * walk_up_proc() on our current node which will do one of a few things based on + * our stage. + * + * UPDATE_BACKREF. If we wc->level is currently less than our wc->shared_level + * then we need to walk back up the tree, and then going back down into the + * other slots via walk_down_tree to update any other children from our original + * wc->shared_level. Once we're at or above our wc->shared_level we can switch + * back to DROP_REFERENCE, lookup the current nodes refs and flags, and carry + * on. + * + * DROP_REFERENCE. If our refs == 1 then we're going to free this tree block. + * If we're level 0 then we need to btrfs_dec_ref() on all of the data extents + * in our current leaf. After that we call btrfs_free_tree_block() on the + * current node and walk up to the next node to walk down the next slot. + */ static noinline int walk_up_tree(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path,