From: Yan, Zheng Date: Wed, 22 Feb 2017 08:25:57 +0000 (+0800) Subject: client: drop cap snaps when auth mds session gets closed X-Git-Tag: v12.0.2~62^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cb336f2e10c86ed5b9a22ec44a191e22929676a3;p=ceph.git client: drop cap snaps when auth mds session gets closed Fixes: http://tracker.ceph.com/issues/19022 Signed-off-by: "Yan, Zheng" --- diff --git a/src/client/Client.cc b/src/client/Client.cc index c52d97a25d15..be3d13e44679 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3908,8 +3908,9 @@ void Client::remove_session_caps(MetaSession *s) while (s->caps.size()) { Cap *cap = *s->caps.begin(); Inode *in = cap->inode; - int dirty_caps = 0; + bool dirty_caps = false, cap_snaps = false; if (in->auth_cap == cap) { + cap_snaps = !in->cap_snaps.empty(); dirty_caps = in->dirty_caps | in->flushing_caps; in->wanted_max_size = 0; in->requested_max_size = 0; @@ -3917,6 +3918,10 @@ void Client::remove_session_caps(MetaSession *s) } remove_cap(cap, false); signal_cond_list(in->waitfor_caps); + if (cap_snaps) { + InodeRef tmp_ref(in); + in->cap_snaps.clear(); + } if (dirty_caps) { lderr(cct) << "remove_session_caps still has dirty|flushing caps on " << *in << dendl; if (in->flushing_caps) {