/* Description: Insert a fully prepared request at the back of the I/O scheduler queue for execution. Don't wait for completion.  */
void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk, struct request *rq, int at_head, rq_end_io_fn *done)
/* Description: Insert a fully prepared request at the back of the I/O scheduler queue for execution. Don't wait for completion.  */
void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk, struct request *rq, int at_head, rq_end_io_fn *done)
{
	int where = at_head ? ELEVATOR_INSERT_FRONT : ELEVATOR_INSERT_BACK;
	rq->rq_disk = bd_disk;
	rq->end_io = done;
	WARN_ON(irqs_disabled());
	spin_lock_irq(q->queue_lock);
	__elv_add_request(q, rq, where, 1);
	__generic_unplug_device(q);
	if (blk_pm_resume_request(rq))
		q->request_fn(q);
	spin_unlock_irq(q->queue_lock);
}