bio

struct bio_vec

bio_vec表示一段连续的内存数据,最大为一个page
一般情况下,bio_vec与page一一对应. 所有bio_vec就组成 了一个bio携带的所有数据

struct bio_vec {
        struct page     *bv_page;/*数据所属的page */
        unsigned int    bv_len;/*数据大小 */
        unsigned int    bv_offset;/*数据在page内的偏移 */
};

 

generic_make_request()

generic_make_request函数可能会有递归调用自己的情况,当递归调用自身时,if(current->bio_list)条件成立,将bio添加到current->blo_list,然后递归调用直接返回,返回后bio_list_on_stack[0]里就有了一个bio,递归调用calltrace举例如下(dm:device mapper):

stacktrace for mediaserver-774:
[ffffffc0106f48b8] generic_make_request+0x0/0x2b4
[ffffffc010acc3d8] __split_and_process_non_flush+0x170/0x1f0
[ffffffc010acb354] __split_and_process_bio+0x14c/0x32c
[ffffffc010acb0b8] dm_process_bio+0x104/0x254
[ffffffc010acad44] dm_make_request+0x44/0x104
[ffffffc0106f49c8] generic_make_request+0x110/0x2b4
[ffffffc0106f5220] submit_bio+0x84/0x25c
[ffffffc0105a55ec] ext4_submit_bio_read+0x38/0x240
[ffffffc0105a54e8] ext4_mpage_readpages+0x98c/0xa58
[ffffffc0105838c8] ext4_readpages+0x3c/0x48
[ffffffc01040abb8] page_cache_sync_readahead+0x90/0x148
[ffffffc0105a54e8] ext4_mpage_readpages+0x98c/0xa58
[ffffffc0103fd424] generic_file_buffered_read+0xf0/0xce8

 

posted @ 2023-01-25 13:44  aspirs  阅读(77)  评论(0编辑  收藏  举报