* 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...
与SQ框架一样,MQ框架中使用request结构体来描述IO请求;不同的是,SQ使用内存池来分配request结构体(参见__get_request),在request往驱动派发时分配tag(参见blk_queue_start_tag),MQ中request和tag分配是绑定在一起的(参见blk_mq_get_request), 具体表现为: request内存分配在块设备驱动初始化时完成(通过调用blk_m...
dispatch request insert request的路径我们从blk_mq_sched_insert_request开始看, 对于none iosched: spin_lock(&ctx->lock); __blk_mq_insert_request(hctx, rq, at_head); spin_unlock(&ctx->lock); 这里几个点需要注意下: 即使ctx是per-core的, 在insert request的时候依然要拿到ctx->lock, 这里并不...
Expand DownExpand Up@@ -1186,7 +1186,6 @@ static void blk_mq_make_request(struct request_queue *q, struct bio *bio) intret; blk_mq_bio_to_request(rq,bio); blk_mq_start_request(rq); /* * For OK queue, we are done. For error, kill it. Any other ...
init_waitqueue_head(&mq->wait); } 开发者ID:AlexShiLucky,项目名称:linux,代码行数:26,代码来源:queue.c 示例3: card_init_bounce_buf ▲点赞 5▼ /* * Alloc bounce buf for read/write numbers of pages in one request */staticintcard_init_bounce_buf(struct card_queue *cq, ...
内核由于阻塞的任务检测而崩溃。阻塞的任务正在等待一个 rw_semaphore,后者被 blk_mq_get_tag ()中的一个循环任务所持有。 Raw [256921.913067] INFO: task stathist sample:2533 blocked for more than 120 seconds. [256921.914292] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this messa...
@@ -1313,9 +1313,9 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio) blk_mq_put_ctx(data.ctx); if (!old_rq) goto done; if (!blk_mq_direct_issue_request(old_rq, &cookie)) goto done; blk_mq_insert_request(old_rq, false, true, true)...
finish_wait+0x80/0x80 __blk_mq_alloc_request+0x47/0x110 blk_mq_make_request+0x14f/0x5b0 generic_make_request+0xef/0x350 ? blkg_lookup_slowpath+0x25/0x50 submit_bio+0x3c/0x160 ? set_page_dirty_lock+0x38/0x50 ? bio_set_pages_dirty+0x32/0x50 do_blockdev_direct_IO+0x21e5/0x...
voidmmc_cleanup_queue(struct mmc_queue *mq){structrequest_queue*q=mq->queue;unsignedlongflags;/* Mark that we should start throwing out stragglers */spin_lock_irqsave(q->queue_lock, flags); q->queuedata =NULL; spin_unlock_irqrestore(q->queue_lock, flags);/* Make sure the queue isn'...
> blk_mq_sched_insert_requests() > insert requests to sw queue or scheduler queue > blk_mq_run_hw_queue > > Because of concurrent run queue, all requests inserted above may be > completed before calling the above blk_mq_run_hw_queue. Then queue can ...