]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: don't embed cap releases in clientreplay
authorSam Lang <sam.lang@inktank.com>
Thu, 25 Apr 2013 23:52:06 +0000 (18:52 -0500)
committerSage Weil <sage@inktank.com>
Fri, 26 Apr 2013 16:51:45 +0000 (09:51 -0700)
If the client is sending replay requests, avoid sending embedded caps,
since the mds already has the client's caps from the reconnect.
This matches the behavior of the kernel client.

Fixes #4742.
Signed-off-by: Sam Lang <sam.lang@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/client/Client.cc

index 3bc8c5bfa9a038939b6bc7ca3512fdd08316e3a5..23529f9b92cacf5559aba24f49e2e5118e2be7e9 100644 (file)
@@ -1574,15 +1574,16 @@ void Client::send_request(MetaRequest *request, MetaSession *session)
   ldout(cct, 10) << "send_request rebuilding request " << request->get_tid()
                 << " for mds." << mds << dendl;
   MClientRequest *r = build_client_request(request);
-  if (request->dentry())
+  if (request->dentry()) {
     r->set_dentry_wanted();
-  if (request->got_unsafe)
+  }
+  if (request->got_unsafe) {
     r->set_replayed_op();
+    encode_cap_releases(request, mds);
+    r->releases.swap(request->cap_releases);
+  }
   r->set_mdsmap_epoch(mdsmap->get_epoch());
 
-  encode_cap_releases(request, mds);
-  r->releases.swap(request->cap_releases);
-
   if (request->mds == -1) {
     request->sent_stamp = ceph_clock_now(cct);
     ldout(cct, 20) << "send_request set sent_stamp to " << request->sent_stamp << dendl;