]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FileJournal: For journal-aio-mode, don't use aio when closing journal.
authorMa Jianpeng <jianpeng.ma@intel.com>
Thu, 21 Aug 2014 07:10:46 +0000 (15:10 +0800)
committerSage Weil <sage@redhat.com>
Tue, 21 Oct 2014 13:55:20 +0000 (06:55 -0700)
For jouranl-aio-mode when closing journal, the write_finish_thread_entry may exit before
write_thread_entry. This cause no one wait last aios to complete.
On some platform, after that the journal-header on journal corrupted.
To avoid this, when closing jouranl we don't use aio.

Fixes: 9073
Reported-by: Mark Kirkwood <mark.kirkwood@catalyst.net.nz>
Tested-by: Mark Kirkwood <mark.kirkwood@catalyst.net.nz>
Signed-off-by: Ma Jianpeng <jianpeng.ma@intel.com>
(cherry picked from commit e870fd09ce846e5642db268c33bbe8e2e17ffef2)

src/os/FileJournal.cc

index 4b7971fa40c47a6e967c73ae6ab42a80b239e648..da930eb936ba2825525e34669671a1093733ed9c 100644 (file)
@@ -1125,7 +1125,9 @@ void FileJournal::write_thread_entry()
     }
     
 #ifdef HAVE_LIBAIO
-    if (aio) {
+    //We hope write_finish_thread_entry return until the last aios complete
+    //when set write_stop. But it can't. So don't use aio mode when shutdown.
+    if (aio && !write_stop) {
       Mutex::Locker locker(aio_lock);
       // should we back off to limit aios in flight?  try to do this
       // adaptively so that we submit larger aios once we have lots of
@@ -1176,7 +1178,7 @@ void FileJournal::write_thread_entry()
     }
 
 #ifdef HAVE_LIBAIO
-    if (aio)
+    if (aio && !write_stop)
       do_aio_write(bl);
     else
       do_write(bl);