Lines Matching defs:bio

28  * Its data is defined by the struct packet_iosched and includes two bio
670 if (s <= tmp->bio->bi_iter.bi_sector)
679 if (s > tmp->bio->bi_iter.bi_sector) {
684 BUG_ON(s > tmp->bio->bi_iter.bi_sector);
695 sector_t s = node->bio->bi_iter.bi_sector;
701 if (s < tmp->bio->bi_iter.bi_sector)
825 * Queue a bio for processing by the low-level CD device. Must be called
828 static void pkt_queue_bio(struct pktcdvd_device *pd, struct bio *bio)
831 if (bio_data_dir(bio) == READ)
832 bio_list_add(&pd->iosched.read_queue, bio);
834 bio_list_add(&pd->iosched.write_queue, bio);
866 struct bio *bio;
880 bio = bio_list_peek(&pd->iosched.write_queue);
882 if (bio && (bio->bi_iter.bi_sector ==
905 bio = bio_list_pop(&pd->iosched.write_queue);
907 bio = bio_list_pop(&pd->iosched.read_queue);
910 if (!bio)
913 if (bio_data_dir(bio) == READ)
915 bio->bi_iter.bi_size >> 10;
918 pd->iosched.last_write = bio_end_sector(bio);
933 submit_bio_noacct(bio);
966 static void pkt_end_io_read(struct bio *bio)
968 struct packet_data *pkt = bio->bi_private;
972 dev_dbg(disk_to_dev(pd->disk), "bio=%p sec0=%llx sec=%llx err=%d\n",
973 bio, pkt->sector, bio->bi_iter.bi_sector, bio->bi_status);
975 if (bio->bi_status)
977 bio_uninit(bio);
985 static void pkt_end_io_packet_write(struct bio *bio)
987 struct packet_data *pkt = bio->bi_private;
991 dev_dbg(disk_to_dev(pd->disk), "id=%d, err=%d\n", pkt->id, bio->bi_status);
995 bio_uninit(bio);
1009 struct bio *bio;
1023 bio_list_for_each(bio, &pkt->orig_bios) {
1024 int first_frame = (bio->bi_iter.bi_sector - pkt->sector) /
1026 int num_frames = bio->bi_iter.bi_size / CD_FRAMESIZE;
1049 bio = pkt->r_bios[f];
1050 bio_init(bio, pd->bdev, bio->bi_inline_vecs, 1, REQ_OP_READ);
1051 bio->bi_iter.bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9);
1052 bio->bi_end_io = pkt_end_io_read;
1053 bio->bi_private = pkt;
1059 if (!bio_add_page(bio, pkt->pages[p], CD_FRAMESIZE, offset))
1063 pkt_queue_bio(pd, bio);
1124 struct bio *bio = NULL;
1148 bio = node->bio;
1149 zone = get_zone(bio->bi_iter.bi_sector, pd);
1152 bio = NULL;
1168 if (!bio) {
1169 dev_dbg(ddev, "no bio\n");
1187 sector_t tmp = get_zone(node->bio->bi_iter.bi_sector, pd);
1189 bio = node->bio;
1195 bio_list_add(&pkt->orig_bios, bio);
1196 pkt->write_size += bio->bi_iter.bi_size / CD_FRAMESIZE;
1223 * @src: source bio list
1224 * @dst: destination bio list
1230 static void bio_list_copy_data(struct bio *dst, struct bio *src)
1257 * Assemble a bio to write one packet and queue the bio for processing
1304 struct bio *bio;
1310 while ((bio = bio_list_pop(&pkt->orig_bios))) {
1311 bio->bi_status = status;
1312 bio_endio(bio);
2310 static void pkt_end_io_read_cloned(struct bio *bio)
2312 struct packet_stacked_data *psd = bio->bi_private;
2315 psd->bio->bi_status = bio->bi_status;
2316 bio_put(bio);
2317 bio_endio(psd->bio);
2322 static void pkt_make_request_read(struct pktcdvd_device *pd, struct bio *bio)
2324 struct bio *cloned_bio =
2325 bio_alloc_clone(pd->bdev, bio, GFP_NOIO, &pkt_bio_set);
2329 psd->bio = bio;
2332 pd->stats.secs_r += bio_sectors(bio);
2336 static void pkt_make_request_write(struct request_queue *q, struct bio *bio)
2344 zone = get_zone(bio->bi_iter.bi_sector, pd);
2348 * just append this bio to that packet.
2357 bio_list_add(&pkt->orig_bios, bio);
2359 bio->bi_iter.bi_size / CD_FRAMESIZE;
2377 * Test if there is enough room left in the bio work queue
2402 * No matching packet found. Store the bio in the work queue.
2405 node->bio = bio;
2428 static void pkt_submit_bio(struct bio *bio)
2430 struct pktcdvd_device *pd = bio->bi_bdev->bd_disk->queue->queuedata;
2432 struct bio *split;
2434 bio = bio_split_to_limits(bio);
2435 if (!bio)
2439 bio->bi_iter.bi_sector, bio_end_sector(bio));
2444 if (bio_data_dir(bio) == READ) {
2445 pkt_make_request_read(pd, bio);
2450 dev_notice(ddev, "WRITE for ro device (%llu)\n", bio->bi_iter.bi_sector);
2454 if (!bio->bi_iter.bi_size || (bio->bi_iter.bi_size % CD_FRAMESIZE)) {
2455 dev_err(ddev, "wrong bio size\n");
2460 sector_t zone = get_zone(bio->bi_iter.bi_sector, pd);
2461 sector_t last_zone = get_zone(bio_end_sector(bio) - 1, pd);
2466 split = bio_split(bio, last_zone -
2467 bio->bi_iter.bi_sector,
2469 bio_chain(split, bio);
2471 split = bio;
2474 pkt_make_request_write(bio->bi_bdev->bd_disk->queue, split);
2475 } while (split != bio);
2479 bio_io_error(bio);