blk_put_request(rq); 
static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,			       int lba, int nframes){	request_queue_t *q = cdi->disk->queue;	struct request *rq;	struct bio *bio;	unsigned int len;	int nr, ret = 0;	if (!q)		return -ENXIO;	cdi->last_sense = 0;	while (nframes) {		nr = nframes;		if (cdi->cdda_method == CDDA_BPC_SINGLE)			nr = 1;		if (nr * CD_FRAMESIZE_RAW > (q->max_sectors << 9))			nr = (q->max_sectors << 9) / CD_FRAMESIZE_RAW;		len = nr * CD_FRAMESIZE_RAW;		rq = blk_rq_map_user(q, READ, ubuf, len);		if (IS_ERR(rq))			return PTR_ERR(rq);		memset(rq->cmd, 0, sizeof(rq->cmd));		rq->cmd[0] = GPCMD_READ_CD;		rq->cmd[1] = 1 << 2;		rq->cmd[2] = (lba >> 24) & 0xff;		rq->cmd[3] = (lba >> 16) & 0xff;		rq->cmd[4] = (lba >>  8) & 0xff;		rq->cmd[5] = lba & 0xff;		rq->cmd[6] = (nr >> 16) & 0xff;		rq->cmd[7] = (nr >>  8) & 0xff;		rq->cmd[8] = nr & 0xff;		rq->cmd[9] = 0xf8;		rq->cmd_len = 12;		rq->flags |= REQ_BLOCK_PC;		rq->timeout = 60 * HZ;		bio = rq->bio;		if (rq->bio)			blk_queue_bounce(q, &rq->bio);		if (blk_execute_rq(q, cdi->disk, rq)) {			struct request_sense *s = rq->sense;			ret = -EIO;			cdi->last_sense = s->sense_key;		}		if (blk_rq_unmap_user(rq, bio, len))			ret = -EFAULT;		if (ret)			break;		nframes -= nr;		lba += nr;		ubuf += len;	}	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/dd1cab95f356f1395278633565f198463cf6bd24/cdrom.c/buggy/drivers/cdrom/cdrom.c