From 2b14041365cfffab8938d9b7f500edcf97ebfca4 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 432ea90) Conflicts: src/mds/Server.cc --- src/mds/MDCache.cc | 3 ++- src/mds/Server.cc | 8 ++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 6a44598f176..819601e76af 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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); diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 874b456058c..fc7fe821264 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -966,12 +966,8 @@ void Server::journal_close_session(Session *session, int state, Context *on_safe mdlog->flush(); // clean up requests, too - elist::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); } -- 2.47.3