From cf7eb8be34d8d91a84d6a062136de666c9b271da Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Sat, 28 Apr 2018 12:36:43 +0800 Subject: [PATCH] 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) --- src/client/Client.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/Client.cc b/src/client/Client.cc index d615a854e31d0..d87bd1e1bf10c 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2075,6 +2075,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; @@ -3893,6 +3897,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) << __func__ << " issued " << ccap_string(old_caps) << " -> " << ccap_string(cap.issued) << " from mds." << mds @@ -5028,6 +5033,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(); -- 2.39.5