* If you modify this structure, make sure to update blk_rq_init() and * 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...
调用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...
第一个成员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...
第一步blk_mq_flush_busy_ctxs会先把ctx里面的rq全部摘下来放到临时变量rq_list, 核心函数: static bool flush_busy_ctx(struct sbitmap *sb, unsigned int bitnr, void *data) { ... spin_lock(&ctx->lock); list_splice_tail_init(&ctx->rq_lists[type], flush_data->list); sbitmap_clear_bi...
@@ -332,6 +332,7 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, #endif data->ctx->rq_dispatched[op_is_sync(op)]++; refcount_set(&rq->ref, 1); return rq; } @@ -465,13 +466,27 @@ struct request *blk_mq_alloc_request_hctx(struct request_...
rq->timeout = 0; @@ -386,14 +386,13 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, WRITE_ONCE(rq->deadline, 0); req_ref_set(rq, 1); if (rq->rq_flags & RQF_ELV) { if (rq->rq_flags & RQF_USE_SCHED) { struct elevator_queue *e = dat...
vDPA 设备是一种遵循virtio 数据路径规范但具有特定于供应商的控制路径的设备。 vDPA 设备既可以物理位于硬件上,也可以通过软件模拟。 图片 主机内核中只需要一个小型 vDPA 父驱动程序来处理控制路径。主要优点是所有 vDPA 设备都具有统一的软件堆栈: 用于用户空间或客户 virtio 驱动程序的vhost 接口(vhost-vdpa),例如...
问在Linux函数blk_mq_rq_to_pdu中,什么是pdu?EN1、函数是一个可以多次使用的功能代码块,一个封闭...
System crash in blk_mq_free_request() following NVMe controller reset due to NULL mq_hctx. Example 1: Raw nvme nvme0: I/O 71 QID 1 timeout, aborting nvme nvme0: Abort status: 0x0 nvme nvme0: I/O 71 QID 1 timeout, reset controller nvme nvme0: 2/0/0 default/read/poll queues...
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 #...