[<ffffffff86d62be4>] bt_iter+0x54/0x60 [<ffffffff86d635eb>] blk_mq_queue_tag_busy_iter+0x13b/0x320 [<ffffffff86d5f6b0>] ? blk_mq_rq_timed_out+0xa0/0xa0 [<ffffffff86d5f6b0>] ? blk_mq_rq_timed_out+0xa0/0xa0 [<ffffffff86d5e33b>] blk_mq_timeout_work+0x8b/0x180 [...
第一个成员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...
1127.19.1.el7.x86_64 #1 Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011 Workqueue: kblockd blk_mq_timeout_work task: ffff93dbd3fa8000 ti: ffff93dbd3f60000 task.ti: ffff93dbd3f60000 RIP: 0010:[<ffffffff86d5f628>] [<ffffffff86d5f628>] blk_mq_rq_timed_out+0x18/0xa0 ......
return blk_init_queue_node(rfn, lock, NUMA_NO_NODE); } EXPORT_SYMBOL(blk_init_queue); struct request_queue * blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id) { struct request_queue *uninit_q, *q; uninit_q = blk_alloc_queue_node(GFP_KERNEL, node_id); ...
void blk_rq_init(struct request_queue *q, struct request *rq) { memset(rq, 0, sizeof(*rq)); INIT_LIST_HEAD(&rq->queuelist); INIT_LIST_HEAD(&rq->timeout_list); rq->cpu = -1; rq->q = q; rq->__sector = (sector_t) -1; ...
err = blk_execute_rq(vblk->disk->queue, vblk->disk, req,false); out:blk_put_request(req);returnerr; } 开发者ID:BWhitten,项目名称:linux-stable,代码行数:22,代码来源:virtio_blk.c 示例5: idescsi_check_condition ▲点赞 1▼ staticintidescsi_check_condition(ide_drive_t*drive, ...
对应到代码per_cpu_ptr(q->queue_ctx, cpu) 一个ctx根据rq type不同可以对应到多个hctx上, 但同一type的ctx只会有一个hctx. 显然rq知道知己的type, 所以rq映射到唯一的一个hctx上, 具体代码见blk_mq_get_request/blk_mq_map_queue. 这里的核心思想是对于读操作或者高优先级的rq, 可以使用单独的hctx ...
When we call blk_mq_start_request from the core blk-mq code before calling into ->queue_rq there is a racy window where the timeout handler can hit before we've fully set up the driver specific part of the command. Move the call to blk_mq_start_request into the driver so the drive...
if (!ubq->timeout) { send_sig(SIGKILL, ubq->ubq_daemon, 0); ubq->timeout = true; }return BLK_EH_DONE; }return BLK_EH_RESET_TIMER; }static blk_status_t ublk_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd) ...
error =blk_execute_rq(drive->queue, disk, rq,0); put_req: blk_put_request(rq);returnerror; } 開發者ID:ramlaxman,項目名稱:linux,代碼行數:29,代碼來源:ide-atapi.c 示例2: send_request ▲點讚 7▼ staticintsend_request(struct request_queue *q, struct bio *bio, ...