From: Jason Dillaman Date: Tue, 21 Apr 2015 13:54:53 +0000 (-0400) Subject: librbd: AsyncRequest is now optional for AsyncObjectThrottle X-Git-Tag: v9.0.2~225^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6511eb071f97144177bed82e983e8b6990255d62;p=ceph.git librbd: AsyncRequest is now optional for AsyncObjectThrottle Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/AsyncFlattenRequest.cc b/src/librbd/AsyncFlattenRequest.cc index 06020f277ee..79a96d57c26 100644 --- a/src/librbd/AsyncFlattenRequest.cc +++ b/src/librbd/AsyncFlattenRequest.cc @@ -100,7 +100,7 @@ void AsyncFlattenRequest::send() { boost::lambda::_1, &m_image_ctx, m_object_size, m_snapc, boost::lambda::_2)); AsyncObjectThrottle *throttle = new AsyncObjectThrottle( - *this, context_factory, create_callback_context(), &m_prog_ctx, 0, + this, context_factory, create_callback_context(), &m_prog_ctx, 0, m_overlap_objects); throttle->start_ops(m_image_ctx.concurrent_management_ops); } diff --git a/src/librbd/AsyncObjectThrottle.cc b/src/librbd/AsyncObjectThrottle.cc index 3274f1618df..7c02e03920e 100644 --- a/src/librbd/AsyncObjectThrottle.cc +++ b/src/librbd/AsyncObjectThrottle.cc @@ -7,7 +7,7 @@ namespace librbd { -AsyncObjectThrottle::AsyncObjectThrottle(const AsyncRequest& async_request, +AsyncObjectThrottle::AsyncObjectThrottle(const AsyncRequest* async_request, const ContextFactory& context_factory, Context *ctx, ProgressContext *prog_ctx, uint64_t object_no, @@ -58,7 +58,8 @@ void AsyncObjectThrottle::finish_op(int r) { void AsyncObjectThrottle::start_next_op() { bool done = false; while (!done) { - if (m_async_request.is_canceled() && m_ret == 0) { + if (m_async_request != NULL && m_async_request->is_canceled() && + m_ret == 0) { // allow in-flight ops to complete, but don't start new ops m_ret = -ERESTART; return; diff --git a/src/librbd/AsyncObjectThrottle.h b/src/librbd/AsyncObjectThrottle.h index 892c4234251..3ac9561dc94 100644 --- a/src/librbd/AsyncObjectThrottle.h +++ b/src/librbd/AsyncObjectThrottle.h @@ -43,7 +43,7 @@ public: typedef boost::function ContextFactory; - AsyncObjectThrottle(const AsyncRequest &async_request, + AsyncObjectThrottle(const AsyncRequest *async_request, const ContextFactory& context_factory, Context *ctx, ProgressContext *prog_ctx, uint64_t object_no, uint64_t end_object_no); @@ -53,7 +53,7 @@ public: private: Mutex m_lock; - const AsyncRequest &m_async_request; + const AsyncRequest *m_async_request; ContextFactory m_context_factory; Context *m_ctx; ProgressContext *m_prog_ctx; diff --git a/src/librbd/AsyncTrimRequest.cc b/src/librbd/AsyncTrimRequest.cc index e2ebeadba73..e403be2593f 100644 --- a/src/librbd/AsyncTrimRequest.cc +++ b/src/librbd/AsyncTrimRequest.cc @@ -149,7 +149,7 @@ void AsyncTrimRequest::send_remove_objects() { boost::lambda::bind(boost::lambda::new_ptr(), boost::lambda::_1, &m_image_ctx, boost::lambda::_2)); AsyncObjectThrottle *throttle = new AsyncObjectThrottle( - *this, context_factory, ctx, &m_prog_ctx, m_delete_start, m_num_objects); + this, context_factory, ctx, &m_prog_ctx, m_delete_start, m_num_objects); throttle->start_ops(m_image_ctx.concurrent_management_ops); } diff --git a/src/librbd/RebuildObjectMapRequest.cc b/src/librbd/RebuildObjectMapRequest.cc index 4cddbaf5f75..4c7c562d557 100644 --- a/src/librbd/RebuildObjectMapRequest.cc +++ b/src/librbd/RebuildObjectMapRequest.cc @@ -321,7 +321,7 @@ void RebuildObjectMapRequest::send_verify_objects() { boost::lambda::bind(boost::lambda::new_ptr(), boost::lambda::_1, &m_image_ctx, snap_id, boost::lambda::_2)); AsyncObjectThrottle *throttle = new AsyncObjectThrottle( - *this, context_factory, create_callback_context(), &m_prog_ctx, 0, + this, context_factory, create_callback_context(), &m_prog_ctx, 0, num_objects); throttle->start_ops(cct->_conf->rbd_concurrent_management_ops); }