From 8ddbb7278b024629a8e2ba2f83facad6a653a7b2 Mon Sep 17 00:00:00 2001 From: shenhang Date: Thu, 27 Feb 2020 14:01:39 +0800 Subject: [PATCH] mds: Using begin() and empty() to iterate the xlist 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 (cherry picked from commit 432ea90a670d093fcb00edb21432d708ce61c7b1) --- src/mds/MDCache.cc | 3 ++- src/mds/Server.cc | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 952c54018ee3..b4d9053473ee 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 56521c754a0d..39674c815ac6 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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); } -- 2.47.3