Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1788837pxp; Mon, 7 Mar 2022 02:21:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJwEsdusJ1LS9i8+eIN3+HUTIgJ4ShyKv4h24SuVCFTqUHS9J5G+lJMPknaTPD2eYM1qwU42 X-Received: by 2002:a17:902:e943:b0:14f:4a2b:203 with SMTP id b3-20020a170902e94300b0014f4a2b0203mr11437813pll.113.1646648469608; Mon, 07 Mar 2022 02:21:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646648469; cv=none; d=google.com; s=arc-20160816; b=m3pbN6Fh6NCgWAVKsCws90lV2i/X6MCoyqyc1WbP23R8xSvAAWEMwyUTr4kDCyfsDR VWotaXT4p3YESuER98sTlLXPlbD05MyW3jydb48YD3paG/JxNjSEyMJc828uSbM1v7GB Ze25jc6swEKFUUb9yQC8ghq83GoWYKZVOWzAM4vAIGIGZR02TxuL31/yeJL98XYXNRga 4ABKCDt5cz5sSVgTi5cgQUVKs59vFduh0DMisHVycIz2aVTQVKSyI+0Lf0FDelOI4ixm qlcktGhBvdVENiEw67p9jFs8WZxxv/6h0/BGtywFhgnhG2ZPJLVwqc9+NkqKYN/CwyeU hjgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6pCm0gb8bkY6x0ZbRIhSFq40uATv6Lp6NI1pKZubd3I=; b=csTNvZlspIR7gi2JUaVsmh4K7eVuA5CQq/XpSYYzoasP/AJo4S3Ok9l+wy5WJZJ4xH cV2PDWxLhbYdjSYJSblVCl5uybeaX+Ai6c9ZWBUN6PtSxZWaGNRNCbk1wJwO4hV4ToqK 05t0oF06C95RGzmS3kckABhpzmj0d/6B0hYak00r00AcZjAY0jXkVwPsx7sD8ESDnVqq o9/ltEgdy5mgaJMa51vKk20bQyiBd7BQJf1sQeOQDUGawFc6slpXunWtEyditEouYBS6 69kNhD99Y8Nl71igclqMRG9NiqhI34hWhy229dlG/yt4UlXbyPD2UagaMBBbPyDiBMsa pwlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="ro9r5T/9"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n16-20020a170903111000b001514c2d7b0asi13484354plh.436.2022.03.07.02.20.55; Mon, 07 Mar 2022 02:21:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="ro9r5T/9"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239096AbiCGJtH (ORCPT + 99 others); Mon, 7 Mar 2022 04:49:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59052 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239124AbiCGJjP (ORCPT ); Mon, 7 Mar 2022 04:39:15 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 173A570931; Mon, 7 Mar 2022 01:34:39 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0EDD36128E; Mon, 7 Mar 2022 09:34:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1B794C340E9; Mon, 7 Mar 2022 09:34:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1646645669; bh=JaDOKGxkstXvayk71s8oa+46K84swD26bFQlLGDAZaA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ro9r5T/9+cFt0f3HXqRQStpe6N/GZ6CnsJswKnKhnvWArhuljreu1wd870uKBjSbb oWdLteTWf+6WgznfBaPiWHTgs6Z4lOIHt4hYqKs1I8yBUtl1Na2qvK4F2Az52L1bLv OsR7HiO6viKy9PAr0yL/EfICvlvsSNSwsKqEgm+A= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Filipe Manana , David Sterba Subject: [PATCH 5.10 104/105] btrfs: add missing run of delayed items after unlink during log replay Date: Mon, 7 Mar 2022 10:19:47 +0100 Message-Id: <20220307091647.102718054@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307091644.179885033@linuxfoundation.org> References: <20220307091644.179885033@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Filipe Manana commit 4751dc99627e4d1465c5bfa8cb7ab31ed418eff5 upstream. During log replay, whenever we need to check if a name (dentry) exists in a directory we do searches on the subvolume tree for inode references or or directory entries (BTRFS_DIR_INDEX_KEY keys, and BTRFS_DIR_ITEM_KEY keys as well, before kernel 5.17). However when during log replay we unlink a name, through btrfs_unlink_inode(), we may not delete inode references and dir index keys from a subvolume tree and instead just add the deletions to the delayed inode's delayed items, which will only be run when we commit the transaction used for log replay. This means that after an unlink operation during log replay, if we attempt to search for the same name during log replay, we will not see that the name was already deleted, since the deletion is recorded only on the delayed items. We run delayed items after every unlink operation during log replay, except at unlink_old_inode_refs() and at add_inode_ref(). This was due to an overlook, as delayed items should be run after evert unlink, for the reasons stated above. So fix those two cases. Fixes: 0d836392cadd5 ("Btrfs: fix mount failure after fsync due to hard link recreation") Fixes: 1f250e929a9c9 ("Btrfs: fix log replay failure after unlink and link combination") CC: stable@vger.kernel.org # 4.19+ Signed-off-by: Filipe Manana Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/tree-log.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -1286,6 +1286,15 @@ again: inode, name, namelen); kfree(name); iput(dir); + /* + * Whenever we need to check if a name exists or not, we + * check the subvolume tree. So after an unlink we must + * run delayed items, so that future checks for a name + * during log replay see that the name does not exists + * anymore. + */ + if (!ret) + ret = btrfs_run_delayed_items(trans); if (ret) goto out; goto again; @@ -1537,6 +1546,15 @@ static noinline int add_inode_ref(struct */ if (!ret && inode->i_nlink == 0) inc_nlink(inode); + /* + * Whenever we need to check if a name exists or + * not, we check the subvolume tree. So after an + * unlink we must run delayed items, so that future + * checks for a name during log replay see that the + * name does not exists anymore. + */ + if (!ret) + ret = btrfs_run_delayed_items(trans); } if (ret < 0) goto out;