From patchwork Tue Mar 26 21:39:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605147 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2849E13D889 for ; Tue, 26 Mar 2024 21:37:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489068; cv=none; b=pMOrDrRQmHtzMaLKrL4vT/wxTX5W6Esdn7Twf40Dh7ZNzN6OreL+KtPQNxavSg0Ddsz/6kK86NkRMt/zLDRFvDla4aBLV/+s7skVSd0zGj5Y3vKWs4cxcAN2mzhkTR4WMhg4YnbLOt6juPS7IK7gld2t9rBa13diRPsCBBRvtek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489068; c=relaxed/simple; bh=b1Ze2DeTs0SqzsGvI4K8qGWRccU3rtNluXRSSyqpStk=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZDPq4jZv6CZWrf1WmDzXTCeK4pm3+giOnj7s7A/SYI6/tgELlnz2vGC/vwca4SG4BnDGk+5XtpJhEGXEb6Koi+QBkILKEjLWfBpWJWiUQ5F97Apt2B/Va40pqS8J17G6PvUB5/e3GVgm2/RKsBuLyee7a4pVgln0LuBjC4vk1UY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=etgrXnLN; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=d8hVW+90; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="etgrXnLN"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="d8hVW+90" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id E8E0A320077A; Tue, 26 Mar 2024 17:37:44 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 26 Mar 2024 17:37:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489064; x= 1711575464; bh=dU8W6GrsJnn+z9NofVNq7jn8AZbc9OpPoqjgzPvwYcM=; b=e tgrXnLNM1yg95h3YwsmjwHDyiUUpoonpd+qmpZtNUxjYvEMWSU4mqO/5pq/kLC9T o7nP62kfF4iBEss8hlwkWg+XD+Cpq3DETIFtP8aZq3t5I8e6wVcZMq+rQ4HKFjqk 5Q/nKhrT/M/Ufm1JgB0/A59/C7332LgGsuZUQiMVqmS/UH9ELwtBSB1mp8d6Rxbh bH4Zslxszp85m8pKZ1QecodpU3MkIO0cWtCj4EBLgm6TXqTZXuMduQj1FXhF+1Ui BPKKRiV5Zv4zT0pjR4FZ16RClxk6VB1ow7e3OQyCWEvzQlVETuG+foiBsZm/uh1m LtDWMll4RZ5CRFOwS0zCg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489064; x=1711575464; bh=dU8W6GrsJnn+z 9NofVNq7jn8AZbc9OpPoqjgzPvwYcM=; b=d8hVW+90vPwMYqGYmPR2Cd7Negl45 uEpza/HVmfWSWbDkugtbWJz4lM0IgPFy9q8hSCV2vi1Dm2BxLwD4dihuyGaOnXbe Lm8Vv+g0fI2rxq+JL4z1pz9DFwANNQqIC9yrGEF95r3O86CBgCA/EwNS1KSNUvut z0phFmlcmIs7ggJIvGUXcb3Vp0WCb9gSdZ2Vg8QXcdug39Klf0dlxpUbKsrGKffT Nxsyiut9p0W39XvBZ2lPRsKoxcvyJogpkNW6RHgddVi7j+Ig0WIB6x8lhlMJn8UZ OY3Trs6jcyZJllhTI35WJ/wZMPY6NQ74C11mtkd8xGJ90VTulOpS+xe4g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:43 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 1/7] btrfs: correctly model root qgroup rsv in convert Date: Tue, 26 Mar 2024 14:39:35 -0700 Message-ID: <71f49d2923b8bff3a06006abfcb298b10e7a0683.1711488980.git.boris@bur.io> X-Mailer: git-send-email 2.44.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 use add_root_meta_rsv and sub_root_meta_rsv to track prealloc and pertrans reservations for subvols when quotas are enabled. The convert function does not properly increment pertrans after decrementing prealloc, so the count is not accurate. Note: we check that the fs is not read-only to mirror the logic in qgroup_convert_meta, which checks that before adding to the pertrans rsv. Fixes: 8287475a2055 ("btrfs: qgroup: Use root::qgroup_meta_rsv_* to record qgroup meta reserved space") Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/qgroup.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index a8197e25192c..2cba6451d164 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -4492,6 +4492,8 @@ void btrfs_qgroup_convert_reserved_meta(struct btrfs_root *root, int num_bytes) BTRFS_QGROUP_RSV_META_PREALLOC); trace_qgroup_meta_convert(root, num_bytes); qgroup_convert_meta(fs_info, root->root_key.objectid, num_bytes); + if (!sb_rdonly(fs_info->sb)) + add_root_meta_rsv(root, num_bytes, BTRFS_QGROUP_RSV_META_PERTRANS); } /* From patchwork Tue Mar 26 21:39:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605148 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD76313D898 for ; Tue, 26 Mar 2024 21:37:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489070; cv=none; b=p1obbVXhOUsNKkARldj+B41fUPcUTIlmZUlK1UEPjvWvd304MLHElPWBqJeAIJKLkXJwWvlqTum9lbon+qXfNvh3hGn39v+6MWxT9Y7BMH1y5JD6Az6ANsG9iv91Hl0BMwnA1tD7LfpVq0r3PVerxZS61RUXMxO6vF+OyNdOzYs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489070; c=relaxed/simple; bh=Xh5ZZhgH4SWzJjQicbvfxNBuzp+JbWLWzOd/jrmG04o=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hRhNB5ciXc9kGLXo/McetnhJ9iHc6aQZOITLPiEkbuloX7jU51zdV+yKw2YD4XaCei1cfIfgH4Yq5pYvlAZRqakFtIw7uT10IcWZ7QLw7ozdVzvnv1kkXYxR13wQcgvv1NZGWPbBhrOC4VB/cPB30Hi/KV4m56PqNsA3Pw9bzUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=YMsWxaHb; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=TX2CL0ew; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="YMsWxaHb"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="TX2CL0ew" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id A4B123200A02; Tue, 26 Mar 2024 17:37:47 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Tue, 26 Mar 2024 17:37:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489067; x= 1711575467; bh=jd+5cAW6LzqI5yoBgGOnQvFIM2GqhsAC2GG+ZsW2aJk=; b=Y MsWxaHbPabrj0IPLVsG5gyt7VA/VrxRlfNExTXCLW9vOmTNnw6kbyrJd5mL9vmDK MW8dJh4Lt3IgSu994LOp1m1wdR1V+98HEGqCrCNC2B5nJHsMj0zvGO0JAP8hcopX g85Nh5kqBA+GuwCZ91s3ma/mJJ7UH6vWLNqntlBYhIsMHldPVUTbFuYr4E9nqO+L YedihQwVlabMNZf/g3BubwURNLZQn6OK4eE0UMW80aWeiHwonmg4W7EJBiY5Fd1Y FhjmDiEUuFAjrI7et+bCSpOwtMdKiKnq/Kypnp1ReNB55thGlaHBAKh4Scl/FpwJ C/QsDBVtPWOvcqqCqvOlg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489067; x=1711575467; bh=jd+5cAW6LzqI5 yoBgGOnQvFIM2GqhsAC2GG+ZsW2aJk=; b=TX2CL0ewdGBpkfhmlSQMop4fhqrSe FFUEGsDk30/bdAD1egcbDp089eQCCAOVZB4fT+Vw2QsFYIi0oJXS1hc0ZGAa7wgt Dc/qN0BFoLLOaO+GhnBv9I+JNRTi74pjkXfSfBA9VetLddFsE3TJRaMZt/6yAou8 Z7pamEpISQjk1l0DEzh8aBmTgvYuSZ26wAZBMsWNMNDsl/AELMYSqFVG3m2aduDY CYNHv+yaeamQwRv1euKeqxzidTB1sr6TVd0lxXSXuCoHHBVCoXWgEPH7k6V7F+FO vsiWsNBn6LS6JG9wy1g3vZZZAJXz1uRXhWFz1YwNr8zKSMsT/8FddHi1Q== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:46 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 2/7] btrfs: fix qgroup prealloc rsv leak in subvolume operations Date: Tue, 26 Mar 2024 14:39:36 -0700 Message-ID: X-Mailer: git-send-email 2.44.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 Create subvol, create snapshot and delete subvol all use btrfs_subvolume_reserve_metadata to reserve metadata for the changes done to the parent subvolume's fs tree, which cannot be mediated in the normal way via start_transaction. When quota groups (squota or qgroups) are enabled, this reserves qgroup metadata of type PREALLOC. Once the operation is associated to a transaction, we convert PREALLOC to PERTRANS, which gets cleared in bulk at the end of the transaction. However, the error paths of these three operations were not implementing this lifecycle correctly. They unconditionally converted the PREALLOC to PERTRANS in a generic cleanup step regardless of errors or whether the operation was fully associated to a transaction or not. This resulted in error paths occasionally converting this rsv to PERTRANS without calling record_root_in_trans successfully, which meant that unless that root got recorded in the transaction by some other thread, the end of the transaction would not free that root's PERTRANS, leaking it. Ultimately, this resulted in hitting a WARN in CONFIG_BTRFS_DEBUG builds at unmount for the leaked reservation. The fix is to ensure that every qgroup PREALLOC reservation observes the following properties: 1. any failure before record_root_in_trans is called successfully results in freeing the PREALLOC reservation. 2. after record_root_in_trans, we convert to PERTRANS, and now the transaction owns freeing the reservation. This patch enforces those properties on the three operations. Without it, generic/269 with squotas enabled at MKFS time would fail in ~5-10 runs on my system. With this patch, it ran successfully 1000 times in a row. Fixes: e85fde5162bf ("btrfs: qgroup: fix qgroup meta rsv leak for subvolume operations") Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/inode.c | 13 ++++++++++++- fs/btrfs/ioctl.c | 37 ++++++++++++++++++++++++++++--------- fs/btrfs/root-tree.c | 10 ---------- fs/btrfs/root-tree.h | 2 -- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 09f0a20b5ce8..2587a2e25e44 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4503,6 +4503,7 @@ int btrfs_delete_subvolume(struct btrfs_inode *dir, struct dentry *dentry) struct btrfs_trans_handle *trans; struct btrfs_block_rsv block_rsv; u64 root_flags; + u64 qgroup_reserved = 0; int ret; down_write(&fs_info->subvol_sem); @@ -4547,12 +4548,20 @@ int btrfs_delete_subvolume(struct btrfs_inode *dir, struct dentry *dentry) ret = btrfs_subvolume_reserve_metadata(root, &block_rsv, 5, true); if (ret) goto out_undead; + qgroup_reserved = block_rsv.qgroup_rsv_reserved; trans = btrfs_start_transaction(root, 0); if (IS_ERR(trans)) { ret = PTR_ERR(trans); goto out_release; } + ret = btrfs_record_root_in_trans(trans, root); + if (ret) { + btrfs_abort_transaction(trans, ret); + goto out_end_trans; + } + btrfs_qgroup_convert_reserved_meta(root, qgroup_reserved); + qgroup_reserved = 0; trans->block_rsv = &block_rsv; trans->bytes_reserved = block_rsv.size; @@ -4611,7 +4620,9 @@ int btrfs_delete_subvolume(struct btrfs_inode *dir, struct dentry *dentry) ret = btrfs_end_transaction(trans); inode->i_flags |= S_DEAD; out_release: - btrfs_subvolume_release_metadata(root, &block_rsv); + btrfs_block_rsv_release(fs_info, &block_rsv, (u64)-1, NULL); + if (qgroup_reserved) + btrfs_qgroup_free_meta_prealloc(root, qgroup_reserved); out_undead: if (ret) { spin_lock(&dest->root_item_lock); diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index e3a72292eda9..888dc92c6c75 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -613,6 +613,7 @@ static noinline int create_subvol(struct mnt_idmap *idmap, int ret; dev_t anon_dev; u64 objectid; + u64 qgroup_reserved = 0; root_item = kzalloc(sizeof(*root_item), GFP_KERNEL); if (!root_item) @@ -650,13 +651,18 @@ static noinline int create_subvol(struct mnt_idmap *idmap, trans_num_items, false); if (ret) goto out_new_inode_args; + qgroup_reserved = block_rsv.qgroup_rsv_reserved; trans = btrfs_start_transaction(root, 0); if (IS_ERR(trans)) { ret = PTR_ERR(trans); - btrfs_subvolume_release_metadata(root, &block_rsv); - goto out_new_inode_args; + goto out_release_rsv; } + ret = btrfs_record_root_in_trans(trans, BTRFS_I(dir)->root); + if (ret) + goto out; + btrfs_qgroup_convert_reserved_meta(root, qgroup_reserved); + qgroup_reserved = 0; trans->block_rsv = &block_rsv; trans->bytes_reserved = block_rsv.size; /* Tree log can't currently deal with an inode which is a new root. */ @@ -767,9 +773,11 @@ static noinline int create_subvol(struct mnt_idmap *idmap, out: trans->block_rsv = NULL; trans->bytes_reserved = 0; - btrfs_subvolume_release_metadata(root, &block_rsv); - btrfs_end_transaction(trans); +out_release_rsv: + btrfs_block_rsv_release(fs_info, &block_rsv, (u64)-1, NULL); + if (qgroup_reserved) + btrfs_qgroup_free_meta_prealloc(root, qgroup_reserved); out_new_inode_args: btrfs_new_inode_args_destroy(&new_inode_args); out_inode: @@ -791,6 +799,8 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, struct btrfs_pending_snapshot *pending_snapshot; unsigned int trans_num_items; struct btrfs_trans_handle *trans; + struct btrfs_block_rsv *block_rsv; + u64 qgroup_reserved = 0; int ret; /* We do not support snapshotting right now. */ @@ -827,19 +837,19 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, goto free_pending; } - btrfs_init_block_rsv(&pending_snapshot->block_rsv, - BTRFS_BLOCK_RSV_TEMP); + block_rsv = &pending_snapshot->block_rsv; + btrfs_init_block_rsv(block_rsv, BTRFS_BLOCK_RSV_TEMP); /* * 1 to add dir item * 1 to add dir index * 1 to update parent inode item */ trans_num_items = create_subvol_num_items(inherit) + 3; - ret = btrfs_subvolume_reserve_metadata(BTRFS_I(dir)->root, - &pending_snapshot->block_rsv, + ret = btrfs_subvolume_reserve_metadata(BTRFS_I(dir)->root, block_rsv, trans_num_items, false); if (ret) goto free_pending; + qgroup_reserved = block_rsv->qgroup_rsv_reserved; pending_snapshot->dentry = dentry; pending_snapshot->root = root; @@ -852,6 +862,13 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, ret = PTR_ERR(trans); goto fail; } + ret = btrfs_record_root_in_trans(trans, BTRFS_I(dir)->root); + if (ret) { + btrfs_end_transaction(trans); + goto fail; + } + btrfs_qgroup_convert_reserved_meta(root, qgroup_reserved); + qgroup_reserved = 0; trans->pending_snapshot = pending_snapshot; @@ -881,7 +898,9 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, if (ret && pending_snapshot->snap) pending_snapshot->snap->anon_dev = 0; btrfs_put_root(pending_snapshot->snap); - btrfs_subvolume_release_metadata(root, &pending_snapshot->block_rsv); + btrfs_block_rsv_release(fs_info, block_rsv, (u64)-1, NULL); + if (qgroup_reserved) + btrfs_qgroup_free_meta_prealloc(root, qgroup_reserved); free_pending: if (pending_snapshot->anon_dev) free_anon_bdev(pending_snapshot->anon_dev); diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 4bb538a372ce..7007f9e0c972 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -548,13 +548,3 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, } return ret; } - -void btrfs_subvolume_release_metadata(struct btrfs_root *root, - struct btrfs_block_rsv *rsv) -{ - struct btrfs_fs_info *fs_info = root->fs_info; - u64 qgroup_to_release; - - btrfs_block_rsv_release(fs_info, rsv, (u64)-1, &qgroup_to_release); - btrfs_qgroup_convert_reserved_meta(root, qgroup_to_release); -} diff --git a/fs/btrfs/root-tree.h b/fs/btrfs/root-tree.h index 6f929cf3bd49..8f5739e732b9 100644 --- a/fs/btrfs/root-tree.h +++ b/fs/btrfs/root-tree.h @@ -18,8 +18,6 @@ struct btrfs_trans_handle; int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, struct btrfs_block_rsv *rsv, int nitems, bool use_global_rsv); -void btrfs_subvolume_release_metadata(struct btrfs_root *root, - struct btrfs_block_rsv *rsv); int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id, u64 ref_id, u64 dirid, u64 sequence, const struct fscrypt_str *name); From patchwork Tue Mar 26 21:39:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605149 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E27A713D88C for ; Tue, 26 Mar 2024 21:37:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=66.111.4.25 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489073; cv=none; b=Q6BTlOaSGlAyhYNhrxU3xu00Pk09dyh2+5rPlvMhx8D1XXOJIRwrrduO85ShlnK9cAfbbeu6EtqMEycnNk3miHR7JrBytvxoHtOd804b8yinv8Qb5CcfB89xrEKuO4B6TX0zFvPqyESzqUGpm4iDd4gbWE2rMTKqUAGDY4UDbKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489073; c=relaxed/simple; bh=wr4W1gNsBGD+YO2JDfoZjQ7dBpQSCvxciKvThvJRzM8=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PPu63WQIROTgmlL7tZ7Xux8FgJWBxMWyKie7voR1/xa1w+pB3IxghXZLAhtx2//W8kGDzy/nKmGJfXU+30Q4z5QWXgwGFfVTIv/RL+81qNr5sDMdI5Etv6CF1qrBr9u0o6dCXc0GPjMrcWw8tUwWFyYA/s50lqSm+QhUfnvIqso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=gPyzMTa1; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=XU8gqtS2; arc=none smtp.client-ip=66.111.4.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="gPyzMTa1"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="XU8gqtS2" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.nyi.internal (Postfix) with ESMTP id D672F5C0058; Tue, 26 Mar 2024 17:37:50 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Tue, 26 Mar 2024 17:37:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489070; x= 1711575470; bh=lol4IibumezYR84ohG1GEyMi9uemJzUgaOrsviVHMCc=; b=g PyzMTa1/u8IPV5chYRAq9Jb6LJbyeM8WY3Dknd7+TbX7cSSga0yPfxsRUzHpkDyJ imQnNlC6ZV4xDj2UsTcQ0jQyBc4uud6gYQyzsFupABwA2ecC6jButJFsOKx1b3Fx bqg9YKRnGIL2IYcB0p8vGNXI2X1Z6upk/2GavQKDxr5lDFWRZOGGpvJvahbUFeBd cAcKL7gsgLck1Z/GXic2T0DnasI4CrBXCS5jfoosBwxqpr3mvNRgtyOLC8Dnck7F ejxEOYDMUI5/eoCvkJdYlp5jCmE6sfDVkZD3KI3I4K/cg8z1fvRmsUKEAL07+Edy EjL4mncvRnoBcEcuerbYA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489070; x=1711575470; bh=lol4IibumezYR 84ohG1GEyMi9uemJzUgaOrsviVHMCc=; b=XU8gqtS2G8cJlDVALS1CznNARPzmX IkWzizYMxR4mQW58t74qcAOUzY74Cee5zJjvJhLw4Wm6U9WhcU7ETH1BRWWFDN9U iYr0OQgr2UawD0ETWRzVzN1jbD8a595+HfHJuiFDUVlzNpKMfRJuAiXbr3anIOc4 0lUFWxSNO+GFK3Dz7YLM5V4eM+VT6qPIYHTokk5oWKVCapmTs04vhWYr/NarB+Kl DAdDLiAf8UJHuJE85sN6f0xj8Nsl4gEvq7bZWBD22k/XkLvPq3Rrf4605ggwI1vx IeGnmrgrgEGdRM5fqy6xOoa5O9T3sqNl38soP9v7rC46eN7uD1/rk/AIg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:49 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 3/7] btrfs: record delayed inode root in transaction Date: Tue, 26 Mar 2024 14:39:37 -0700 Message-ID: X-Mailer: git-send-email 2.44.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 When running delayed inode updates, we do not record the inode's root in the transaction, but we do allocate PREALLOC and thus converted PERTRANS space for it. To be sure we free that PERTRANS meta rsv, we must ensure that we record the root in the transaction. Fixes: 4f5427ccce5d ("btrfs: delayed-inode: Use new qgroup meta rsv for delayed inode and item") Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/delayed-inode.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index dd6f566a383f..121ab890bd05 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -1133,6 +1133,9 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, if (ret) return ret; + ret = btrfs_record_root_in_trans(trans, node->root); + if (ret) + return ret; ret = btrfs_update_delayed_inode(trans, node->root, path, node); return ret; } From patchwork Tue Mar 26 21:39:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605150 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C4C6D13D891 for ; Tue, 26 Mar 2024 21:37:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489075; cv=none; b=duLeA1A2j1PYLKcqV/UwHhzbWAvJqqHq/mqYzKOLrA2IdIMzhGVCaohV0apAO9n9haryivsA2h/iZ7xsOXADLevS1S5YGvt9EXEOpueIhaRANv1U+Mdxz9uRFUQ2eHSFqPwhPm5pns1CtXgMhFvsRFRWMeF9327IH3E0j/fYdqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489075; c=relaxed/simple; bh=MlhTw0HgvuZ7Y3juHPG3kl+rZACt1j0OA1dMrPMeHyE=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S3y9hWdkzmgKmCArGrKg9mpbuvc3/3zoZ/ogn4gEt53scMtFCBjbeewtfX3OfSjHxgvMQVdlvSnbES3EkFpWHdlfu1mD19thvKMI69QTpV30nbLhSi+dw5ECFT+/42hmqC1RTGXX0v3Aunu+yipF8HaGlK/VuBi2IAiSnHuKmuQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=AYgsukOo; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=FXtHOrbg; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="AYgsukOo"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="FXtHOrbg" Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id 07EC03200A02; Tue, 26 Mar 2024 17:37:52 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Tue, 26 Mar 2024 17:37:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489072; x= 1711575472; bh=0czY3r/Xzx7E1Y3gcaOZSXFpRPQH0pb6jkNCJzXqoDU=; b=A YgsukOoUmzyX6cnNDOeAyJEu29gByrvG7hPULiCtmdakWvU8I/L289hbU5r0nMLr jENsrF3MXx5nH4Itkru0o7vRsj/rkgaJQu73HkALIumRn0MPJ7yUNVnQUYIj1yVh nNyoli1JJALfRQHSz1C3hGoS/3BNUitUrTkHvGHcfa/iKd2/c9w0fFibHesBPCy3 v0LFxizNHsMwXJPjHCU7fORim6B5SppFQPxy200+4KCD8JPtBH/kTgbikPTx/DAP js9BhKNUlSLdgH0gZ291Ea4nL27k0E4HO8FpnC8EK1RUkIz1+Wo1vt+hMJynWfo7 +GGJt2D2lXXDC89XXuMMw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489072; x=1711575472; bh=0czY3r/Xzx7E1 Y3gcaOZSXFpRPQH0pb6jkNCJzXqoDU=; b=FXtHOrbg3BlF4iocl4dkV7BaDXxm7 KJWrK/A/YItVPwmdOwwqFAMZU3zvyLDfLxx9l5ox09/c4nwTPLOcsqhpJ3N6s61R zfNuMSnGt8fcym4Fg6ObjwYwo18ROU8Mbqs5s1K27V9+d4+FXxSJ7ewZ+/QBuJoV NrZuCDRGN0eS82bVgGtRo9e18Lvs4qUEVQTjQT3uqszjjyR7FjDKCk60YUTn2Wt2 8hchEXHeQHfkTc/xGL0I52p2UeMhjyunJQy3/c/C57CzhWJFLsNIfj6er2EWlkTU obxYTGrRHJYpA2XrNAzbDI81xo4W1RDDEUW/Y6179pTr1YAG7DrkajpuA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:52 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 4/7] btrfs: convert PREALLOC to PERTRANS after record_root_in_trans Date: Tue, 26 Mar 2024 14:39:38 -0700 Message-ID: X-Mailer: git-send-email 2.44.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 The transaction is only able to free PERTRANS reservations for a root once that root has been recorded with the TRANS tag on the roots radix tree. Therefore, until we are sure that this root will get tagged, it isn't safe to convert. Generally, this is not an issue as *some* transaction will likely tag the root before long and this reservation will get freed in that transaction, but technically it could stick around until unmount and result in a warning about leaked metadata reservation space. This path is most exercised by running the generic/269 xfstest with CONFIG_BTRFS_DEBUG. Fixes: a6496849671a ("btrfs: fix start transaction qgroup rsv double free") Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/transaction.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index feffff91c6fe..1c449d1cea1b 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -745,14 +745,6 @@ start_transaction(struct btrfs_root *root, unsigned int num_items, h->reloc_reserved = reloc_reserved; } - /* - * Now that we have found a transaction to be a part of, convert the - * qgroup reservation from prealloc to pertrans. A different transaction - * can't race in and free our pertrans out from under us. - */ - if (qgroup_reserved) - btrfs_qgroup_convert_reserved_meta(root, qgroup_reserved); - got_it: if (!current->journal_info) current->journal_info = h; @@ -786,8 +778,15 @@ start_transaction(struct btrfs_root *root, unsigned int num_items, * not just freed. */ btrfs_end_transaction(h); - return ERR_PTR(ret); + goto reserve_fail; } + /* + * Now that we have found a transaction to be a part of, convert the + * qgroup reservation from prealloc to pertrans. A different transaction + * can't race in and free our pertrans out from under us. + */ + if (qgroup_reserved) + btrfs_qgroup_convert_reserved_meta(root, qgroup_reserved); return h; From patchwork Tue Mar 26 21:39:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605151 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A51413D8A7 for ; Tue, 26 Mar 2024 21:37:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489078; cv=none; b=S7HuZ/bb69SlSzZM0sugzAiIwNRqrDSJuMv+ewkXLzp6F0tPy9Vui9towaWxnHXTBSHqMJRKXwV/UWztsd02VI/YxwyRHNqrhZ2QCA6DDyUrCgXybFpowaEkQJJAyHNfQdnG3LUwHMdH3OJevoQf+xGV8ceW+WrtoWu1xq9nDAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489078; c=relaxed/simple; bh=twwD/lT/0q+XnGhc5ZX+tLMMqF2MI8JY0gYSV7EXXNk=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AuXDmApCVYAcisxaHkJcFZWyTMRWOEyjSXgns01s0vSgYQQr7inGecwF9zJ9Vk8aiw4YHVHJSA4jWiZvr0y79VAAHPZfcfFmsZdLiDDQlTFITcDqtg9jAaQj/R9OnU+AxYouPAH7FlsK5Xr25YrmHW4QxMZqiS7yRdOsqHxlqEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=JowaIUhz; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=oTkP52m3; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="JowaIUhz"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="oTkP52m3" Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id 9D5643200A02; Tue, 26 Mar 2024 17:37:55 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Tue, 26 Mar 2024 17:37:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489075; x= 1711575475; bh=0qrIrS1S9u+0Duo/56WgAEGQOdSzh6giLb/KCeW3akU=; b=J owaIUhzyXBU1lvpRwc4jOkeJTh2pttAZR/YBp2fCIQZT4A5zjO9ZX2gYpnBf1M3X fxUzMrH30CS7mXvFZ69llfKUgrko+AdFgc5tqvYx+2/UHQOuID+rtkyvJjD3UTLW F2C4rkOkS5+JElvbBffZITRlVL+jLzsVoct9iisJHHMYVmuYzk68yzqAkkOKLHsb QAS+/z9ou6Wya8fNErxwhTLxDH2ouvDI1ZsJHc63uUybvjcEcq8drE8C3XGDSTqm agKaPMvcpRkHGvgvDmU7mqU5m/LkzE9/Z1TxhevqQd5Kt5WFa3cTsbTWXhs5c3R+ 47wrmMJuADeDvy5jTE0Rg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489075; x=1711575475; bh=0qrIrS1S9u+0D uo/56WgAEGQOdSzh6giLb/KCeW3akU=; b=oTkP52m3ZEW1UC4b5YzGUyb8zJdCC G3QCyGNUf3eF5n0aKIQhLwY5b2FC9euW6kz++b6vSFCuA6DSGbGTAkVotbOwmQug n2GG1LGVsZUOSaL0yEJCfgL/W/1J1xzmnfw7ArysRLpxwhBlexnoanREzkPutFi+ jBaN/r5oiD1b3x2+aqAgZvAiUXzqhv/ltz9ekFOp3c4TflE2KHeYCxQAsl35+ExB 0BaQMssYwMoIqM5zhM/9PgB9sy/w0Ad8kD0YooMUntXTkh/YwrljeNiIMtaMwJZ4 zsTpI/966H+/g4eI7L2MPEnEyS0pSwDDd9w6ntjn2N0K7TSuebfWFAwig== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:54 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 5/7] btrfs: free pertrans at end of cleanup_transaction Date: Tue, 26 Mar 2024 14:39:39 -0700 Message-ID: <1697680236677896913e26948a76a2dd01dad235.1711488980.git.boris@bur.io> X-Mailer: git-send-email 2.44.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 Some of the operations after the free might convert more pertrans metadata. Do the freeing as late as possible to eliminate a source of leaked pertrans metadata. Helps with the pass rate of generic/269 and generic/475. Signed-off-by: Boris Burkov --- fs/btrfs/disk-io.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 3df5477d48a8..4d7893cc0d4e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -4850,8 +4850,6 @@ void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans, EXTENT_DIRTY); btrfs_destroy_pinned_extent(fs_info, &cur_trans->pinned_extents); - btrfs_free_all_qgroup_pertrans(fs_info); - cur_trans->state =TRANS_STATE_COMPLETED; wake_up(&cur_trans->commit_wait); } @@ -4904,6 +4902,7 @@ static int btrfs_cleanup_transaction(struct btrfs_fs_info *fs_info) btrfs_assert_delayed_root_empty(fs_info); btrfs_destroy_all_delalloc_inodes(fs_info); btrfs_drop_all_logs(fs_info); + btrfs_free_all_qgroup_pertrans(fs_info); mutex_unlock(&fs_info->transaction_kthread_mutex); return 0; From patchwork Tue Mar 26 21:39:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605152 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E84413D8AB for ; Tue, 26 Mar 2024 21:37:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489080; cv=none; b=aOOU9Y2O7fWiGY0jXMcDcYtyKNG7D0t+I1FEr+/EWqArThCjLAvK+jtX+XGTG4ZChCDettKH0wzSH1GOiaZr0GGzXHz00b0NziupNvCGw6Sa3f0nzPX+xgt9d3CqpZ7puhtO0tQ9Cxhw2VNNYEbxusrZel2J1gbMnBzxjD5JLVg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489080; c=relaxed/simple; bh=TNn9pcahLnIZ7G1YwN7M9xSbBOL+orWtpccs5en3dhk=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WLRbf7RJdzmq0vzhtfYYcIDckx6Kg316NV+1JahpaEKjYAgSPfnNLeV7ncDhL120CDyOwUXlFst1g9Q+aBz3rpGdzMA2PF6tdRaq+ajqTVe1Q1hecRWYaBDUPb2acNRxDBa2M/YQMe5IUvUknmnPTz4bAR6C9Rk4sXYEh5XR/2c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=oQq8ktMb; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=q6MwiQcy; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="oQq8ktMb"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="q6MwiQcy" Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 3D55C3200A1D; Tue, 26 Mar 2024 17:37:58 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 26 Mar 2024 17:37:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489077; x= 1711575477; bh=Tz7Gz4UO5Jmbw4K+G5yh/ZqiXiXxxgYTkvSRVL6iE1Y=; b=o Qq8ktMbd0GjJdjHWPBxTCMaTmllGUkozxas2rX6E8ocK/7nC8wbbRdR2lXEUxmEF KyEl48QYIXKs4frVVg5vDhiaDwtR8kZtXIR8T1tm5RxzKUsk3xsi5wNMVL2gih5M sJRv5fbB2+CtBMajUh8bF1o7gkxg/oWwyyV9EpGG/4VlRf4A/Qyb79v0ws6wVBYo adAKpDbPH/MqAUccaH4pfkMImpZa9qx9TyQUkBS5BG1GpaB5eRsQ1F9+XvqZ+e7i bJvk9YSpR+zrNnCvD90onxVAgB59Cryo2pF/9WLHGZm+YSD7fcjA+BlfnfjeWvUx p5Wbxk1NQ+FgAxw/up0yg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489077; x=1711575477; bh=Tz7Gz4UO5Jmbw 4K+G5yh/ZqiXiXxxgYTkvSRVL6iE1Y=; b=q6MwiQcyOjZMtpnd7wNHODRGlF/hW 2zy+2B4hiXBARwg9PjdHVtj70XdHNVVhUkIYhz5hzF9ndhDDRExw/dAiPkitpbtw OXSDQfF62zLzvdBT6TQjqHh1xDuC0pBBngiAkHabS3eVs38X2+HcSmmOKNm1PiWw gwIXweRHNV36gTQdhOy8CeJIGNRT/WYzR4x1U+50zOS+UAezZDYN22HClMQen/f6 dbqRKC3jQb6g7kpxaIpvTYwxV5YXcdMjjxjeyygZgFDt8xqsazaIgByW8Bpb/FgP fBRykP/mUlaiWzZPf2PiOGfx8BnG0rpAi4Xf95XN5Uf5hoidic83oUysQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:57 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 6/7] btrfs: btrfs_clear_delalloc_extent frees rsv Date: Tue, 26 Mar 2024 14:39:40 -0700 Message-ID: X-Mailer: git-send-email 2.44.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, this callsite only converts the reservation. We are marking it not delalloc, so I don't think it makes sense to keep the rsv around. This is a path where we are not sure to join a transaction, so it leads to incorrect free-ing during umount. Helps with the pass rate of generic/269 and generic/475 Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 2587a2e25e44..273adbb6b812 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2533,7 +2533,7 @@ void btrfs_clear_delalloc_extent(struct btrfs_inode *inode, */ if (bits & EXTENT_CLEAR_META_RESV && root != fs_info->tree_root) - btrfs_delalloc_release_metadata(inode, len, false); + btrfs_delalloc_release_metadata(inode, len, true); /* For sanity tests. */ if (btrfs_is_testing(fs_info)) From patchwork Tue Mar 26 21:39:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Burkov X-Patchwork-Id: 13605153 Received: from wout4-smtp.messagingengine.com (wout4-smtp.messagingengine.com [64.147.123.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC73813D8AD for ; Tue, 26 Mar 2024 21:38:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=64.147.123.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489083; cv=none; b=k71+7p/aFpSDNUW3E825kalNUo2p7tmhLop+UMiaAXn4VYSTWL9O82lmT7dkzaGbGUAOpKKC3aBV39H0GzKo5i78pMlhEOU7ydgu7SjraZaUuIVFwWPGcuOs1KvbrWoKMO37Vm/1rT1HhB4+Y1ap3SEXxLixZzEOMibNJuXJvns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711489083; c=relaxed/simple; bh=35lYeW8ohyLvpD7bftw8CAefA0RFudmeiAAFSXNYZb8=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c01A4c90cwC8agweg3HgA7uHzrgRtcm9BreynMfluT+ZWUBCWG8ZlJPq8TetrBL68Wha9levff9gryiNGYi8//DNnMohUDasvJUHTuwEOvxa+CRkvjEQPoPZr3Q+6VNWupaLcTKKiXZUWXIylO3P9JM0+tMLGdPzgNmrhy6woOk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io; spf=pass smtp.mailfrom=bur.io; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b=DVIhybGU; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=SMBjmUAw; arc=none smtp.client-ip=64.147.123.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bur.io Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bur.io Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bur.io header.i=@bur.io header.b="DVIhybGU"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="SMBjmUAw" Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.west.internal (Postfix) with ESMTP id CDBBE320077A; Tue, 26 Mar 2024 17:38:00 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Tue, 26 Mar 2024 17:38:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bur.io; h=cc :content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1711489080; x= 1711575480; bh=90Rix8vcflTSyn2WpOd0vyJFVLZvboKDerMb//5HB5k=; b=D VIhybGUp0I7cEC448VjOAgztSjNaiKh0X/1oy5p0njBnR5V7LTHg5u6qoL/padzu Xrt5yTC0r91fNBjRCrthLaalmNIExDsT6WmMz6I5lPk7L1Vsm2UJpo4FI89FmlNu L4B0yN9CQARF5j0g67YtJ3C93q3Aqj2kW+RFjbhu9PqVE0Uaxqo75nHXn9aXv4Rx Ch5tEz5fxP9uUOZh+ePTiUTtJ0XqNQcAv86QqMCqGWsbMsKDbcBWLsz5VvBeeJ3L JNjwPkTcGHsiYOf4/z86bp7Kqdgp9TsD3d3MzeDfaUR8T2rLigN3kVNvUjv62gEp Mpky53ybAsdwsIXmvClUA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:date:feedback-id:feedback-id:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1711489080; x=1711575480; bh=90Rix8vcflTSy n2WpOd0vyJFVLZvboKDerMb//5HB5k=; b=SMBjmUAwRx6iTxAIfL1TDOqCgfpyr RUCU+rf6nHjiw2rN5lVtysNrxSTbMvUYXpjysrBs93bLBCGaT/jTcs4kJW+uTs+U mTEbLNIj21lrulSLL5pHYVyHAjO3DrMkzq2Nj4NVcf+YSFGaekBmZ5adGwFEvnEn YZdZg/5VFptmUbz40LCcZu4n2m3kxzknnVO31p1nAtLiBg276mMNSvX9RYcsb70B ydLnQee5i3yXhiHhYq9gT/08oM1Uh5TFTbE6RQyGJI1twCFh6Q5AP8KqrWNkrYSG sthcl6m9dT95AyLJxYewl0Qk6fMRMJzQ8LT6kGTS4wzKuPpW6NJ2hS+Og== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledruddufedgudehudcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtke ertdertddtnecuhfhrohhmpeeuohhrihhsuceuuhhrkhhovhcuoegsohhrihhssegsuhhr rdhioheqnecuggftrfgrthhtvghrnhepieeuffeuvdeiueejhfehiefgkeevudejjeejff evvdehtddufeeihfekgeeuheelnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghm pehmrghilhhfrhhomhepsghorhhishessghurhdrihho X-ME-Proxy: Feedback-ID: i083147f8:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 26 Mar 2024 17:37:59 -0400 (EDT) From: Boris Burkov To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 7/7] btrfs: always clear meta pertrans during commit Date: Tue, 26 Mar 2024 14:39:41 -0700 Message-ID: X-Mailer: git-send-email 2.44.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 It is possible to clear a root's IN_TRANS tag from the radix tree, but not clear its pertrans, if there is some error in between. Eliminate that possibility by moving the free up to where we clear the tag. Signed-off-by: Boris Burkov Reviewed-by: Qu Wenruo --- fs/btrfs/transaction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 1c449d1cea1b..df2e58aa824a 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1494,6 +1494,7 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) radix_tree_tag_clear(&fs_info->fs_roots_radix, (unsigned long)root->root_key.objectid, BTRFS_ROOT_TRANS_TAG); + btrfs_qgroup_free_meta_all_pertrans(root); spin_unlock(&fs_info->fs_roots_radix_lock); btrfs_free_log(trans, root); @@ -1518,7 +1519,6 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) if (ret2) return ret2; spin_lock(&fs_info->fs_roots_radix_lock); - btrfs_qgroup_free_meta_all_pertrans(root); } } spin_unlock(&fs_info->fs_roots_radix_lock);