switch (where) { case ELEVATOR_INSERT_BACK: while (cfq_dispatch_requests(q, INT_MAX, 1)) ; list_add_tail(&rq->queuelist, &q->queue_head);  cfq_schedule_dispatch(cfqd); break; case ELEVATOR_INSERT_FRONT: list_add(&rq->queuelist, &q->queue_head); break; case ELEVATOR_INSERT_SORT: BUG_ON(!blk_fs_request(rq)); cfq_enqueue(cfqd, rq); break; default: printk("%s: bad insert point %d\n", __FUNCTION__,where); return;
cfq_init_prio_data(cfqq);  cfq_add_crq_rb(crq);  list_add_tail(&rq->queuelist, &cfqq->fifo);  if (rq_mergeable(rq)) { cfq_add_crq_hash(cfqd, crq);  if (!cfqd->queue->last_merge) cfqd->queue->last_merge = rq;
cfq_insert_request(request_queue_t *q, struct request *rq, int where){	struct cfq_data *cfqd = q->elevator->elevator_data;	switch (where) {		case ELEVATOR_INSERT_BACK:			while (cfq_dispatch_requests(q, INT_MAX, 1))				;			list_add_tail(&rq->queuelist, &q->queue_head);			/*			 * If we were idling with pending requests on			 * inactive cfqqs, force dispatching will			 * remove the idle timer and the queue won't			 * be kicked by __make_request() afterward.			 * Kick it here.			 */			cfq_schedule_dispatch(cfqd);			break;		case ELEVATOR_INSERT_FRONT:			list_add(&rq->queuelist, &q->queue_head);			break;		case ELEVATOR_INSERT_SORT:			BUG_ON(!blk_fs_request(rq));			cfq_enqueue(cfqd, rq);			break;		default:			printk("%s: bad insert point %d\n", __FUNCTION__,where);			return;	}}