Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp2757400ybh; Mon, 5 Aug 2019 06:22:30 -0700 (PDT) X-Google-Smtp-Source: APXvYqzAuJWLfl0+0QtROGEECAhURoE2vfeFbUtf9QUc9/m6N6PuE5f5txg/8c5UoWKmvne4fyLR X-Received: by 2002:a17:90a:ff17:: with SMTP id ce23mr18078532pjb.47.1565011350895; Mon, 05 Aug 2019 06:22:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565011350; cv=none; d=google.com; s=arc-20160816; b=lI29y5Sug+mSK485Z0DQ1lRmxUpJKHePH8B25kJSWInWpPgFpyAN4uUgxq98AibXjJ yk6C1HA6xU9wO1YQxnyNbf6IAfATrISS4lfuetEOPi00AWWC1nZHECj+U7MNYVkPtPfR UdeD6PTyJkhrhOtqnWXb54yQWEkAO80rm/4XhD9Oy0OVtbhaapwqyUKGarC64UFbZai0 Gx1v0+GXjqdt4X6TUIdZh7bzyAxea8Kp2MLZDmGxhsd/WVl+BAC4qhkuwdQrYnqBuc3R JobevBxd5VT/qYxHEp01NBD9KXZ8dmpIh6rwXqzHLKSa+oWPil72ttOiYJr3giccFdjR Jb4w== 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=QyxynJLoV/1qKf+PqtJUh8bjB6LLuc9U/yzjbA/s6ZA=; b=ytSu8OrcWOtSYn87sFzAU+JF6xR7l/paCPCIHyRA3zhe9Hv+R0S3/YCugd1Azu6Pjc SL7lGYs6nrlUvt9DINX7eYUJVmhwn82/qVlLnWrmhyVEeBw8SVl8ToH/mrpSr0F35G8y xrgMsuVqxd0P836lEHY41RmRRD/DXZhmkiK6Az//qFP58o3J4b02AU9BlYjreS7GXQ1L ymLqpY2cY6nPRA6AOZiwLMcd5hMZSOLNvLNFakS2dPEboCkH3Bvmi/1JDHejZWGqLKHO 9L2YLbW/SZwaCC+MXXxUSM32rtQufHHIT5bkorMsbalaECKFcGZ7tQKNabE1pAop5ltv NYtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kbYhn8VW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c36si45208203pgl.287.2019.08.05.06.22.15; Mon, 05 Aug 2019 06:22:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kbYhn8VW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730096AbfHENV1 (ORCPT + 99 others); Mon, 5 Aug 2019 09:21:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:57562 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728851AbfHENVX (ORCPT ); Mon, 5 Aug 2019 09:21:23 -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 F0DB1216F4; Mon, 5 Aug 2019 13:21:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565011282; bh=FuBGDNNK8p8tYaQ8YF4Q3siKw/WfvD2wT8BfowIaAVU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kbYhn8VW0+oxmiY53kR2Zlyj9Ueen1iNfog1zO1z7kgsSluatYK9W2nswEy0nBQDS jB4f1m5+69oDWNmcXRE7s/jb2jDPby05LjHRq2t399w6Ak52J33TCToPzvYr5bLZuq pxh6Oe6PGl2G1xsIQ53ZVz/qwvwHOEWklDW4Afpk= 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 5.2 033/131] ceph: fix dir_lease_is_valid() Date: Mon, 5 Aug 2019 15:02:00 +0200 Message-Id: <20190805124953.649120015@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190805124951.453337465@linuxfoundation.org> References: <20190805124951.453337465@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 [ Upstream commit feab6ac25dbfe3ab96299cb741925dc8d2da0caf ] It should call __ceph_dentry_dir_lease_touch() under dentry->d_lock. Besides, ceph_dentry(dentry) can be NULL when called by LOOKUP_RCU d_revalidate() Signed-off-by: "Yan, Zheng" Reviewed-by: Jeff Layton Signed-off-by: Ilya Dryomov Signed-off-by: Sasha Levin --- fs/ceph/dir.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 0637149fb9f9a..1271024a3797a 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -1512,18 +1512,26 @@ static int __dir_lease_try_check(const struct dentry *dentry) static int dir_lease_is_valid(struct inode *dir, struct dentry *dentry) { struct ceph_inode_info *ci = ceph_inode(dir); - struct ceph_dentry_info *di = ceph_dentry(dentry); - int valid = 0; + int valid; + int shared_gen; spin_lock(&ci->i_ceph_lock); - if (atomic_read(&ci->i_shared_gen) == di->lease_shared_gen) - valid = __ceph_caps_issued_mask(ci, CEPH_CAP_FILE_SHARED, 1); + valid = __ceph_caps_issued_mask(ci, CEPH_CAP_FILE_SHARED, 1); + shared_gen = atomic_read(&ci->i_shared_gen); spin_unlock(&ci->i_ceph_lock); - if (valid) - __ceph_dentry_dir_lease_touch(di); - dout("dir_lease_is_valid dir %p v%u dentry %p v%u = %d\n", - dir, (unsigned)atomic_read(&ci->i_shared_gen), - dentry, (unsigned)di->lease_shared_gen, valid); + if (valid) { + struct ceph_dentry_info *di; + spin_lock(&dentry->d_lock); + di = ceph_dentry(dentry); + if (dir == d_inode(dentry->d_parent) && + di && di->lease_shared_gen == shared_gen) + __ceph_dentry_dir_lease_touch(di); + else + valid = 0; + spin_unlock(&dentry->d_lock); + } + dout("dir_lease_is_valid dir %p v%u dentry %p = %d\n", + dir, (unsigned)atomic_read(&ci->i_shared_gen), dentry, valid); return valid; } -- 2.20.1