]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: invalidate caps and leases when session becomes stale
authorYan, Zheng <zyan@redhat.com>
Sat, 28 Apr 2018 04:36:43 +0000 (12:36 +0800)
committerPrashant D <pdhange@redhat.com>
Mon, 21 May 2018 11:14:29 +0000 (07:14 -0400)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Fixes: https://tracker.ceph.com/issues/23894
(cherry picked from commit 8b2e7d834ccf2a4ff6c7aa3d4aeee07ebe36fb59)

Conflicts:
src/client/Client.cc : Resolved in add_update_cap

src/client/Client.cc

index 0e5d9c17db814e40945fb0c546dc2a6871ea0287..eb36d42b93885752138365848b322ffc8228ee07 100644 (file)
@@ -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();