Lines Matching defs:bio
28 * Its data is defined by the struct packet_iosched and includes two bio
546 struct bio *bio = bio_kmalloc(GFP_KERNEL, 1);
547 if (!bio)
550 pkt->r_bios[i] = bio;
557 struct bio *bio = pkt->r_bios[i];
558 if (bio)
559 bio_put(bio);
581 struct bio *bio = pkt->r_bios[i];
582 if (bio)
583 bio_put(bio);
655 if (s <= tmp->bio->bi_iter.bi_sector)
664 if (s > tmp->bio->bi_iter.bi_sector) {
669 BUG_ON(s > tmp->bio->bi_iter.bi_sector);
680 sector_t s = node->bio->bi_iter.bi_sector;
686 if (s < tmp->bio->bi_iter.bi_sector)
809 * Queue a bio for processing by the low-level CD device. Must be called
812 static void pkt_queue_bio(struct pktcdvd_device *pd, struct bio *bio)
815 if (bio_data_dir(bio) == READ)
816 bio_list_add(&pd->iosched.read_queue, bio);
818 bio_list_add(&pd->iosched.write_queue, bio);
849 struct bio *bio;
863 bio = bio_list_peek(&pd->iosched.write_queue);
865 if (bio && (bio->bi_iter.bi_sector ==
888 bio = bio_list_pop(&pd->iosched.write_queue);
890 bio = bio_list_pop(&pd->iosched.read_queue);
893 if (!bio)
896 if (bio_data_dir(bio) == READ)
898 bio->bi_iter.bi_size >> 10;
901 pd->iosched.last_write = bio_end_sector(bio);
916 submit_bio_noacct(bio);
947 static void pkt_end_io_read(struct bio *bio)
949 struct packet_data *pkt = bio->bi_private;
953 pkt_dbg(2, pd, "bio=%p sec0=%llx sec=%llx err=%d\n",
954 bio, (unsigned long long)pkt->sector,
955 (unsigned long long)bio->bi_iter.bi_sector, bio->bi_status);
957 if (bio->bi_status)
966 static void pkt_end_io_packet_write(struct bio *bio)
968 struct packet_data *pkt = bio->bi_private;
972 pkt_dbg(2, pd, "id=%d, err=%d\n", pkt->id, bio->bi_status);
988 struct bio *bio;
1002 bio_list_for_each(bio, &pkt->orig_bios) {
1003 int first_frame = (bio->bi_iter.bi_sector - pkt->sector) /
1005 int num_frames = bio->bi_iter.bi_size / CD_FRAMESIZE;
1029 bio = pkt->r_bios[f];
1030 bio_reset(bio);
1031 bio->bi_iter.bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9);
1032 bio_set_dev(bio, pd->bdev);
1033 bio->bi_end_io = pkt_end_io_read;
1034 bio->bi_private = pkt;
1040 if (!bio_add_page(bio, pkt->pages[p], CD_FRAMESIZE, offset))
1044 bio_set_op_attrs(bio, REQ_OP_READ, 0);
1045 pkt_queue_bio(pd, bio);
1106 struct bio *bio = NULL;
1131 bio = node->bio;
1132 zone = get_zone(bio->bi_iter.bi_sector, pd);
1135 bio = NULL;
1151 if (!bio) {
1152 pkt_dbg(2, pd, "no bio\n");
1170 bio = node->bio;
1172 get_zone(bio->bi_iter.bi_sector, pd));
1173 if (get_zone(bio->bi_iter.bi_sector, pd) != zone)
1177 bio_list_add(&pkt->orig_bios, bio);
1178 pkt->write_size += bio->bi_iter.bi_size / CD_FRAMESIZE;
1203 * Assemble a bio to write one packet and queue the bio for processing
1251 struct bio *bio;
1257 while ((bio = bio_list_pop(&pkt->orig_bios))) {
1258 bio->bi_status = status;
1259 bio_endio(bio);
2260 static void pkt_end_io_read_cloned(struct bio *bio)
2262 struct packet_stacked_data *psd = bio->bi_private;
2265 psd->bio->bi_status = bio->bi_status;
2266 bio_put(bio);
2267 bio_endio(psd->bio);
2272 static void pkt_make_request_read(struct pktcdvd_device *pd, struct bio *bio)
2274 struct bio *cloned_bio = bio_clone_fast(bio, GFP_NOIO, &pkt_bio_set);
2278 psd->bio = bio;
2282 pd->stats.secs_r += bio_sectors(bio);
2286 static void pkt_make_request_write(struct request_queue *q, struct bio *bio)
2294 zone = get_zone(bio->bi_iter.bi_sector, pd);
2298 * just append this bio to that packet.
2307 bio_list_add(&pkt->orig_bios, bio);
2309 bio->bi_iter.bi_size / CD_FRAMESIZE;
2327 * Test if there is enough room left in the bio work queue
2344 * No matching packet found. Store the bio in the work queue.
2347 node->bio = bio;
2370 static blk_qc_t pkt_submit_bio(struct bio *bio)
2374 struct bio *split;
2376 blk_queue_split(&bio);
2378 pd = bio->bi_disk->queue->queuedata;
2380 pr_err("%s incorrect request queue\n", bio_devname(bio, b));
2385 (unsigned long long)bio->bi_iter.bi_sector,
2386 (unsigned long long)bio_end_sector(bio));
2391 if (bio_data_dir(bio) == READ) {
2392 pkt_make_request_read(pd, bio);
2398 (unsigned long long)bio->bi_iter.bi_sector);
2402 if (!bio->bi_iter.bi_size || (bio->bi_iter.bi_size % CD_FRAMESIZE)) {
2403 pkt_err(pd, "wrong bio size\n");
2408 sector_t zone = get_zone(bio->bi_iter.bi_sector, pd);
2409 sector_t last_zone = get_zone(bio_end_sector(bio) - 1, pd);
2414 split = bio_split(bio, last_zone -
2415 bio->bi_iter.bi_sector,
2417 bio_chain(split, bio);
2419 split = bio;
2422 pkt_make_request_write(bio->bi_disk->queue, split);
2423 } while (split != bio);
2427 bio_io_error(bio);