Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp702842ybz; Fri, 1 May 2020 07:05:17 -0700 (PDT) X-Google-Smtp-Source: APiQypLvzUnZG8EXRG3LQqSeInCeClHjWxxLuTUxUPZLFhYvF4Zv+xLosUxpH3QKBHMwm+dB15ga X-Received: by 2002:a17:906:310e:: with SMTP id 14mr3437248ejx.177.1588341917681; Fri, 01 May 2020 07:05:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588341917; cv=none; d=google.com; s=arc-20160816; b=lKXqM41NRKh/OfVTS/ATf/5tXzH9lye119v8cYVlbMkmPkBbD7z89IscFFrCcHXYDC UJmhJnq40g/e3kJeGQ6tlg4+lMGMuxXwjH9rweyOujh2Uu+abEmvuhtNttNrvXp4DSlS 59t6TGrOp/mVQpFuXe7UZnqCtttLfKY+ZkxklcvU0IUaHDDpKejT9prbW7mvb8MlEPB+ qY2mBu9wa+82Xp31Uo9K0rXdmIWdkOEMzJXF2Z+nGkz1TgWHGS6kgcePrvF6I68CwsAd tPMtBfRDvqvyUblmSyo8F3Tm7UFV/N064sh5QlgfuVpKK7PRwOhuoJqxwdLXkioTXXYO qiwA== 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=PIqv6TEm35ao7/Bx3QASvPVE1epemIbd5XTK7lRMTsM=; b=Z9Hwp3Hc59f7UDLdvB9A5Mjuor8VFMq3n7tQnbcJD25etrLY5QqZmCM13QRqmzF2BF PTgvjxC76dE2Ci5jvv8tLe6gLyR8aUgsFHaLr8wrTnK+7h0uekft+bl7CmAtBdd/tHB9 /41BDQmq48ASgr5UJDpDpjlDAJ33IcFvarafVkdJ4LMZDC/j5eGE8cblB/FG1N5QrGBB 0qxe6IkMsmR7aLv9qyU3S/66DpavsMh8h+AIDI+9fl1coIWsN9y9wHXscIxbmZbXGg1z zRoPu+4fQt4stmpL0DjTyKkAsUdkXMgz9CNADWNhpYE5OU67mJt4w6/Anj3DclqEpZIo 31CQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Otr2T64z; 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 y10si1749781ejw.53.2020.05.01.07.04.44; Fri, 01 May 2020 07:05:17 -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=Otr2T64z; 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 S1728994AbgEANZT (ORCPT + 99 others); Fri, 1 May 2020 09:25:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:46002 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728979AbgEANZM (ORCPT ); Fri, 1 May 2020 09:25: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 A806724955; Fri, 1 May 2020 13:25:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588339512; bh=/GX9T0D4odWQTx9IHT/mYKVbwAc7xE3hb7UQOZAveCM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Otr2T64zKqvcAvMKZ2afRTh0+apWLKiXOQU6bkjaIizfaYZ4mX0UVQLHBFJsqpA5h +yczS+mXAb8Rp7ctR+21AJkHj+AZ5GV2aJ+NuNFlVOgsUeKavUO5c0b5u3UWL89x+A yyc+Kotyb34oY2x0qiq7xzDIxWffqQYkcTszg0wQ= 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.4 09/70] ceph: dont skip updating wanted caps when cap is stale Date: Fri, 1 May 2020 15:20:57 +0200 Message-Id: <20200501131515.294796911@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131513.302599262@linuxfoundation.org> References: <20200501131513.302599262@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 aa4df4a022525..efdf81ea3b5f8 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -1734,8 +1734,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