]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: cleanup unsafe requests if MDS session is reset 1648/head
authorYan, Zheng <zheng.z.yan@intel.com>
Fri, 11 Apr 2014 08:42:42 +0000 (16:42 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Sun, 27 Apr 2014 13:40:06 +0000 (21:40 +0800)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/client/Client.cc

index 748a649a2270678183f9f902a346a07555e5020d..6e46d6da75129912eb0fae03f41aedccea097269 100644 (file)
@@ -2090,15 +2090,21 @@ void Client::kick_requests_closed(MetaSession *session)
 {
   ldout(cct, 10) << "kick_requests_closed for mds." << session->mds_num << dendl;
   for (map<ceph_tid_t, MetaRequest*>::iterator p = mds_requests.begin();
-       p != mds_requests.end();
-       ++p) {
-    if (p->second->mds == session->mds_num) {
-      if (p->second->caller_cond) {
-       p->second->kick = true;
-       p->second->caller_cond->Signal();
+       p != mds_requests.end(); ) {
+    MetaRequest *req = p->second;
+    ++p;
+    if (req->mds == session->mds_num) {
+      if (req->caller_cond) {
+       req->kick = true;
+       req->caller_cond->Signal();
+      }
+      req->item.remove_myself();
+      if (req->got_unsafe) {
+       lderr(cct) << "kick_requests_closed removing unsafe request " << req->get_tid() << dendl;
+       req->unsafe_item.remove_myself();
+       mds_requests.erase(req->get_tid());
+       put_request(req);
       }
-      p->second->item.remove_myself();
-      p->second->unsafe_item.remove_myself();
     }
   }
   assert(session->requests.empty());