From 9e0775f99258d6a866465b99e2777bf8bcb2bff6 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Fri, 14 Jun 2019 17:32:42 +0800 Subject: [PATCH] mds: don't mark cap NEEDSNAPFLUSH if client has no pending capsnap This avoid getting wrlocks and setup client_snap_caps on snap inode. Because there is no further snapflush that triggers releasing these wrlocks. Fixes: https://tracker.ceph.com/issues/40361 Signed-off-by: "Yan, Zheng" --- src/mds/Locker.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 0294e575245..08494469d5a 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -2981,7 +2981,8 @@ void Locker::handle_client_caps(const cref_t &m) // client flushes and releases caps at the same time. make sure MDCache::cow_inode() // properly setup CInode::client_need_snapflush - if ((dirty & ~cap->issued()) && !need_snapflush) + if (!need_snapflush && (dirty & ~cap->issued()) && + (m->flags & MClientCaps::FLAG_PENDING_CAPSNAP)) cap->mark_needsnapflush(); } -- 2.47.3