bio_endio-如何获取磁盘扇区内容

时间:2018-08-30 09:14:15

标签: linux-device-driver

当时我尝试使用以下构造:

A.exe

...

__my_bio_endio (struct bio *iob)
{
struct bvec_iter src_iter;
struct bio_vec src_bv;
sector_t sector = iob->bi_iter.bi_sector;
unsigned int len, segno = 0;

...     }

读取请求参数:

    $TRACE("%s %s BIO=%p (op=%#x), sector=%lu, .bi_vcnt=%u, .bi_status=%d",
           pref ? pref : "",
           bio_data_dir(iob) == WRITE ? "WRITE" : "READ", iob,
           bio_op(iob),
           sector, iob->bi_vcnt, iob->bi_status);


    bio_for_each_segment (src_bv, iob, src_iter)
        {
        $TRACE("%s bvec[segno=%3.3u]: page/len/offset : %p/%u/%u",
               pref ? pref : "",
               segno, src_bv.bv_page, src_bv.bv_len, src_bv.bv_offset);

        len = src_bv.bv_len;
        sector += len >> SECTOR_SHIFT;
        segno++;
        }

这只是我在以下地方看到的内容:

READ (op=0x0) BIO=000000004debb98a, .bi_sector=2048, .bi_vcnt=1

它期望在循环中,我将看到(并根据需要进行修改)已从磁盘卷中读取磁盘扇区-但什么都没有。

因此,有人可以帮助我了解如何通过示例访问磁盘缓冲区内容吗?

1 个答案:

答案 0 :(得分:1)

在向后端设备驱动程序提交BIO请求之前,它需要保存.bi_iter字段,并在__my_bio_endio()例程中将其还原。  因此,topic

中描述了处理并发BIO的更多细节。