40、块设备驱动请求处理详解

块设备驱动请求处理详解

结束请求的步骤

在处理块设备驱动的请求时,结束请求( 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 ,用于处理上述前两个步骤,其原型如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值