From 6be12f22a55ed3d179d1c93be1190a05fd03d80c Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 29 Apr 2019 11:37:37 -0400 Subject: [PATCH] librbd: remove special case for starting AioCompletion ops All ops can be immediately started now that flush ops won't accidentally block themselves. Signed-off-by: Jason Dillaman (cherry picked from commit b5fc7ecaf7a3741d227ab5a9108392813dd03495) Conflicts: src/librbd/api/DiffIterate.cc: dropped changes src/librbd/image/CloseRequest.cc: dropped changes src/librbd/image/RefreshRequest.cc: dropped changes src/librbd/io/AioCompletion.cc: assert/ceph_assert conflicts src/librbd/io/ImageRequest.cc:: assert/ceph_assert conflicts src/librbd/io/ImageRequestWQ.cc: trivial resolution src/librbd/operation/ResizeRequest.cc: dropped changes src/test/librbd/journal/test_Replay.cc: dropped changes src/test/rbd_mirror/test_ImageSync.cc: dropped changes --- src/librbd/io/AioCompletion.cc | 9 +++------ src/librbd/io/AioCompletion.h | 2 +- src/librbd/io/ImageRequest.cc | 3 +-- src/librbd/io/ImageRequestWQ.cc | 1 + 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/librbd/io/AioCompletion.cc b/src/librbd/io/AioCompletion.cc index 82ed60faa93..e28df5e334c 100644 --- a/src/librbd/io/AioCompletion.cc +++ b/src/librbd/io/AioCompletion.cc @@ -127,20 +127,17 @@ void AioCompletion::init_time(ImageCtx *i, aio_type_t t) { } } -void AioCompletion::start_op(bool ignore_type) { +void AioCompletion::start_op() { Mutex::Locker locker(lock); assert(ictx != nullptr); - assert(!async_op.started()); if (aio_type == AIO_TYPE_OPEN || aio_type == AIO_TYPE_CLOSE) { // no need to track async open/close operations return; } - if (state == AIO_STATE_PENDING && - (ignore_type || aio_type != AIO_TYPE_FLUSH)) { - async_op.start_op(*ictx); - } + assert(!async_op.started()); + async_op.start_op(*ictx); } void AioCompletion::fail(int r) diff --git a/src/librbd/io/AioCompletion.h b/src/librbd/io/AioCompletion.h index 6673b66c70f..a6e422e7ba4 100644 --- a/src/librbd/io/AioCompletion.h +++ b/src/librbd/io/AioCompletion.h @@ -123,7 +123,7 @@ struct AioCompletion { } void init_time(ImageCtx *i, aio_type_t t); - void start_op(bool ignore_type = false); + void start_op(); void fail(int r); void complete(); diff --git a/src/librbd/io/ImageRequest.cc b/src/librbd/io/ImageRequest.cc index cff22f7c016..0e56346c2dd 100644 --- a/src/librbd/io/ImageRequest.cc +++ b/src/librbd/io/ImageRequest.cc @@ -222,7 +222,7 @@ template void ImageRequest::send() { I &image_ctx = this->m_image_ctx; assert(m_aio_comp->is_initialized(get_aio_type())); - assert(m_aio_comp->is_started() ^ (get_aio_type() == AIO_TYPE_FLUSH)); + assert(m_aio_comp->is_started()); CephContext *cct = image_ctx.cct; AioCompletion *aio_comp = this->m_aio_comp; @@ -715,7 +715,6 @@ void ImageFlushRequest::send_request() { } // ensure all in-flight IOs are settled if non-user flush request - aio_comp->start_op(true); aio_comp->async_op.flush(ctx); aio_comp->put(); diff --git a/src/librbd/io/ImageRequestWQ.cc b/src/librbd/io/ImageRequestWQ.cc index fe2a39bd7fb..39af765be7d 100644 --- a/src/librbd/io/ImageRequestWQ.cc +++ b/src/librbd/io/ImageRequestWQ.cc @@ -335,6 +335,7 @@ void ImageRequestWQ::aio_flush(AioCompletion *c, bool native_async) { if (m_image_ctx.non_blocking_aio || writes_blocked() || !writes_empty()) { queue(ImageRequest::create_flush_request(m_image_ctx, c, trace)); } else { + c->start_op(); ImageRequest::aio_flush(&m_image_ctx, c, trace); finish_in_flight_io(); } -- 2.47.3