Lines Matching refs:bio
126 static void queue_bio(struct mirror_set *ms, struct bio *bio, int rw) in queue_bio() argument
135 bio_list_add(bl, bio); in queue_bio()
144 struct bio *bio; in dispatch_bios() local
146 while ((bio = bio_list_pop(bio_list))) in dispatch_bios()
147 queue_bio(ms, bio, WRITE); in dispatch_bios()
167 static struct mirror *bio_get_m(struct bio *bio) in bio_get_m() argument
169 return (struct mirror *) bio->bi_next; in bio_get_m()
172 static void bio_set_m(struct bio *bio, struct mirror *m) in bio_set_m() argument
174 bio->bi_next = (struct bio *) m; in bio_set_m()
444 static int mirror_available(struct mirror_set *ms, struct bio *bio) in mirror_available() argument
447 region_t region = dm_rh_bio_to_region(ms->rh, bio); in mirror_available()
450 return choose_mirror(ms, bio->bi_iter.bi_sector) ? 1 : 0; in mirror_available()
458 static sector_t map_sector(struct mirror *m, struct bio *bio) in map_sector() argument
460 if (unlikely(!bio->bi_iter.bi_size)) in map_sector()
462 return m->offset + dm_target_offset(m->ms->ti, bio->bi_iter.bi_sector); in map_sector()
465 static void map_bio(struct mirror *m, struct bio *bio) in map_bio() argument
467 bio_set_dev(bio, m->dev->bdev); in map_bio()
468 bio->bi_iter.bi_sector = map_sector(m, bio); in map_bio()
472 struct bio *bio) in map_region() argument
475 io->sector = map_sector(m, bio); in map_region()
476 io->count = bio_sectors(bio); in map_region()
479 static void hold_bio(struct mirror_set *ms, struct bio *bio) in hold_bio() argument
494 bio->bi_status = BLK_STS_DM_REQUEUE; in hold_bio()
496 bio->bi_status = BLK_STS_IOERR; in hold_bio()
498 bio_endio(bio); in hold_bio()
505 bio_list_add(&ms->holds, bio); in hold_bio()
516 struct bio *bio = context; in read_callback() local
519 m = bio_get_m(bio); in read_callback()
520 bio_set_m(bio, NULL); in read_callback()
523 bio_endio(bio); in read_callback()
529 if (likely(default_ok(m)) || mirror_available(m->ms, bio)) { in read_callback()
532 queue_bio(m->ms, bio, bio_data_dir(bio)); in read_callback()
538 bio_io_error(bio); in read_callback()
542 static void read_async_bio(struct mirror *m, struct bio *bio) in read_async_bio() argument
548 .mem.ptr.bio = bio, in read_async_bio()
550 .notify.context = bio, in read_async_bio()
554 map_region(&io, m, bio); in read_async_bio()
555 bio_set_m(bio, m); in read_async_bio()
569 struct bio *bio; in do_reads() local
572 while ((bio = bio_list_pop(reads))) { in do_reads()
573 region = dm_rh_bio_to_region(ms->rh, bio); in do_reads()
580 m = choose_mirror(ms, bio->bi_iter.bi_sector); in do_reads()
585 read_async_bio(m, bio); in do_reads()
587 bio_io_error(bio); in do_reads()
606 struct bio *bio = context; in write_callback() local
611 ms = bio_get_m(bio)->ms; in write_callback()
612 bio_set_m(bio, NULL); in write_callback()
621 bio_endio(bio); in write_callback()
629 if (bio_op(bio) == REQ_OP_DISCARD) { in write_callback()
630 bio->bi_status = BLK_STS_NOTSUPP; in write_callback()
631 bio_endio(bio); in write_callback()
647 bio_list_add(&ms->failures, bio); in write_callback()
653 static void do_write(struct mirror_set *ms, struct bio *bio) in do_write() argument
658 blk_opf_t op_flags = bio->bi_opf & (REQ_FUA | REQ_PREFLUSH | REQ_ATOMIC); in do_write()
662 .mem.ptr.bio = bio, in do_write()
664 .notify.context = bio, in do_write()
668 if (bio_op(bio) == REQ_OP_DISCARD) { in do_write()
675 map_region(dest++, m, bio); in do_write()
681 bio_set_m(bio, get_default_mirror(ms)); in do_write()
689 struct bio *bio; in do_writes() local
706 while ((bio = bio_list_pop(writes))) { in do_writes()
707 if ((bio->bi_opf & REQ_PREFLUSH) || in do_writes()
708 (bio_op(bio) == REQ_OP_DISCARD)) { in do_writes()
709 bio_list_add(&sync, bio); in do_writes()
713 region = dm_rh_bio_to_region(ms->rh, bio); in do_writes()
717 bio_list_add(&requeue, bio); in do_writes()
737 bio_list_add(this_list, bio); in do_writes()
775 while ((bio = bio_list_pop(&sync))) in do_writes()
776 do_write(ms, bio); in do_writes()
778 while ((bio = bio_list_pop(&recover))) in do_writes()
779 dm_rh_delay(ms->rh, bio); in do_writes()
781 while ((bio = bio_list_pop(&nosync))) { in do_writes()
784 bio_list_add(&ms->failures, bio); in do_writes()
788 map_bio(get_default_mirror(ms), bio); in do_writes()
789 submit_bio_noacct(bio); in do_writes()
796 struct bio *bio; in do_failures() local
818 while ((bio = bio_list_pop(failures))) { in do_failures()
821 dm_rh_mark_nosync(ms->rh, bio); in do_failures()
838 bio_io_error(bio); in do_failures()
840 hold_bio(ms, bio); in do_failures()
842 bio_endio(bio); in do_failures()
1195 static int mirror_map(struct dm_target *ti, struct bio *bio) in mirror_map() argument
1197 int r, rw = bio_data_dir(bio); in mirror_map()
1202 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_map()
1208 bio_record->write_region = dm_rh_bio_to_region(ms->rh, bio); in mirror_map()
1209 queue_bio(ms, bio, rw); in mirror_map()
1213 r = log->type->in_sync(log, dm_rh_bio_to_region(ms->rh, bio), 0); in mirror_map()
1221 if (bio->bi_opf & REQ_RAHEAD) in mirror_map()
1224 queue_bio(ms, bio, rw); in mirror_map()
1232 m = choose_mirror(ms, bio->bi_iter.bi_sector); in mirror_map()
1236 dm_bio_record(&bio_record->details, bio); in mirror_map()
1239 map_bio(m, bio); in mirror_map()
1244 static int mirror_end_io(struct dm_target *ti, struct bio *bio, in mirror_end_io() argument
1247 int rw = bio_data_dir(bio); in mirror_end_io()
1252 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_end_io()
1258 if (!(bio->bi_opf & REQ_PREFLUSH) && in mirror_end_io()
1259 bio_op(bio) != REQ_OP_DISCARD) in mirror_end_io()
1267 if (bio->bi_opf & REQ_RAHEAD) in mirror_end_io()
1292 if (default_ok(m) || mirror_available(ms, bio)) { in mirror_end_io()
1295 dm_bio_restore(bd, bio); in mirror_end_io()
1297 bio->bi_status = 0; in mirror_end_io()
1299 queue_bio(ms, bio, rw); in mirror_end_io()
1317 struct bio *bio; in mirror_presuspend() local
1332 while ((bio = bio_list_pop(&holds))) in mirror_presuspend()
1333 hold_bio(ms, bio); in mirror_presuspend()