From: David Zafman Date: Thu, 27 Sep 2018 02:03:34 +0000 (-0700) Subject: osd: Handle is_stopping() by discarding item so it doesn't loop X-Git-Tag: v14.0.1~54^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2e75fb7d320f0081835cdfebd7572863af5d6af2;p=ceph.git osd: Handle is_stopping() by discarding item so it doesn't loop Fixes: http://tracker.ceph.com/issues/36105 Caused by: d7ca34e12fd9dd652fe12b5593bf2ccd4ce35b60 Signed-off-by: David Zafman --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index aedbc459fa5d..f7089d6fc0ed 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -10225,23 +10225,26 @@ void OSD::ShardedOpWQ::_process(uint32_t thread_index, heartbeat_handle_d *hb) } } - if (osd->is_stopping()) { - sdata->shard_lock.Unlock(); - return; // OSD shutdown, discard. - } - list oncommits; if (is_smallest_thread_index && !sdata->context_queue.empty()) { sdata->context_queue.swap(oncommits); } if (sdata->pqueue->empty()) { + if (osd->is_stopping()) { + sdata->shard_lock.Unlock(); + return; // OSD shutdown, discard. + } sdata->shard_lock.Unlock(); handle_oncommits(oncommits); return; } OpQueueItem item = sdata->pqueue->dequeue(); + if (osd->is_stopping()) { + sdata->shard_lock.Unlock(); + return; // OSD shutdown, discard. + } const auto token = item.get_ordering_token(); auto r = sdata->pg_slots.emplace(token, nullptr);