]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fix missing write block validation in IO work queue 15860/head
authorJason Dillaman <dillaman@redhat.com>
Tue, 27 Jun 2017 19:51:54 +0000 (15:51 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 27 Jun 2017 20:39:56 +0000 (16:39 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/io/ImageRequestWQ.cc

index 4ed38eadeb3f6c60e891c1b5b13ffefca9191497..e80e90088d2a7fd759c1415bc43c21e68a305382 100644 (file)
@@ -467,9 +467,16 @@ void *ImageRequestWQ<I>::_void_dequeue() {
     RWLock::RLocker locker(m_lock);
     bool write_op = peek_item->is_write_op();
     lock_required = is_lock_required(write_op);
-    if (write_op && !lock_required && !refresh_required) {
-      // completed ops will requeue the IO -- don't count it as in-progress
-      m_in_flight_writes++;
+    if (write_op) {
+      if (!lock_required && m_write_blockers > 0) {
+        // missing lock is not the write blocker
+        return nullptr;
+      }
+
+      if (!lock_required && !refresh_required) {
+        // completed ops will requeue the IO -- don't count it as in-progress
+        m_in_flight_writes++;
+      }
     }
   }