Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1749040ybz; Sat, 18 Apr 2020 07:42:52 -0700 (PDT) X-Google-Smtp-Source: APiQypJ00CZcsIihIouJv6rymKE1qOfUqfQ8crBblYjf8bwCPVh3Z5bHIYRUCQ2dj1q5ar7YiGHX X-Received: by 2002:a17:906:4903:: with SMTP id b3mr2578085ejq.80.1587220972794; Sat, 18 Apr 2020 07:42:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587220972; cv=none; d=google.com; s=arc-20160816; b=tcgahiMk2F9ALDDJ4Qf6eOjkUFwejAnqAOwksFv8V2PQ5tZaBgcLdZAibaWJv3YGnI TjqhQHRMd6mWB2xDyD6unwOYaVnRNXnfilniA74fa04fazs3KUjXEF10d+0UFwrsSywp f8AcTP231wc3LZ2pMdo8hBHbB9LateM3LyLsIziQ1o6GF7y9Xc+4fq6iUJJmVYEZ3LTc 0QCOsRIWrTDvUt6jojQ3RCnzSLASDIVIk2RoJSwYKPZLy1bS4+nQ99p10r5SIdLHx7Sr 4SIPOtIPJ/oZbr5qR6iEgBJbgm9lrEeEsSVE2pDvgcz+kAGhY7Vu2cvQn04zpznZFvbi YrCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4JtSmzqJWbpV/rzO2lQXbGdq09PvybLnOgE07vEfD7M=; b=TPUBoUAI/m3PWCJSvFYYTbm83fvZjfEXkB1oJnnznnUGdDuqHzZ1IVlxD120G5yV6L qKH6xOwDjE2b/uVg3If+3oZiLV3lD1cHBmi/nQMTAknHNAmXZFSFN9YnLqsHypl8hNFe SSu3sAL+q719OfPNgG+AK4HZOdr6D/dXd6oWsa8fqHGWf2PtnJ6PCg+bzTdKvjuQcgpq qMjWdO/oDtFc1gOwgj3pFxyRNUYLwGlWCp3qNizmBQtqUeurtSE5gQUwTLN0aZ8W3Gkx rdR7KtfONj8EqdaBx20Unnzj7RdcxFiSrjZl498oPhBeUAQJ1y4ilNxdqFlywkE3tE7O 1Klg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=uIQkyXdU; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j26si15509155ejt.88.2020.04.18.07.42.29; Sat, 18 Apr 2020 07:42:52 -0700 (PDT) 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=@kernel.org header.s=default header.b=uIQkyXdU; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727124AbgDROlH (ORCPT + 99 others); Sat, 18 Apr 2020 10:41:07 -0400 Received: from mail.kernel.org ([198.145.29.99]:49748 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726900AbgDROlE (ORCPT ); Sat, 18 Apr 2020 10:41:04 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D7A6221D6C; Sat, 18 Apr 2020 14:41:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587220863; bh=WzWGCo2zYoz2r0zMErVJIAH7s5BY+VFdBLyO4HPTbsU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uIQkyXdUcRxqlrAJD1dCYcpkJtdM+OMmPax/JF/9loCsQeUZjBqU0/FxvRpLGHU1z LaDYONghSrVPNv1nWD6oc8kwnMn3DzcyOwnlCAEtlRae9jMFQgoEDVo9J2b3AookIm N/Hvv+AWNfDrYAgTQv72MjqlHP1MeXE2GaS9NDLo= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: "Yan, Zheng" , Jeff Layton , Ilya Dryomov , Sasha Levin , ceph-devel@vger.kernel.org Subject: [PATCH AUTOSEL 5.4 13/78] ceph: don't skip updating wanted caps when cap is stale Date: Sat, 18 Apr 2020 10:39:42 -0400 Message-Id: <20200418144047.9013-13-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200418144047.9013-1-sashal@kernel.org> References: <20200418144047.9013-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Yan, Zheng" [ Upstream commit 0aa971b6fd3f92afef6afe24ef78d9bb14471519 ] 1. try_get_cap_refs() fails to get caps and finds that mds_wanted does not include what it wants. It returns -ESTALE. 2. ceph_get_caps() calls ceph_renew_caps(). ceph_renew_caps() finds that inode has cap, so it calls ceph_check_caps(). 3. ceph_check_caps() finds that issued caps (without checking if it's stale) already includes caps wanted by open file, so it skips updating wanted caps. Above events can cause an infinite loop inside ceph_get_caps(). Signed-off-by: "Yan, Zheng" Reviewed-by: Jeff Layton Signed-off-by: Ilya Dryomov Signed-off-by: Sasha Levin --- fs/ceph/caps.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index f5a38910a82bf..703945cce0e5d 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -1976,8 +1976,12 @@ void ceph_check_caps(struct ceph_inode_info *ci, int flags, } /* want more caps from mds? */ - if (want & ~(cap->mds_wanted | cap->issued)) - goto ack; + if (want & ~cap->mds_wanted) { + if (want & ~(cap->mds_wanted | cap->issued)) + goto ack; + if (!__cap_is_valid(cap)) + goto ack; + } /* things we might delay */ if ((cap->issued & ~retain) == 0) -- 2.20.1