From: Alexey Sheplyakov Date: Tue, 27 Jun 2017 12:07:01 +0000 (+0400) Subject: kraken: osd: unlock sdata_op_ordering_lock with sdata_lock hold to avoid missing... X-Git-Tag: v11.2.1~82^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ff19977fbc4cf4a787af80b6c0457df932004fd3;p=ceph.git kraken: osd: unlock sdata_op_ordering_lock with sdata_lock hold to avoid missing wakeup signal Based on commit bc683385819146f3f6f096ceec97e1226a3cd237. The OSD code has been refactored a lot since Kraken, hence cherry-picking that patch introduces a lot of unrelated changes, and is much more difficult than reusing the idea. Fixes: http://tracker.ceph.com/issues/20443 Signed-off-by: Alexey Sheplyakov --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 134b141f542..4f94cca55ef 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8892,10 +8892,10 @@ void OSD::ShardedOpWQ::_process(uint32_t thread_index, heartbeat_handle_d *hb ) assert(NULL != sdata); sdata->sdata_op_ordering_lock.Lock(); if (sdata->pqueue->empty()) { - sdata->sdata_op_ordering_lock.Unlock(); osd->cct->get_heartbeat_map()->reset_timeout(hb, osd->cct->_conf->threadpool_default_timeout, 0); sdata->sdata_lock.Lock(); + sdata->sdata_op_ordering_lock.Unlock(); sdata->sdata_cond.WaitInterval(sdata->sdata_lock, utime_t(osd->cct->_conf->threadpool_empty_queue_max_wait, 0)); sdata->sdata_lock.Unlock();