【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 通知回复已到,线程同步恢复。

 

posted @ 2025-10-15 10:14  苏格拉底的落泪  阅读(7)  评论(0)    收藏  举报