Lines Matching refs:bio
119 static void queue_bio(struct mirror_set *ms, struct bio *bio, int rw) in queue_bio() argument
128 bio_list_add(bl, bio); in queue_bio()
138 struct bio *bio; in dispatch_bios() local
140 while ((bio = bio_list_pop(bio_list))) in dispatch_bios()
141 queue_bio(ms, bio, WRITE); in dispatch_bios()
161 static struct mirror *bio_get_m(struct bio *bio) in bio_get_m() argument
163 return (struct mirror *) bio->bi_next; in bio_get_m()
166 static void bio_set_m(struct bio *bio, struct mirror *m) in bio_set_m() argument
168 bio->bi_next = (struct bio *) m; in bio_set_m()
429 static int mirror_available(struct mirror_set *ms, struct bio *bio) in mirror_available() argument
432 region_t region = dm_rh_bio_to_region(ms->rh, bio); in mirror_available()
435 return choose_mirror(ms, bio->bi_iter.bi_sector) ? 1 : 0; in mirror_available()
443 static sector_t map_sector(struct mirror *m, struct bio *bio) in map_sector() argument
445 if (unlikely(!bio->bi_iter.bi_size)) in map_sector()
447 return m->offset + dm_target_offset(m->ms->ti, bio->bi_iter.bi_sector); in map_sector()
450 static void map_bio(struct mirror *m, struct bio *bio) in map_bio() argument
452 bio->bi_bdev = m->dev->bdev; in map_bio()
453 bio->bi_iter.bi_sector = map_sector(m, bio); in map_bio()
457 struct bio *bio) in map_region() argument
460 io->sector = map_sector(m, bio); in map_region()
461 io->count = bio_sectors(bio); in map_region()
464 static void hold_bio(struct mirror_set *ms, struct bio *bio) in hold_bio() argument
479 bio_endio(bio, DM_ENDIO_REQUEUE); in hold_bio()
481 bio_endio(bio, -EIO); in hold_bio()
488 bio_list_add(&ms->holds, bio); in hold_bio()
497 struct bio *bio = context; in read_callback() local
500 m = bio_get_m(bio); in read_callback()
501 bio_set_m(bio, NULL); in read_callback()
504 bio_endio(bio, 0); in read_callback()
510 if (likely(default_ok(m)) || mirror_available(m->ms, bio)) { in read_callback()
514 queue_bio(m->ms, bio, bio_rw(bio)); in read_callback()
520 bio_endio(bio, -EIO); in read_callback()
524 static void read_async_bio(struct mirror *m, struct bio *bio) in read_async_bio() argument
530 .mem.ptr.bio = bio, in read_async_bio()
532 .notify.context = bio, in read_async_bio()
536 map_region(&io, m, bio); in read_async_bio()
537 bio_set_m(bio, m); in read_async_bio()
551 struct bio *bio; in do_reads() local
554 while ((bio = bio_list_pop(reads))) { in do_reads()
555 region = dm_rh_bio_to_region(ms->rh, bio); in do_reads()
562 m = choose_mirror(ms, bio->bi_iter.bi_sector); in do_reads()
567 read_async_bio(m, bio); in do_reads()
569 bio_endio(bio, -EIO); in do_reads()
588 struct bio *bio = (struct bio *) context; in write_callback() local
593 ms = bio_get_m(bio)->ms; in write_callback()
594 bio_set_m(bio, NULL); in write_callback()
603 bio_endio(bio, ret); in write_callback()
611 if (bio->bi_rw & REQ_DISCARD) { in write_callback()
612 bio_endio(bio, -EOPNOTSUPP); in write_callback()
628 bio_list_add(&ms->failures, bio); in write_callback()
634 static void do_write(struct mirror_set *ms, struct bio *bio) in do_write() argument
640 .bi_rw = WRITE | (bio->bi_rw & WRITE_FLUSH_FUA), in do_write()
642 .mem.ptr.bio = bio, in do_write()
644 .notify.context = bio, in do_write()
648 if (bio->bi_rw & REQ_DISCARD) { in do_write()
655 map_region(dest++, m, bio); in do_write()
661 bio_set_m(bio, get_default_mirror(ms)); in do_write()
669 struct bio *bio; in do_writes() local
686 while ((bio = bio_list_pop(writes))) { in do_writes()
687 if ((bio->bi_rw & REQ_FLUSH) || in do_writes()
688 (bio->bi_rw & REQ_DISCARD)) { in do_writes()
689 bio_list_add(&sync, bio); in do_writes()
693 region = dm_rh_bio_to_region(ms->rh, bio); in do_writes()
697 bio_list_add(&requeue, bio); in do_writes()
717 bio_list_add(this_list, bio); in do_writes()
755 while ((bio = bio_list_pop(&sync))) in do_writes()
756 do_write(ms, bio); in do_writes()
758 while ((bio = bio_list_pop(&recover))) in do_writes()
759 dm_rh_delay(ms->rh, bio); in do_writes()
761 while ((bio = bio_list_pop(&nosync))) { in do_writes()
764 bio_list_add(&ms->failures, bio); in do_writes()
768 map_bio(get_default_mirror(ms), bio); in do_writes()
769 generic_make_request(bio); in do_writes()
776 struct bio *bio; in do_failures() local
798 while ((bio = bio_list_pop(failures))) { in do_failures()
801 dm_rh_mark_nosync(ms->rh, bio); in do_failures()
813 bio_endio(bio, -EIO); in do_failures()
815 hold_bio(ms, bio); in do_failures()
817 bio_endio(bio, 0); in do_failures()
1156 static int mirror_map(struct dm_target *ti, struct bio *bio) in mirror_map() argument
1158 int r, rw = bio_rw(bio); in mirror_map()
1163 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_map()
1169 bio_record->write_region = dm_rh_bio_to_region(ms->rh, bio); in mirror_map()
1170 queue_bio(ms, bio, rw); in mirror_map()
1174 r = log->type->in_sync(log, dm_rh_bio_to_region(ms->rh, bio), 0); in mirror_map()
1185 queue_bio(ms, bio, rw); in mirror_map()
1193 m = choose_mirror(ms, bio->bi_iter.bi_sector); in mirror_map()
1197 dm_bio_record(&bio_record->details, bio); in mirror_map()
1200 map_bio(m, bio); in mirror_map()
1205 static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error) in mirror_end_io() argument
1207 int rw = bio_rw(bio); in mirror_end_io()
1212 dm_per_bio_data(bio, sizeof(struct dm_raid1_bio_record)); in mirror_end_io()
1218 if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))) in mirror_end_io()
1226 if ((error == -EWOULDBLOCK) && (bio->bi_rw & REQ_RAHEAD)) in mirror_end_io()
1251 if (default_ok(m) || mirror_available(ms, bio)) { in mirror_end_io()
1254 dm_bio_restore(bd, bio); in mirror_end_io()
1257 atomic_inc(&bio->bi_remaining); in mirror_end_io()
1259 queue_bio(ms, bio, rw); in mirror_end_io()
1277 struct bio *bio; in mirror_presuspend() local
1292 while ((bio = bio_list_pop(&holds))) in mirror_presuspend()
1293 hold_bio(ms, bio); in mirror_presuspend()