return; }  switch (where) { case ELEVATOR_INSERT_FRONT: rq->flags |= REQ_SOFTBARRIER;  list_add(&rq->queuelist, &q->queue_head); break;  case ELEVATOR_INSERT_BACK: rq->flags |= REQ_SOFTBARRIER;  while (q->elevator->ops->elevator_dispatch_fn(q, 1)) ; list_add_tail(&rq->queuelist, &q->queue_head); /* * We kick the queue here for the following reasons. * - The elevator might have returned NULL previously *   to delay requests and returned them now.  As the *   queue wasn't empty before this request, ll_rw_blk *   won't run the queue on return, resulting in hang. * - Usually, back inserted requests won't be merged *   with anything.  There's no point in delaying queue *   processing. */ blk_remove_plug(q); q->request_fn(q); break;  case ELEVATOR_INSERT_SORT: BUG_ON(!blk_fs_request(rq)); rq->flags |= REQ_SORTED; q->elevator->ops->elevator_add_req_fn(q, rq); break;  default: printk(KERN_ERR "%s: bad insertion point %d\n", __FUNCTION__, where); BUG(); }  if (blk_queue_plugged(q)) { int nrq = q->rq.count[READ] + q->rq.count[WRITE] - q->in_flight;  if (nrq >= q->unplug_thresh) __generic_unplug_device(q); } 
void __elv_add_request(request_queue_t *q, struct request *rq, int where,		       int plug){	/*	 * barriers implicitly indicate back insertion	 */	if (rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER) &&	    where == ELEVATOR_INSERT_SORT)		where = ELEVATOR_INSERT_BACK;	if (plug)		blk_plug_device(q);	rq->q = q;	if (!test_bit(QUEUE_FLAG_DRAIN, &q->queue_flags)) {		q->elevator->ops->elevator_add_req_fn(q, rq, where);		if (blk_queue_plugged(q)) {			int nrq = q->rq.count[READ] + q->rq.count[WRITE]				  - q->in_flight;			if (nrq >= q->unplug_thresh)				__generic_unplug_device(q);		}	} else		/*		 * if drain is set, store the request "locally". when the drain		 * is finished, the requests will be handed ordered to the io		 * scheduler		 */		list_add_tail(&rq->queuelist, &q->drain_list);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8922e16cf6269e668123acb1ae1fdc62b7a3a4fc/elevator.c/clean/drivers/block/elevator.c