From: Yan, Zheng Date: Fri, 11 Apr 2014 07:34:25 +0000 (+0800) Subject: client: drop dirty/flushing caps if auth MDS' session is reset X-Git-Tag: v0.81~105^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b8aa58af793bea4ed1a150ac5bf554fc894774f1;p=ceph.git client: drop dirty/flushing caps if auth MDS' session is reset Signed-off-by: Yan, Zheng --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 47d1c1d4620b..b3c4b7628ee7 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3075,12 +3075,27 @@ void Client::remove_all_caps(Inode *in) remove_cap(in->caps.begin()->second, true); } -void Client::remove_session_caps(MetaSession *mds) +void Client::remove_session_caps(MetaSession *s) { - while (mds->caps.size()) { - Cap *cap = *mds->caps.begin(); + ldout(cct, 10) << "remove_session_caps mds." << s->mds_num << dendl; + + while (s->caps.size()) { + Cap *cap = *s->caps.begin(); + Inode *in = cap->inode; + int dirty_caps = 0; + if (in->auth_cap == cap) + dirty_caps = in->dirty_caps | in->flushing_caps; remove_cap(cap, false); + if (dirty_caps) { + lderr(cct) << "remove_session_caps still has dirty|flushing caps on " << *in << dendl; + if (in->flushing_caps) + num_flushing_caps--; + in->flushing_caps = 0; + in->dirty_caps = 0; + put_inode(in); + } } + sync_cond.Signal(); } void Client::trim_caps(MetaSession *s, int max)