]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Using begin() and empty() to iterate the xlist 34937/head
authorshenhang <shenhang@kuaishou.com>
Thu, 27 Feb 2020 06:01:39 +0000 (14:01 +0800)
committerSidharth Anupkrishnan <sanupkri@redhat.com>
Wed, 6 May 2020 22:20:42 +0000 (03:50 +0530)
Fixes: https://tracker.ceph.com/issues/44316
The item p pointed to maybe cleaned during the process
 of request_kill previous one.

Signed-off-by: Shen Hang <harryshen18@gmail.com>
(cherry picked from 432ea90)

 Conflicts:
       src/mds/Server.cc

src/mds/MDCache.cc
src/mds/Server.cc

index 6a44598f1769a11d863c9962e27eb9f714b8217d..819601e76af197ecdc1495eda89758c3aa3691b2 100644 (file)
@@ -9470,7 +9470,8 @@ void MDCache::request_kill(MDRequestRef& mdr)
   mdr->mark_event("killing request");
 
   if (mdr->committing) {
-    dout(10) << "request_kill " << *mdr << " -- already committing, no-op" << dendl;
+    dout(10) << "request_kill " << *mdr << " -- already committing, remove it from sesssion requests" << dendl;
+    mdr->item_session_request.remove_myself();
   } else {
     dout(10) << "request_kill " << *mdr << dendl;
     request_cleanup(mdr);
index 874b456058c10c2a6f8652e21cd59523ccfb86fa..fc7fe821264aee7008f364963cea9d41031d9ea6 100644 (file)
@@ -966,12 +966,8 @@ void Server::journal_close_session(Session *session, int state, Context *on_safe
   mdlog->flush();
 
   // clean up requests, too
-  elist<MDRequestImpl*>::iterator p =
-    session->requests.begin(member_offset(MDRequestImpl,
-                                         item_session_request));
-  while (!p.end()) {
-    MDRequestRef mdr = mdcache->request_get((*p)->reqid);
-    ++p;
+  while(!session->requests.empty()) {
+    auto mdr = MDRequestRef(*session->requests.begin());
     mdcache->request_kill(mdr);
   }