From: Haodong Tang Date: Mon, 3 Jul 2017 05:16:02 +0000 (+0800) Subject: os/bluestore/BlueFS: don't need wait for aio when using _sync_write X-Git-Tag: v13.0.1~1160^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0f8880117db47618151be810e284ea8df3ef6c3b;p=ceph.git os/bluestore/BlueFS: don't need wait for aio when using _sync_write Signed-off-by: Haodong Tang --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 36f0b3cb0498..4942bbfdea0a 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -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 completed_ios; - _claim_completed_aios(log_writer, &completed_ios); + if (!cct->_conf->bluefs_sync_write) { + list 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& 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 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& 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& 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);