2024年1月21日发(作者:)
FLUSHint NVMEDevice::flush(){ ... SharedDriverQueueData *queue = driver->get_queue(queue_id); assert(queue != NULL); queue->flush_wait(); ...}// SharedDriverQueueData的flush_wait()实现 void flush_wait() {
uint64_t cur_seq = queue_op_(); uint64_t left = cur_seq - completed_op_(); if (cur_seq > completed_op_seq) { // 存在在途IO,则等待,在_aio_thread()中处理完在途IO后会唤醒本flush线程, // 唤醒后再次检查queue_op_seq和completed_op_seq,确认没有在途IO后,flush才能返回 Mutex::Locker l(flush_lock); ++flush_waiters; flush_waiter_(cur_seq); while (cur_seq > completed_op_()) { flush_(flush_lock); } flush_waiter_(cur_seq); --flush_waiters;
}
}


发布评论