块设备驱动请求处理详解
结束请求的步骤
在处理块设备驱动的请求时,结束请求( end_request )有一系列特定的步骤:
1. 移除缓冲区 :从请求的链表中移除缓冲区。若还有更多缓冲区需要处理,请求结构中的扇区、当前扇区数量和缓冲区字段会更新,以反映列表中下一个 buffer_head 结构的内容。在这种情况下,本次迭代的 end_request 完成,步骤 3 到 5 不执行。
2. 更新熵池 :调用 add_blkdev_randomness 来更新熵池,除非定义了 DEVICE_NO_RANDOM (如 sbull 驱动中所做的那样)。
3. 移除完成的请求 :通过调用 blkdev_dequeue_request 从请求队列中移除完成的请求。此步骤会修改请求队列,因此必须在持有 io_request_lock 的情况下执行。
4. 释放请求 :将完成的请求释放回系统,这里也需要 io_request_lock 。
内核定义了几个辅助函数来完成这些工作。第一个是 end_that_request_first ,用于处理上述前两个步骤,其原型如下:
超级会员免费看
订阅专栏 解锁全文
3566

被折叠的 条评论
为什么被折叠?



