Lines Matching refs:bio
121 static void queue_bio(struct mirror_set *ms, struct bio *bio, int rw) in queue_bio() argument
130 bio_list_add(bl, bio); in queue_bio()
140 struct bio *bio; in dispatch_bios() local
142 while ((bio = bio_list_pop(bio_list))) in dispatch_bios()
143 queue_bio(ms, bio, WRITE); in dispatch_bios()
163 static struct mirror *bio_get_m(struct bio *bio) in bio_get_m() argument
165 return (struct mirror *) bio->bi_next; in bio_get_m()
168 static void bio_set_m(struct bio *bio, struct mirror *m) in bio_set_m() argument
170 bio->bi_next = (struct bio *) m; in bio_set_m()
443 static int mirror_available(struct mirror_set *ms, struct bio *bio) in mirror_available() argument
446 region_t region = dm_rh_bio_to_region(ms->rh, bio); in mirror_available()
449 return choose_mirror(ms, bio->bi_iter.bi_sector) ? 1 : 0; in mirror_available()
457 static sector_t map_sector(struct mirror *m, struct bio *bio) in map_sector() argument
459 if (unlikely(!bio->bi_iter.bi_size)) in map_sector()
461 return m->offset + dm_target_offset(m->ms->ti, bio->bi_iter.bi_sector); in map_sector()
464 static void map_bio(struct mirror *m, struct bio *bio) in map_bio() argument
466 bio->bi_bdev = m->dev->bdev; in map_bio()
467 bio->bi_iter.bi_sector = map_sector(m, bio); in map_bio()
471 struct bio *bio) in map_region() argument
474 io->sector = map_sector(m, bio); in map_region()
475 io->count = bio_sectors(bio); in map_region()
478 static void hold_bio(struct mirror_set *ms, struct bio *bio) in hold_bio() argument
493 bio->bi_error = DM_ENDIO_REQUEUE; in hold_bio()
495 bio->bi_error = -EIO; in hold_bio()
497 bio_endio(bio); in hold_bio()
504 bio_list_add(&ms->holds, bio); in hold_bio()
513 struct bio *bio = context; in read_callback() local
516 m = bio_get_m(bio); in read_callback()
517 bio_set_m(bio, NULL); in read_callback()
520 bio_endio(bio); in read_callback()
526 if (likely(default_ok(m)) || mirror_available(m->ms, bio)) { in read_callback()
530 queue_bio(m->ms, bio, bio_rw(bio)); in read_callback()
536 bio_io_error(bio); in read_callback()
540 static void read_async_bio(struct mirror *m, struct bio *bio) in read_async_bio() argument
546 .mem.ptr.bio = bio, in read_async_bio()
548 .notify.context = bio, in read_async_bio()
552 map_region(&io, m, bio); in read_async_bio()
553 bio_set_m(bio, m); in read_async_bio()
567 struct bio *bio; in do_reads() local
570 while ((bio = bio_list_pop(reads))) { in do_reads()
571 region = dm_rh_bio_to_region(ms->rh, bio); in do_reads()
578 m = choose_mirror(ms, bio->bi_iter.bi_sector); in do_reads()
583 read_async_bio(m, bio); in do_reads()
585 bio_io_error(bio); in do_reads()
604 struct bio *bio = (struct bio *) context; in write_callback() local
609 ms = bio_get_m(bio)->ms; in write_callback()
610 bio_set_m(bio, NULL); in write_callback()
619 bio_endio(bio); in write_callback()
627 if (bio->bi_rw & REQ_DISCARD) { in write_callback()
628 bio->bi_error = -EOPNOTSUPP; in write_callback()
629 bio_endio(bio); in write_callback()
645 bio_list_add(&ms->failures, bio); in write_callback()
651 static void do_write(struct mirror_set *ms, struct bio *bio) in do_write() argument
657 .bi_rw = WRITE | (bio->bi_rw & WRITE_FLUSH_FUA), in do_write()
659 .mem.ptr.bio = bio, in do_write()
661 .notify.context = bio, in do_write()
665 if (bio->bi_rw & REQ_DISCARD) { in do_write()
672 map_region(dest++, m, bio); in do_write()
678 bio_set_m(bio, get_default_mirror(ms)); in do_write()
686 struct bio *bio; in do_writes() local
703 while ((bio = bio_list_pop(writes))) { in do_writes()
704 if ((bio->bi_rw & REQ_FLUSH) || in do_writes()
705 (bio->bi_rw & REQ_DISCARD)) { in do_writes()
706 bio_list_add(&sync, bio); in do_writes()
710 region = dm_rh_bio_to_region(ms->rh, bio); in do_writes()
714 bio_list_add(&requeue, bio); in do_writes()
734 bio_list_add(this_list, bio); in do_writes()
772 while ((bio = bio_list_pop(&sync))) in do_writes()
773 do_write(ms, bio); in do_writes()
775 while ((bio = bio_list_pop(&recover))) in do_writes()
776 dm_rh_delay(ms->rh, bio); in do_writes()
778 while ((bio = bio_list_pop(&nosync))) { in do_writes()
781 bio_list_add(&ms->failures, bio); in do_writes()
785 map_bio(get_default_mirror(ms), bio); in do_writes()
786 generic_make_request(bio); in do_writes()
793 struct bio *bio; in do_failures() local
815 while ((bio = bio_list_pop(failures))) { in do_failures()
818 dm_rh_mark_nosync(ms->rh, bio); in do_failures()
835 bio_io_error(bio); in do_failures()
837 hold_bio(ms, bio); in do_failures()
839 bio_endio(bio); in do_failures()
1191 static int mirror_map(struct dm_target *ti, struct bio *bio) in mirror_map() argument
1193 int r, rw = bio_rw(bio); in mirror_map()
1198 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_map()
1204 bio_record->write_region = dm_rh_bio_to_region(ms->rh, bio); in mirror_map()
1205 queue_bio(ms, bio, rw); in mirror_map()
1209 r = log->type->in_sync(log, dm_rh_bio_to_region(ms->rh, bio), 0); in mirror_map()
1220 queue_bio(ms, bio, rw); in mirror_map()
1228 m = choose_mirror(ms, bio->bi_iter.bi_sector); in mirror_map()
1232 dm_bio_record(&bio_record->details, bio); in mirror_map()
1235 map_bio(m, bio); in mirror_map()
1240 static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error) in mirror_end_io() argument
1242 int rw = bio_rw(bio); in mirror_end_io()
1247 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_end_io()
1253 if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))) in mirror_end_io()
1261 if ((error == -EWOULDBLOCK) && (bio->bi_rw & REQ_RAHEAD)) in mirror_end_io()
1286 if (default_ok(m) || mirror_available(ms, bio)) { in mirror_end_io()
1289 dm_bio_restore(bd, bio); in mirror_end_io()
1292 queue_bio(ms, bio, rw); in mirror_end_io()
1310 struct bio *bio; in mirror_presuspend() local
1325 while ((bio = bio_list_pop(&holds))) in mirror_presuspend()
1326 hold_bio(ms, bio); in mirror_presuspend()