]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: assign a unique flush source to each internal component
authorJason Dillaman <dillaman@redhat.com>
Thu, 17 Sep 2020 13:51:49 +0000 (09:51 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 18 Sep 2020 03:52:31 +0000 (23:52 -0400)
This will allow improved tracking and bypassing of a flush request
that might cause IO deadlocks in dispatch layers.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/exclusive_lock/ImageDispatch.cc
src/librbd/image/CloseRequest.cc
src/librbd/image/RefreshRequest.cc
src/librbd/io/Types.h
src/librbd/io/WriteBlockImageDispatch.cc

index 87007c60a73fed524a29f582c3f2da144673494e..fe3ab14bace24e3fb6805965443e50e98925297a 100644 (file)
@@ -72,7 +72,7 @@ void ImageDispatch<I>::set_require_lock(io::Direction direction,
     on_finish, util::get_image_ctx(m_image_ctx), io::AIO_TYPE_FLUSH);
   auto req = io::ImageDispatchSpec::create_flush(
     *m_image_ctx, io::IMAGE_DISPATCH_LAYER_EXCLUSIVE_LOCK, aio_comp,
-    io::FLUSH_SOURCE_INTERNAL, {});
+    io::FLUSH_SOURCE_EXCLUSIVE_LOCK, {});
   req->send();
 }
 
index 04f8b6f630b5fca5f4cbdbf553306c00f299e2ff..7293687f5b81cfe00deff0d4608443fba4bfdb41 100644 (file)
@@ -105,7 +105,7 @@ void CloseRequest<I>::send_flush() {
                                                       io::AIO_TYPE_FLUSH);
   auto req = io::ImageDispatchSpec::create_flush(
     *m_image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
-    io::FLUSH_SOURCE_INTERNAL, {});
+    io::FLUSH_SOURCE_SHUTDOWN, {});
   req->send();
 }
 
index 735d701b61a1ca18bea4b846b3e0d198609db861..b66f375315f14e8f1b485d772299a6c4110206de 100644 (file)
@@ -1246,8 +1246,8 @@ Context *RefreshRequest<I>::send_flush_aio() {
     auto aio_comp = io::AioCompletion::create_and_start(
       ctx, util::get_image_ctx(&m_image_ctx), io::AIO_TYPE_FLUSH);
     auto req = io::ImageDispatchSpec::create_flush(
-      m_image_ctx, io::IMAGE_DISPATCH_LAYER_INTERNAL_START, aio_comp,
-      io::FLUSH_SOURCE_INTERNAL, {});
+      m_image_ctx, io::IMAGE_DISPATCH_LAYER_REFRESH, aio_comp,
+      io::FLUSH_SOURCE_REFRESH, {});
     req->send();
     return nullptr;
   } else if (m_error_result < 0) {
index 66a7635cd53210cf5d3f6afab0c0dc3fb8e3361c..6193e2f5a09875b396bddb26fd8d5db47eec9e37 100644 (file)
@@ -31,7 +31,11 @@ enum FlushSource {
   FLUSH_SOURCE_USER,
   FLUSH_SOURCE_INTERNAL,
   FLUSH_SOURCE_SHUTDOWN,
-  FLUSH_SOURCE_WRITEBACK
+  FLUSH_SOURCE_EXCLUSIVE_LOCK,
+  FLUSH_SOURCE_EXCLUSIVE_LOCK_SKIP_REFRESH,
+  FLUSH_SOURCE_REFRESH,
+  FLUSH_SOURCE_WRITEBACK,
+  FLUSH_SOURCE_WRITE_BLOCK,
 };
 
 enum Direction {
index e489524995da36fb02abd3527cbd6e405f027c4b..729ecc5e60041c87bd4b93b528b74597caf96552 100644 (file)
@@ -254,7 +254,7 @@ void WriteBlockImageDispatch<I>::flush_io(Context* on_finish) {
     on_finish, util::get_image_ctx(m_image_ctx), librbd::io::AIO_TYPE_FLUSH);
   auto req = ImageDispatchSpec::create_flush(
     *m_image_ctx, IMAGE_DISPATCH_LAYER_WRITE_BLOCK, aio_comp,
-    FLUSH_SOURCE_INTERNAL, {});
+    FLUSH_SOURCE_WRITE_BLOCK, {});
   req->send();
 }