我需要在我自己的“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?
READ请求与“完成”.bi_iter字段一起提交。因此,以太需要使用bio_for_each_segment_all,或者保存并恢复原始的.bi_iter字段。