From: Jianpeng Ma Date: Thu, 20 Aug 2015 07:38:58 +0000 (+0800) Subject: osdc/Objecter: For func op_cancel_writes it can directly call op_cancel. X-Git-Tag: v9.1.0~145^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e4ce619fe17a7a9dfc18e6af0b84928aa2d88c00;p=ceph.git osdc/Objecter: For func op_cancel_writes it can directly call op_cancel. Becasue we get write-lock of rwlock, so it is safe to call op_cancel rather than _op_canchel(homeless_session for this case don't met). Signed-off-by: Jianpeng Ma --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 53b3cdadfa3a..22c122372a46 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -2319,6 +2319,7 @@ epoch_t Objecter::op_cancel_writes(int r, int64_t pool) rwlock.get_write(); std::vector to_cancel; + bool found = false; for (map::iterator siter = osd_sessions.begin(); siter != osd_sessions.end(); ++siter) { OSDSession *s = siter->second; @@ -2330,19 +2331,22 @@ epoch_t Objecter::op_cancel_writes(int r, int64_t pool) } } s->lock.unlock(); - } - for (std::vector::iterator titer = to_cancel.begin(); titer != to_cancel.end(); ++titer) { - int cancel_result = _op_cancel(*titer, r); - // We hold rwlock across search and cancellation, so cancels should always succeed - assert(cancel_result == 0); + for (std::vector::iterator titer = to_cancel.begin(); titer != to_cancel.end(); ++titer) { + int cancel_result = op_cancel(s, *titer, r); + // We hold rwlock across search and cancellation, so cancels should always succeed + assert(cancel_result == 0); + } + if (!found && to_cancel.size()) + found = true; + to_cancel.clear(); } const epoch_t epoch = osdmap->get_epoch(); rwlock.unlock(); - if (to_cancel.size()) { + if (found) { return epoch; } else { return -1;