pktcdvd: don't rely on bio_init() preserving bio->bi_io_vec

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
Jens Axboe 2007-09-14 13:06:53 +02:00
parent bb879463b5
commit 761a15e7ac

View File

@ -1133,16 +1133,20 @@ static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt)
* Schedule reads for missing parts of the packet. * Schedule reads for missing parts of the packet.
*/ */
for (f = 0; f < pkt->frames; f++) { for (f = 0; f < pkt->frames; f++) {
struct bio_vec *vec;
int p, offset; int p, offset;
if (written[f]) if (written[f])
continue; continue;
bio = pkt->r_bios[f]; bio = pkt->r_bios[f];
vec = bio->bi_io_vec;
bio_init(bio); bio_init(bio);
bio->bi_max_vecs = 1; bio->bi_max_vecs = 1;
bio->bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9); bio->bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9);
bio->bi_bdev = pd->bdev; bio->bi_bdev = pd->bdev;
bio->bi_end_io = pkt_end_io_read; bio->bi_end_io = pkt_end_io_read;
bio->bi_private = pkt; bio->bi_private = pkt;
bio->bi_io_vec = vec;
p = (f * CD_FRAMESIZE) / PAGE_SIZE; p = (f * CD_FRAMESIZE) / PAGE_SIZE;
offset = (f * CD_FRAMESIZE) % PAGE_SIZE; offset = (f * CD_FRAMESIZE) % PAGE_SIZE;
@ -1439,6 +1443,7 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
pkt->w_bio->bi_bdev = pd->bdev; pkt->w_bio->bi_bdev = pd->bdev;
pkt->w_bio->bi_end_io = pkt_end_io_packet_write; pkt->w_bio->bi_end_io = pkt_end_io_packet_write;
pkt->w_bio->bi_private = pkt; pkt->w_bio->bi_private = pkt;
pkt->w_bio->bi_io_vec = bvec;
for (f = 0; f < pkt->frames; f++) for (f = 0; f < pkt->frames; f++)
if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset)) if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset))
BUG(); BUG();