diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index b94ae7651d4..24d4a4ef7dd 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -1187,6 +1187,11 @@ void BlueFS::_compact_log_async(std::unique_lock& l) assert(!new_log); assert(!new_log_writer); + // create a new log [writer] so that we know compaction is in progress + // (see _should_compact_log) + new_log = new File; + new_log->fnode.ino = 0; // so that _flush_range won't try to log the fnode + // 1. allocate new log space and jump to it. old_log_jump_to = log_file->fnode.get_allocated(); uint64_t need = old_log_jump_to + cct->_conf->bluefs_max_log_runway; @@ -1228,9 +1233,7 @@ void BlueFS::_compact_log_async(std::unique_lock& l) dout(10) << __func__ << " new_log_jump_to 0x" << std::hex << new_log_jump_to << std::dec << dendl; - // create a new log [writer] - new_log = new File; - new_log->fnode.ino = 0; // so that _flush_range won't try to log the fnode + // allocate int r = _allocate(BlueFS::BDEV_DB, new_log_jump_to, &new_log->fnode.extents); assert(r == 0);