]> 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>
Wed, 20 Aug 2014 15:31:52 +0000 (08:31 -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>
src/os/FileJournal.cc

index b347674b5e3ad1070d20b4c3ffa0a706c9703826..a3305fba066677837b135988b023decd5fe03953 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();
   }