bio_endio和正确处理READ请求

问题描述 投票:1回答:1

我需要在我自己的“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?

linux-device-driver
1个回答
0
投票

READ请求与“完成”.bi_iter字段一起提交。因此,以太需要使用bio_for_each_segment_all,或者保存并恢复原始的.bi_iter字段。

© www.soinside.com 2019 - 2024. All rights reserved.