blk_put_request(rq); return (struct request *) bio; 
return PTR_ERR(bio); 
struct request *blk_rq_map_user(request_queue_t *q, int rw, void __user *ubuf,				unsigned int len){	unsigned long uaddr;	struct request *rq;	struct bio *bio;	if (len > (q->max_sectors << 9))		return ERR_PTR(-EINVAL);	if ((!len && ubuf) || (len && !ubuf))		return ERR_PTR(-EINVAL);	rq = blk_get_request(q, rw, __GFP_WAIT);	if (!rq)		return ERR_PTR(-ENOMEM);	/*	 * if alignment requirement is satisfied, map in user pages for	 * direct dma. else, set up kernel bounce buffers	 */	uaddr = (unsigned long) ubuf;	if (!(uaddr & queue_dma_alignment(q)) && !(len & queue_dma_alignment(q)))		bio = bio_map_user(q, NULL, uaddr, len, rw == READ);	else		bio = bio_copy_user(q, uaddr, len, rw == READ);	if (!IS_ERR(bio)) {		rq->bio = rq->biotail = bio;		blk_rq_bio_prep(q, rq, bio);		rq->buffer = rq->data = NULL;		rq->data_len = len;		return rq;	}	/*	 * bio is the err-ptr	 */	blk_put_request(rq);	return (struct request *) bio;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/dd1cab95f356f1395278633565f198463cf6bd24/ll_rw_blk.c/clean/drivers/block/ll_rw_blk.c