Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3684654pxb; Mon, 24 Jan 2022 15:17:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJyS1hHLA76k2dSr+ho2oIM/W9BylfdyK8zFVkAgd5t+4HxbhG3y72bA+Sn5UxdMXoJB4VEF X-Received: by 2002:a63:45:: with SMTP id 66mr13391165pga.607.1643066274016; Mon, 24 Jan 2022 15:17:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643066274; cv=none; d=google.com; s=arc-20160816; b=m9CSR3Li8PaCWhxdHU2Auv9Sy5P8nfuUXdhHMnxztuS9rGHGXyU5uLF7gyas+TSASP wrD5m1dUf19BYRCtdtXQjJlBhCNshgyjk9wlDNVNWPJGPkvay4maJtTSqEvAzNFEdsL8 LJfGZ86WSMNfSa//lp95yJB1IHIpbVhE2M+a9BMKwbj2C6CPHL0sDj0KEBCJFzqhGFX8 sQOvIADgtLZOgpaKXw6L5rrzuWTw/6/9Zw9WHAfYFc9SOuqL1/RtgSO238MyA8rZm5FY nvtgOAQIASelh0ZsVvRLpo8SNTW4JLIeuEVNw23gZAj+uoeFZlhMixyOyStqGi4UYzTp epng== 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=YS3OUJgxSCWFX77jmFnaiZ1524rLpN00pnTo9ciFWLM=; b=DBr/5G5Np/n1BhqZHfMtPyh7Gc7psdbIItiEw1nDNYL68ydRBmKfT3FekW5v+w2BYC WAcnhyy/3Wj6WHfz6GluRT+gvn1xgSuL7m/nmkhvzSxcWuz73OuTvaYgnyai2sqEhi9L X7uJ1ZjUQqYfMgV+9shiVOwqLLAValdZyXC5FhkX3uO87rN6AnRYRMuKYV4dwivaMgwW yIis8ZMYe9y/6y4jDRRU9i0nqg/OTPn2sW+hFwDWdX2wb/fOfjZH2QaD5nfvlRXiAnal Q8GTujMnJY6lcJmkAShD4zXkJY95n6dRrZCYdTHo2DqFpN3emk8stalE0cV5BF+EyWbV 3a6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QONuGLKg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l4si562602pju.77.2022.01.24.15.17.41; Mon, 24 Jan 2022 15:17:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QONuGLKg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1844971AbiAXXKy (ORCPT + 99 others); Mon, 24 Jan 2022 18:10:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1448508AbiAXWRS (ORCPT ); Mon, 24 Jan 2022 17:17:18 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEAACC04A2D1; Mon, 24 Jan 2022 12:45:35 -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 ams.source.kernel.org (Postfix) with ESMTPS id 75981B810BD; Mon, 24 Jan 2022 20:45:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3DA5C340E5; Mon, 24 Jan 2022 20:45:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643057133; bh=Cywg6D33HdGmIRuFqk7UwcBQNdWaQwlKLxan2QdZVIA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QONuGLKgFeXuhR9pKS9KQDsHoG6YfeI2TTbkPyxgyLtxIEODp9e+4TvxzCU9+dHHt One8eeqU85M1vQUlZGy+P5/EIgX50Yg7i6CvHD9ItiSfUyqcC+KA+cSrKEyryVysHx klh7gGjuiAAbH8SXsVmUL4VkJvhbbsUbqf2GyuHU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Nikolay Borisov , Josef Bacik , David Sterba Subject: [PATCH 5.15 711/846] btrfs: check the root node for uptodate before returning it Date: Mon, 24 Jan 2022 19:43:48 +0100 Message-Id: <20220124184125.555230264@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184100.867127425@linuxfoundation.org> References: <20220124184100.867127425@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Josef Bacik commit 120de408e4b97504a2d9b5ca534b383de2c73d49 upstream. Now that we clear the extent buffer uptodate if we fail to write it out we need to check to see if our root node is uptodate before we search down it. Otherwise we could return stale data (or potentially corrupt data that was caught by the write verification step) and think that the path is OK to search down. CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Nikolay Borisov Signed-off-by: Josef Bacik Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/ctree.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1568,12 +1568,9 @@ static struct extent_buffer *btrfs_searc { struct btrfs_fs_info *fs_info = root->fs_info; struct extent_buffer *b; - int root_lock; + int root_lock = 0; int level = 0; - /* We try very hard to do read locks on the root */ - root_lock = BTRFS_READ_LOCK; - if (p->search_commit_root) { /* * The commit roots are read only so we always do read locks, @@ -1611,6 +1608,9 @@ static struct extent_buffer *btrfs_searc goto out; } + /* We try very hard to do read locks on the root */ + root_lock = BTRFS_READ_LOCK; + /* * If the level is set to maximum, we can skip trying to get the read * lock. @@ -1637,6 +1637,17 @@ static struct extent_buffer *btrfs_searc level = btrfs_header_level(b); out: + /* + * The root may have failed to write out at some point, and thus is no + * longer valid, return an error in this case. + */ + if (!extent_buffer_uptodate(b)) { + if (root_lock) + btrfs_tree_unlock_rw(b, root_lock); + free_extent_buffer(b); + return ERR_PTR(-EIO); + } + p->nodes[level] = b; if (!p->skip_locking) p->locks[level] = root_lock;