]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Using begin() and empty() to iterate the xlist 34338/head
authorshenhang <shenhang@kuaishou.com>
Thu, 27 Feb 2020 06:01:39 +0000 (14:01 +0800)
committerVicente Cheng <freeze.bilsted@gmail.com>
Fri, 10 Apr 2020 07:04:51 +0000 (07:04 +0000)
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 commit 432ea90a670d093fcb00edb21432d708ce61c7b1)

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

index 952c54018ee377816f10d8600f390dde69120476..b4d9053473ee06f3aed97cb5513a6f07801a615c 100644 (file)
@@ -9573,7 +9573,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 56521c754a0dc6a4c33e63a325ab21dd16b9a269..39674c815ac6b01e5e5d48b8c61d85a96c526323 100644 (file)
@@ -1205,9 +1205,8 @@ void Server::journal_close_session(Session *session, int state, Context *on_safe
   mdlog->flush();
 
   // clean up requests, too
-  for (auto p = session->requests.begin(); !p.end(); ) {
-    MDRequestRef mdr(*p);
-    ++p;
+  while(!session->requests.empty()) {
+    auto mdr = MDRequestRef(*session->requests.begin());
     mdcache->request_kill(mdr);
   }