免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2104 | 回复: 4
打印 上一主题 下一主题

[请教]文件读写超时机制在哪一层实现? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 12:06 |只看该作者 |倒序浏览
大家好,我有个疑问,如题:文件读写超时机制在哪一层实现?
问题就是:如果磁盘控制器挂起等原因导致DMA迟迟不完成,那么文件读写超时是在哪一层决定?

前几天看了些块设备的知识,得知块设备如磁盘和内核的接口方式是提供块请求队列,当一个块请求完成时会执行回调。我看到submit_bio把块请求加入到磁盘块处理队列之后,
就依靠回调函数来判断时候完成读写了,可是如果磁盘控制器挂起,DMA迟迟不完成,超时是怎么决定的?超时之后调用submit_bio的进程是否会记录该bio?是否还能主动撤销和删除该bio?
如果由磁盘驱动来判断超时,又是否调用该回调函数?怎么区别完成还是没完成?

论坛徽章:
0
2 [报告]
发表于 2008-11-26 14:41 |只看该作者
硬盘写也有超时吗?没听说过

论坛徽章:
0
3 [报告]
发表于 2008-12-09 17:13 |只看该作者

回复 #2 qtdszws 的帖子

当然有,我也想知道。
如果对scsi设备读写操作长时间未返回时,如何解决呢?

论坛徽章:
0
4 [报告]
发表于 2008-12-09 18:31 |只看该作者

回复 #3 linuxnewer112 的帖子

SCSI 每个命令都有timeout。超时后会做一些处理后返回。具体可以参考kernel文档的scsi_eh。

论坛徽章:
0
5 [报告]
发表于 2008-12-10 10:31 |只看该作者

回复 #4 xiegang112 的帖子

谢谢你的答复,我试验了一下

scsi_add_timer(cmd, cmd->timeout_per_command, scsi_times_out);
SCSI底层设置这个超时,是调用host->hostt->queuecommand(cmd, scsi_done)的时间,
也就是这个函数正常返回就算不超时了。

而我这里的问题是。queuecommand正常返回了。所以scsi判断没有超时。
但是在底层queuecommand只是把当前命令放入一个队列,还未执行。当真正执行时却出现问题,
没有返回,即最后没有调用回调函数。上层就一直没得到响应,就停下来了。

我尝试把底层命令取消返回不管用,不知scsi上层还是block还需做什么,还是其他地方??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP