bio_endio和正确处理READ请求

时间:2018-08-28 14:20:24

标签: linux-device-driver

我需要处理自己的“ bio_endio()”例程数据,该数据已从磁盘块设备中读取。  调试输出向我展示:

[ 2366.375518] [ 0x0 DUDRIVER\__dua_show_bio:701] before [000] BIO 00000000f00b7491, src_iter sector/size/idx/done/bvec_done : 2056/0/1/4096/0

我希望我可以通过以下循环在BVEC上运行:

for (vcnt = 0, src_iter = src->bi_iter; ; vcnt++)
    {
    if ( !src_iter.bi_size)
        {
        if ( !(src = src->bi_next) )
            break;

        src_iter = src->bi_iter;
        }

      src_bv = bio_iter_iovec(src, src_iter);


     /* there is decrypting stuff */

     }

但是,循环以“第一次迭代”结束,因此尚未调用解密内容。 因此,在调用低级驱动程序之前是否需要保存.bi_iter字段并在循环之前将其还原?还是这种技巧不起作用,因为低级驱动程序可以拆分BVEC?

1 个答案:

答案 0 :(得分:0)

读取请求即将显示“完成”的 .bi_iter 字段。所以,以太需要使用 bio_for_each_segment_all,或保存并还原原始的 .bi_iter 字段。