if (arq->state == AS_RQ_PRESCHED) { WARN_ON(arq->io_context); goto out; }  if (arq->state == AS_RQ_MERGED) goto out_ioc;  
static void as_completed_request(request_queue_t *q, struct request *rq){	struct as_data *ad = q->elevator->elevator_data;	struct as_rq *arq = RQ_DATA(rq);	WARN_ON(!list_empty(&rq->queuelist));	if (arq->state == AS_RQ_PRESCHED) {		WARN_ON(arq->io_context);		goto out;	}	if (arq->state == AS_RQ_MERGED)		goto out_ioc;	if (arq->state != AS_RQ_REMOVED) {		printk("arq->state %d\n", arq->state);		WARN_ON(1);		goto out;	}	if (!blk_fs_request(rq))		goto out;	if (ad->changed_batch && ad->nr_dispatched == 1) {		kblockd_schedule_work(&ad->antic_work);		ad->changed_batch = 0;		if (ad->batch_data_dir == REQ_SYNC)			ad->new_batch = 1;	}	WARN_ON(ad->nr_dispatched == 0);	ad->nr_dispatched--;	/*	 * Start counting the batch from when a request of that direction is	 * actually serviced. This should help devices with big TCQ windows	 * and writeback caches	 */	if (ad->new_batch && ad->batch_data_dir == arq->is_sync) {		update_write_batch(ad);		ad->current_batch_expires = jiffies +				ad->batch_expire[REQ_SYNC];		ad->new_batch = 0;	}	if (ad->io_context == arq->io_context && ad->io_context) {		ad->antic_start = jiffies;		ad->ioc_finished = 1;		if (ad->antic_status == ANTIC_WAIT_REQ) {			/*			 * We were waiting on this request, now anticipate			 * the next one			 */			as_antic_waitnext(ad);		}	}out_ioc:	if (!arq->io_context)		goto out;	if (arq->is_sync == REQ_SYNC) {		struct as_io_context *aic = arq->io_context->aic;		if (aic) {			spin_lock(&aic->lock);			set_bit(AS_TASK_IORUNNING, &aic->state);			aic->last_end_request = jiffies;			spin_unlock(&aic->lock);		}	}	put_io_context(arq->io_context);out:	arq->state = AS_RQ_POSTSCHED;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b4878f245ec8e168cdd1f170f823a750b7dd4af5/as-iosched.c/clean/drivers/block/as-iosched.c