在构造nvme cmd命令的时候,使用了request的参数__sector,__data_len来设置nvme命令的lba,len值。

bio sector的计算与块设备lba

 request的参数__sector,__data_len是怎么得到的呢?

在造请求的函数(blk_mq_make_request,通常由submit_bio调用)中,如果新bio能合并到当前线程plug中的request或者能合并到设备请求队列中的request,则会根据是前项合并还是后项合并重新调整request的__sector与__data_len;如果不能合并,则申请新的request,用bio初始化他:

bio sector的计算与块设备lba

bio sector的计算与块设备lba

blk_attempt_plug_merge ->  bio_attempt_back_merge/bio_attempt_front_merge; 

blk_mq_sched_bio_merge -> ... -> bio_attempt_back_merge/bio_attempt_front_merge:

bio sector的计算与块设备lba

 在发送nvme cmd之前,要对request中bio链表中所有bio中的所有vertor进行dma映射,

bio sector的计算与块设备lba

bio sector的计算与块设备lbabio sector的计算与块设备lba 

相关文章:

  • 2021-10-08
  • 2021-08-31
  • 2021-10-13
  • 2021-04-20
  • 2021-10-06
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-27
  • 2022-12-23
  • 2021-09-10
  • 2021-07-10
  • 2021-10-30
  • 2021-07-17
  • 2022-12-23
相关资源
相似解决方案