块设备驱动请求处理详解
在块设备驱动的开发中,请求处理是一个核心环节,涉及多个复杂的操作和机制。下面将详细介绍块设备驱动请求处理的相关内容,包括请求结束处理、集群请求处理、多队列驱动以及无请求队列操作等方面。
1. 请求结束处理步骤
当处理块设备请求结束时,需要按照一定的步骤进行操作,以确保系统资源的正确释放和请求队列的一致性。具体步骤如下:
1. 移除缓冲区 :从请求的链表中移除缓冲区。若还有更多缓冲区需要处理,则更新请求结构中的扇区、当前扇区数量和缓冲区字段,以反映列表中下一个 buffer_head 结构的内容。在这种情况下,本次迭代的 end_request 完成,步骤 3 到 5 不执行。
2. 更新熵池 :除非定义了 DEVICE_NO_RANDOM (如 sbull 驱动),否则调用 add_blkdev_randomness 来更新熵池。
3. 移除完成的请求 :调用 blkdev_dequeue_request 从请求队列中移除已完成的请求。此步骤会修改请求队列,因此必须在持有 io_request_lock 的情况下执行。
4. 释放请求 :将完成的请求释放回系统,这里也需要 io_request_lock 。
为了简化这些操作,内核定
超级会员免费看
订阅专栏 解锁全文
3613

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



