From: Yan, Zheng Date: Fri, 14 Jun 2019 09:32:42 +0000 (+0800) Subject: mds: don't mark cap NEEDSNAPFLUSH if client has no pending capsnap X-Git-Tag: v15.1.0~2431^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F28551%2Fhead;p=ceph.git 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" --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 0294e575245e..08494469d5a2 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(); }