]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/exclusive_lock/PreReleaseRequest.cc
update sources to v12.1.1
[ceph.git] / ceph / src / librbd / exclusive_lock / PreReleaseRequest.cc
index 5a37acc96a53301a06e39c4a97e19d18a38166a7..504de0f0b93f9ae39bf1ec58c652d2ca80faf59e 100644 (file)
@@ -109,8 +109,13 @@ void PreReleaseRequest<I>::send_block_writes() {
 
   {
     RWLock::RLocker owner_locker(m_image_ctx.owner_lock);
-    if (m_image_ctx.test_features(RBD_FEATURE_JOURNALING)) {
-      m_image_ctx.io_work_queue->set_require_lock_on_read();
+    // setting the lock as required will automatically cause the IO
+    // queue to re-request the lock if any IO is queued
+    if (m_image_ctx.clone_copy_on_read ||
+        m_image_ctx.test_features(RBD_FEATURE_JOURNALING)) {
+      m_image_ctx.io_work_queue->set_require_lock(io::DIRECTION_BOTH, true);
+    } else {
+      m_image_ctx.io_work_queue->set_require_lock(io::DIRECTION_WRITE, true);
     }
     m_image_ctx.io_work_queue->block_writes(ctx);
   }