All ops can be immediately started now that flush ops won't
accidentally block themselves.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(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
}
}
-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)
}
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();
void ImageRequest<I>::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;
}
// 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();
if (m_image_ctx.non_blocking_aio || writes_blocked() || !writes_empty()) {
queue(ImageRequest<I>::create_flush_request(m_image_ctx, c, trace));
} else {
+ c->start_op();
ImageRequest<I>::aio_flush(&m_image_ctx, c, trace);
finish_in_flight_io();
}