【linux内核】linux 同步机制之complete
linux 同步机制之complete
用户线程(提交请求) Ceph 内核通信线程(网络回调)
─────────────────────────────── ───────────────────────────────
1. init_completion(&req->completion)
初始化 completion 对象
done = 0
wait 队列为空
2. ceph_osdc_start_request(req)
│
│ 发送请求到 OSD
│
▼
3. wait_for_completion_killable_timeout(&req->completion, timeout)
│
│ → 检查 req->completion.done == 0 ?
│ 是 → 当前线程进入睡眠状态(TASK_KILLABLE)
│ 等待 completion 被 complete()
│
▼
【线程阻塞中】
(远端 OSD 回复)
↓
ceph_msg_data_ready()
↓
ceph_handle_reply()
↓
complete(&req->completion);
└── done = 1;
唤醒等待队列上所有等待的任务
4. 被唤醒后返回 wait_for_completion()
→ 请求执行完成,I/O 成功
→ 返回 Ceph 客户端上层
─────────────────────────────────────────────────────────────
结果:wait_for_completion 等待网络回复,
complete 通知回复已到,线程同步恢复。