if (barrier) 
if (unlikely(barrier)) 
static int __make_request(request_queue_t *q, struct bio *bio){	struct request *req, *freereq = NULL;	int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, err, sync;	sector_t sector;	sector = bio->bi_sector;	nr_sectors = bio_sectors(bio);	cur_nr_sectors = bio_cur_sectors(bio);	rw = bio_data_dir(bio);	sync = bio_sync(bio);	/*	 * low level driver can indicate that it wants pages above a	 * certain limit bounced to low memory (ie for highmem, or even	 * ISA dma in theory)	 */	blk_queue_bounce(q, &bio);	spin_lock_prefetch(q->queue_lock);	barrier = bio_barrier(bio);	if (barrier && (q->ordered == QUEUE_ORDERED_NONE)) {		err = -EOPNOTSUPP;		goto end_io;	}again:	spin_lock_irq(q->queue_lock);	if (elv_queue_empty(q)) {		blk_plug_device(q);		goto get_rq;	}	if (barrier)		goto get_rq;	el_ret = elv_merge(q, &req, bio);	switch (el_ret) {		case ELEVATOR_BACK_MERGE:			BUG_ON(!rq_mergeable(req));			if (!q->back_merge_fn(q, req, bio))				break;			req->biotail->bi_next = bio;			req->biotail = bio;			req->nr_sectors = req->hard_nr_sectors += nr_sectors;			drive_stat_acct(req, nr_sectors, 0);			if (!attempt_back_merge(q, req))				elv_merged_request(q, req);			goto out;		case ELEVATOR_FRONT_MERGE:			BUG_ON(!rq_mergeable(req));			if (!q->front_merge_fn(q, req, bio))				break;			bio->bi_next = req->bio;			req->bio = bio;			/*			 * may not be valid. if the low level driver said			 * it didn't need a bounce buffer then it better			 * not touch req->buffer either...			 */			req->buffer = bio_data(bio);			req->current_nr_sectors = cur_nr_sectors;			req->hard_cur_sectors = cur_nr_sectors;			req->sector = req->hard_sector = sector;			req->nr_sectors = req->hard_nr_sectors += nr_sectors;			drive_stat_acct(req, nr_sectors, 0);			if (!attempt_front_merge(q, req))				elv_merged_request(q, req);			goto out;		/*		 * elevator says don't/can't merge. get new request		 */		case ELEVATOR_NO_MERGE:			break;		default:			printk("elevator returned crap (%d)\n", el_ret);			BUG();	}	/*	 * Grab a free request from the freelist - if that is empty, check	 * if we are doing read ahead and abort instead of blocking for	 * a free slot.	 */get_rq:	if (freereq) {		req = freereq;		freereq = NULL;	} else {		spin_unlock_irq(q->queue_lock);		if ((freereq = get_request(q, rw, GFP_ATOMIC)) == NULL) {			/*			 * READA bit set			 */			err = -EWOULDBLOCK;			if (bio_rw_ahead(bio))				goto end_io;				freereq = get_request_wait(q, rw);		}		goto again;	}	req->flags |= REQ_CMD;	/*	 * inherit FAILFAST from bio (for read-ahead, and explicit FAILFAST)	 */	if (bio_rw_ahead(bio) || bio_failfast(bio))		req->flags |= REQ_FAILFAST;	/*	 * REQ_BARRIER implies no merging, but lets make it explicit	 */	if (barrier)		req->flags |= (REQ_HARDBARRIER | REQ_NOMERGE);	req->errors = 0;	req->hard_sector = req->sector = sector;	req->hard_nr_sectors = req->nr_sectors = nr_sectors;	req->current_nr_sectors = req->hard_cur_sectors = cur_nr_sectors;	req->nr_phys_segments = bio_phys_segments(q, bio);	req->nr_hw_segments = bio_hw_segments(q, bio);	req->buffer = bio_data(bio);	/* see ->buffer comment above */	req->waiting = NULL;	req->bio = req->biotail = bio;	req->rq_disk = bio->bi_bdev->bd_disk;	req->start_time = jiffies;	add_request(q, req);out:	if (freereq)		__blk_put_request(q, freereq);	if (sync)		__generic_unplug_device(q);	spin_unlock_irq(q->queue_lock);	return 0;end_io:	bio_endio(bio, nr_sectors << 9, err);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fde6ad22480cdc2eaa102b805a3ed3ee1d36a376/ll_rw_blk.c/clean/drivers/block/ll_rw_blk.c