我需要处理自己的“ 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?
答案 0 :(得分:0)
读取请求即将显示“完成”的 .bi_iter 字段。所以,以太需要使用 bio_for_each_segment_all,或保存并还原原始的 .bi_iter 字段。