dbio->buffer = __pa(dst); 
dbio->buffer = dst; 
dasd_diag_build_cp(struct dasd_device * device, struct request *req){	struct dasd_ccw_req *cqr;	struct dasd_diag_req *dreq;	struct dasd_diag_bio *dbio;	struct bio *bio;	struct bio_vec *bv;	char *dst;	unsigned int count, datasize;	sector_t recid, first_rec, last_rec;	unsigned int blksize, off;	unsigned char rw_cmd;	int i;	if (rq_data_dir(req) == READ)		rw_cmd = MDSK_READ_REQ;	else if (rq_data_dir(req) == WRITE)		rw_cmd = MDSK_WRITE_REQ;	else		return ERR_PTR(-EINVAL);	blksize = device->bp_block;	/* Calculate record id of first and last block. */	first_rec = req->sector >> device->s2b_shift;	last_rec = (req->sector + req->nr_sectors - 1) >> device->s2b_shift;	/* Check struct bio and count the number of blocks for the request. */	count = 0;	rq_for_each_bio(bio, req) {		bio_for_each_segment(bv, bio, i) {			if (bv->bv_len & (blksize - 1))				/* Fba can only do full blocks. */				return ERR_PTR(-EINVAL);			count += bv->bv_len >> (device->s2b_shift + 9);		}	}	/* Paranoia. */	if (count != last_rec - first_rec + 1)		return ERR_PTR(-EINVAL);	/* Build the request */	datasize = sizeof(struct dasd_diag_req) +		count*sizeof(struct dasd_diag_bio);	cqr = dasd_smalloc_request(dasd_diag_discipline.name, 0,				   datasize, device);	if (IS_ERR(cqr))		return cqr;		dreq = (struct dasd_diag_req *) cqr->data;	dreq->block_count = count;	dbio = dreq->bio;	recid = first_rec;	rq_for_each_bio(bio, req) {		bio_for_each_segment(bv, bio, i) {			dst = page_address(bv->bv_page) + bv->bv_offset;			for (off = 0; off < bv->bv_len; off += blksize) {				memset(dbio, 0, sizeof (struct dasd_diag_bio));				dbio->type = rw_cmd;				dbio->block_number = recid + 1;				dbio->buffer = __pa(dst);				dbio++;				dst += blksize;				recid++;			}		}	}	cqr->retries = DIAG_MAX_RETRIES;	cqr->buildclk = get_clock();	cqr->device = device;	cqr->expires = DIAG_TIMEOUT;	cqr->status = DASD_CQR_FILLED;	return cqr;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/86b368a5804d05a6508791f10ebabf7b779eb845/dasd_diag.c/clean/drivers/s390/block/dasd_diag.c