调用blk_mq_rq_ctx_init 初始化tag对应的request(tags->static_rqs[tag]) 图8. blk-mq bio提交时request分配流程 request_queue初始化 基于blk-mq的块设备驱动初始化时,通过调用blk_mq_init_queue初始化IO请求队列(request_queue)。例如,scsi-mq驱动中,每次添加scsi设备(scsi_device)时都会调用blk_mq_init_qu...
* especially blk_mq_rq_ctx_init() to take care of the added fields.*/structrequest {structrequest_queue *q;structblk_mq_ctx *mq_ctx;structblk_mq_hw_ctx *mq_hctx; unsignedintcmd_flags;/*op and common flags*/req_flags_t rq_flags;intinternal_tag;/*the following two fields are inter...
第一个成员queue_rq指定blk-mq向驱动提交request的函数,第二个map_queue定义如何将software queue和hardware queue对应,第三个init_hctx是hardware Queue创建时调用(可以在这里将NVMe Queue与Hardware Queue绑定),init_request是在分配Request时调用,timeout是发生timeout时的调用。这些函数都是供blk-mq使用的。 blk-m...
一个ctx根据rq type不同可以对应到多个hctx上, 但同一type的ctx只会有一个hctx. 显然rq知道知己的type, 所以rq映射到唯一的一个hctx上, 具体代码见blk_mq_get_request/blk_mq_map_queue. 这里的核心思想是对于读操作或者高优先级的rq, 可以使用单独的hctx (hardware queue) 来提高其QoS. 那么ctx/hctx作...
@@ -2220,16 +2221,11 @@ static void blk_mq_init_cpu_queues(struct request_queue *q, INIT_LIST_HEAD(&__ctx->rq_list); __ctx->queue = q;/* If the cpu isn't present, the cpu is mapped to first hctx */ if (!cpu_present(i)) ...
Expand Up@@ -1890,6 +1890,7 @@ static int scsi_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req, scsi_init_cmd_errh(cmd); cmd->scsi_done=scsi_mq_done; blk_mq_start_request(req); reason=scsi_dispatch_cmd(cmd); ...
BUG: unable to handle kernel NULL pointer dereference at 00000000000000d0 IP: [<ffffffff86d5f628>] blk_mq_rq_timed_out+0x18/0xa0 PGD 8000000035eae067 PUD 0 Oops: 0000 [#1] SMP CPU: 2 PID: 1041 Comm: kworker/2:1H Kdump: loaded Tainted: P OE --- 3.10.0-1127.19.1.el7.x86_64 #...
1、函数是一个可以多次使用的功能代码块,一个封闭的(空间),它可以在代码里随意调用。利用函数的封装...
static int null_add_dev(void) { struct nullb *nullb; int rv; nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, home_node); if (!nullb) { rv = -ENOMEM; goto out; } spin_lock_init(&nullb->lock); if (queue_mode == NULL_Q_MQ && use_per_node_hctx) submit_queues = nr...
在取消引用 NULL request->q 指针时,blk_mq_rq_timed_out() 崩溃。Raw BUG: unable to handle kernel NULL pointer dereference at 00000000000000d0 IP: [<ffffffff86d5f628>] blk_mq_rq_timed_out+0x18/0xa0 PGD 8000000035eae067 PUD 0 Oops: 0000 [#1] SMP CPU: 2 PID: 1041 Comm: kworker/2:...