0.前言
内核版本:4.19
文档目的: 主要以null_dev为例来研究多队列的工作机制。本文主要以ext4文件系统为例,介绍null block dev读流程。注意本文所述流程是在禁用blk-mq调度器的情况下进行的,禁用方法为null blk驱动
中g_no_sched设为1。
1.通过/dev/nullb设备节点读取
我们知道在创建设备节点的时候,通过系统调用mknod,最终会为设备文件创建inode,并通过init_special_inode来初始化inode->i_fop,如果是块设备则为def_blk_fops;
当通过系统调用open打开设备文件时就会将块设备文件的inode->i_fop赋值给file->f_op,也就是将def_blk_fops赋值给file->f_op;
当读取块设备文件节点时,就会调用到def_blk_fops的blkdev_read_iter,如图中调用栈所示
读取null block dev就遵循这个过程
之后的过程将与通过文件系统读流程一致