1. aoe_end_request
2. blk_delay_work
3. blk_start_queue
4. blk_run_queue
5. __blk_drain_queue
6. blk_queue_bio
7. blk_insert_cloned_request
8. queue_unplugged
9. blk_post_runtime_resume
10. blk_execute_rq_nowait
11. cfq_rq_enqueued
12. cfq_kick_queue
13. __elv_add_request
__blk_run_queue
void __blk_run_queue(struct request_queue *q)
{
if (unlikely(blk_queue_stopped(q)))
return;
__blk_run_queue_uncond(q);
inline void __blk_run_queue_uncond(struct request_queue *q)
{
if (unlikely(blk_queue_dead(q)))
return;
/*
* Some request_fn implementations, e.g. scsi_request_fn(), unlock
* the queue lock internally. As a result multiple threads may be
* running such a request function concurrently. Keep track of the
* number of active request_fn invocations such that blk_drain_queue()
* can wait until all these request_fn calls have finished.
*/
q->request_fn_active++;
q->request_fn(q);
q->request_fn_active--;
}
EXPORT_SYMBOL_GPL(__blk_run_queue_uncond);
标签:__,run,request,queue,blk,fn
From: https://blog.51cto.com/u_11860992/6410367