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;
// 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;
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;
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);