|
@@ -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();
|