From: Yan, Zheng Date: Sat, 28 Apr 2018 04:36:43 +0000 (+0800) Subject: client: invalidate caps and leases when session becomes stale X-Git-Tag: v12.2.6~66^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cc28b22c394af4e864ae18f16acfa6a4840cf860;p=ceph.git client: invalidate caps and leases when session becomes stale Signed-off-by: "Yan, Zheng" Fixes: https://tracker.ceph.com/issues/23894 (cherry picked from commit 8b2e7d834ccf2a4ff6c7aa3d4aeee07ebe36fb59) Conflicts: src/client/Client.cc : Resolved in add_update_cap --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 0e5d9c17db81..eb36d42b9388 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2076,6 +2076,10 @@ void Client::handle_client_session(MClientSession *m) break; case CEPH_SESSION_STALE: + // invalidate session caps/leases + session->cap_gen++; + session->cap_ttl = ceph_clock_now(); + session->cap_ttl -= 1; renew_caps(session); break; @@ -3925,6 +3929,7 @@ void Client::add_update_cap(Inode *in, MetaSession *mds_session, uint64_t cap_id cap->seq = seq; cap->issue_seq = seq; cap->mseq = mseq; + cap->gen = mds_session->cap_gen; cap->latest_perms = cap_perms; ldout(cct, 10) << "add_update_cap issued " << ccap_string(old_caps) << " -> " << ccap_string(cap->issued) << " from mds." << mds @@ -5041,6 +5046,7 @@ void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, MClient << " caps now " << ccap_string(new_caps) << " was " << ccap_string(old_caps) << dendl; cap->seq = m->get_seq(); + cap->gen = session->cap_gen; in->layout = m->get_layout();