Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp671313ybz; Fri, 1 May 2020 06:33:24 -0700 (PDT) X-Google-Smtp-Source: APiQypKZSE9HqP3mKWrEb17TlPKRDN+qmQsncpUh9X9Mg8Nqub19bdA5+oX5qvh7dX/tCI1b7xZS X-Received: by 2002:a17:906:374b:: with SMTP id e11mr3312250ejc.283.1588340004323; Fri, 01 May 2020 06:33:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588340004; cv=none; d=google.com; s=arc-20160816; b=JTMyaZyfGAFEApKtCBKQBpP2ij2V4GbNayUiqrG++O0aMZsaU7/3si0xULfWgGWYtm aUqEAbhnUGCKT2xE1oCWZwxI8MU01X34B/Gv1Z2Lvb8a7uzewthslxdHqN16ci/uUfYn KvZPp9RFoil3qRO2PCxI60sSkoZlAQLp5nLQ2RY8ZMH0iBb6qORvCt8RVAgsi18eqUux 7BA2q2rT0ZJ3UqyMl1pTiSCpq9nc0jq/wq2h/XVmZb5eog3B6eluS3H1OtCIcCeE5XFP SL2uj8vDx7aq+tlnYOu31yhbX9YtgE0dsVqwkPvwFYCq01JrCaimuotpI+WjRjnDNqPR 4VLg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=J/a3km4/rGn94RyXPGTmKssnv0OPVqbhaf803YdAIXM=; b=RNIMc+HNWOLAK4Q6JWjFXCe8CTkLlyaslZsYfX1S9C7yz76D1apINue34CLOWqT79R pVg3O8gOAaRo+RoLNKGZZ9Wg6yub7q9HhDZPkSoxN5n/apm0TQIBJbH24XvvTVlwYcEq x95yQYetDiKGkNfIXRw6L2hdTJghZCXM65Vm+oPsCU2Pq4hyyslKZK0J4Zq8etpkdcMZ L+XelyOMe+uh/qjT7hCB6gW+D6zuKvUCprG1mMcCbRWmmeSYrLr3uP3OyuD+laAwBY78 rk6ivX095t6c24yLfgyR9KQe7d2MmqwT3wp77Bw1/cd7RnUBOJcnOabqfiAbi5cRGW5j PA2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=USBcwfTk; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x3si1683909edq.193.2020.05.01.06.33.00; Fri, 01 May 2020 06:33:24 -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=USBcwfTk; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729590AbgEAN2N (ORCPT + 99 others); Fri, 1 May 2020 09:28:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:51040 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729560AbgEAN2M (ORCPT ); Fri, 1 May 2020 09:28:12 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8DB3F20757; Fri, 1 May 2020 13:28:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588339692; bh=mCavN1At21tKbAF2JyVh9FEsLWtaFw/NGJH8wNFnySs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=USBcwfTkfttY2J4N4jDdrAs4RDU54R/2Wk03Em3cSLTKGMxwxmyA3k554f+eJa96L s0rBwQHc5R5DPknnRAuWwefn//E64geHwxNjVntoM1j6ZNP+qdKt88g8oxtp8YRefp G8/plD2EmNxJxrMH0VLC6RrsmFtQf4xNT4yGdfrA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Yan, Zheng" , Jeff Layton , Ilya Dryomov , Sasha Levin Subject: [PATCH 4.9 10/80] ceph: dont skip updating wanted caps when cap is stale Date: Fri, 1 May 2020 15:21:04 +0200 Message-Id: <20200501131516.596113175@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131513.810761598@linuxfoundation.org> References: <20200501131513.810761598@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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 f5d9835264aa1..617e9ae67f506 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -1764,8 +1764,12 @@ retry_locked: } /* 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