在构造nvme cmd命令的时候,使用了request的参数__sector,__data_len来设置nvme命令的lba,len值。
request的参数__sector,__data_len是怎么得到的呢?
在造请求的函数(blk_mq_make_request,通常由submit_bio调用)中,如果新bio能合并到当前线程plug中的request或者能合并到设备请求队列中的request,则会根据是前项合并还是后项合并重新调整request的__sector与__data_len;如果不能合并,则申请新的request,用bio初始化他:
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:
在发送nvme cmd之前,要对request中bio链表中所有bio中的所有vertor进行dma映射,