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)
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);
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);
}