]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueFS: don't need wait for aio when using _sync_write 16066/head
authorHaodong Tang <haodong.tang@intel.com>
Mon, 3 Jul 2017 05:16:02 +0000 (13:16 +0800)
committerHaodong Tang <haodong.tang@intel.com>
Tue, 11 Jul 2017 15:31:22 +0000 (23:31 +0800)
Signed-off-by: Haodong Tang <haodong.tang@intel.com>
src/os/bluestore/BlueFS.cc

index 36f0b3cb0498701585c6eddf1b71eccb6a49d21d..4942bbfdea0a7d55ce5aebc2aa9b5458bcf048c8 100644 (file)
@@ -1136,12 +1136,13 @@ void BlueFS::_compact_log_sync()
   log_writer->append(bl);
   int r = _flush(log_writer, true);
   assert(r == 0);
-  wait_for_aio(log_writer);
-
-  list<aio_t> completed_ios;
-  _claim_completed_aios(log_writer, &completed_ios);
+  if (!cct->_conf->bluefs_sync_write) {
+    list<aio_t> completed_ios;
+    _claim_completed_aios(log_writer, &completed_ios);
+    wait_for_aio(log_writer);
+    completed_ios.clear();
+  }
   flush_bdev();
-  completed_ios.clear();
 
   dout(10) << __func__ << " writing super" << dendl;
   super.log_fnode = log_file->fnode;
@@ -1240,21 +1241,11 @@ void BlueFS::_compact_log_async(std::unique_lock<std::mutex>& l)
   // 3. flush
   r = _flush(new_log_writer, true);
   assert(r == 0);
-  lock.unlock();
 
   // 4. wait
-  dout(10) << __func__ << " waiting for compacted log to sync" << dendl;
-  wait_for_aio(new_log_writer);
-
-  list<aio_t> completed_ios;
-  _claim_completed_aios(new_log_writer, &completed_ios);
-  flush_bdev();
-  completed_ios.clear();
-
-  // 5. retake lock
-  lock.lock();
+  _flush_bdev_safely(new_log_writer);
 
-  // 6. update our log fnode
+  // 5. update our log fnode
   // discard first old_log_jump_to extents
   dout(10) << __func__ << " remove 0x" << std::hex << old_log_jump_to << std::dec
           << " of " << log_file->fnode.extents << dendl;
@@ -1293,7 +1284,7 @@ void BlueFS::_compact_log_async(std::unique_lock<std::mutex>& l)
   log_writer->pos = log_writer->file->fnode.size =
     log_writer->pos - old_log_jump_to + new_log_jump_to;
 
-  // 7. write the super block to reflect the changes
+  // 6. write the super block to reflect the changes
   dout(10) << __func__ << " writing super" << dendl;
   super.log_fnode = log_file->fnode;
   ++super.version;
@@ -1303,7 +1294,7 @@ void BlueFS::_compact_log_async(std::unique_lock<std::mutex>& l)
   flush_bdev();
   lock.lock();
 
-  // 8. release old space
+  // 7. release old space
   dout(10) << __func__ << " release old log extents " << old_extents << dendl;
   for (auto& r : old_extents) {
     pending_release[r.bdev].insert(r.offset, r.length);