当前位置:  技术问答>linux和unix

读generic_make_request函数时的一点疑问

    来源: 互联网  发布时间:2016-02-26

    本文导语:  generic_make_request函数最后提交请求给驱动时是用下面的代码实现的: do {                  q = blk_get_queue(bh->b_rdev);                  if (!q) {                          printk(KERN_ERR      ...

generic_make_request函数最后提交请求给驱动时是用下面的代码实现的:
do {
                 q = blk_get_queue(bh->b_rdev);
                 if (!q) {
                         printk(KERN_ERR
                                "generic_make_request: Trying to access "
                                "nonexistent block-device %s (%ld)n",
                                kdevname(bh->b_rdev), bh->b_rsector);
                         buffer_IO_error(bh);
                         break;
                 }
         } while (q->make_request_fn(q, rw, bh));
 }

|
用了do while说明请求不是提交一次就可以了,算法上有这个需要,要联系上下文。

|
859         /*
860          * Resolve the mapping until finished. (drivers are
861          * still free to implement/resolve their own stacking
862          * by explicitly returning 0)
863          */

这段注释说明了do while的必要性,这个块设备可能正在处理别的什么,导致一次的make_request_fn可能并没有成功,于是进行下一次的请求,直到成功,在这个过程中,如果blk_get_queue返回0,将会中止这个request的过程去处理它自己的堆栈。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3