]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FileJournal: signal aio_cond even if seq is 0
authorSage Weil <sage@redhat.com>
Wed, 20 Aug 2014 03:50:13 +0000 (20:50 -0700)
committerSage Weil <sage@redhat.com>
Tue, 21 Oct 2014 13:55:07 +0000 (06:55 -0700)
This can happen if we write a journal but no events.

Reported-by: Somnath Roy <somnath.roy@sandisk.com>
Reported-by: Ma, Jianpeng <jianpeng.ma@intel.com>
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 57778e2c577c1e1bbf9525232720a2994fa36abc)

src/os/FileJournal.cc

index 5649e6da60504fcb0cd1892d6468a97ff6b92209..e3bd8e90f0b0b6c231609124ead0402708d44ae7 100644 (file)
@@ -1377,7 +1377,7 @@ void FileJournal::check_aio_completion()
   assert(aio_lock.is_locked());
   dout(20) << "check_aio_completion" << dendl;
 
-  bool completed_something = false;
+  bool completed_something = false, signal = false;
   uint64_t new_journaled_seq = 0;
 
   list<aio_info>::iterator p = aio_queue.begin();
@@ -1391,6 +1391,7 @@ void FileJournal::check_aio_completion()
     aio_num--;
     aio_bytes -= p->len;
     aio_queue.erase(p++);
+    signal = true;
   }
 
   if (completed_something) {
@@ -1410,7 +1411,8 @@ void FileJournal::check_aio_completion()
        queue_completions_thru(journaled_seq);
       }
     }
-
+  }
+  if (signal) {
     // maybe write queue was waiting for aio count to drop?
     aio_cond.Signal();
   }