Lines Matching refs:ci
1501 static struct dm_target_io *alloc_tio(struct clone_info *ci, in alloc_tio() argument
1508 clone = bio_alloc_bioset(GFP_NOIO, 0, ci->md->bs); in alloc_tio()
1511 tio->io = ci->io; in alloc_tio()
1518 static void __clone_and_map_simple_bio(struct clone_info *ci, in __clone_and_map_simple_bio() argument
1522 struct dm_target_io *tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_simple_bio()
1527 __bio_clone_fast(clone, ci->bio); in __clone_and_map_simple_bio()
1529 bio_setup_sector(clone, ci->sector, *len); in __clone_and_map_simple_bio()
1534 static void __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti, in __send_duplicate_bios() argument
1540 __clone_and_map_simple_bio(ci, ti, target_bio_nr, len); in __send_duplicate_bios()
1543 static int __send_empty_flush(struct clone_info *ci) in __send_empty_flush() argument
1548 BUG_ON(bio_has_data(ci->bio)); in __send_empty_flush()
1549 while ((ti = dm_table_get_target(ci->map, target_nr++))) in __send_empty_flush()
1550 __send_duplicate_bios(ci, ti, ti->num_flush_bios, NULL); in __send_empty_flush()
1555 static void __clone_and_map_data_bio(struct clone_info *ci, struct dm_target *ti, in __clone_and_map_data_bio() argument
1558 struct bio *bio = ci->bio; in __clone_and_map_data_bio()
1570 tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_data_bio()
1596 static int __send_changing_extent_only(struct clone_info *ci, in __send_changing_extent_only() argument
1605 ti = dm_table_find_target(ci->map, ci->sector); in __send_changing_extent_only()
1620 len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti)); in __send_changing_extent_only()
1622 len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti)); in __send_changing_extent_only()
1624 __send_duplicate_bios(ci, ti, num_bios, &len); in __send_changing_extent_only()
1626 ci->sector += len; in __send_changing_extent_only()
1627 } while (ci->sector_count -= len); in __send_changing_extent_only()
1632 static int __send_discard(struct clone_info *ci) in __send_discard() argument
1634 return __send_changing_extent_only(ci, get_num_discard_bios, in __send_discard()
1638 static int __send_write_same(struct clone_info *ci) in __send_write_same() argument
1640 return __send_changing_extent_only(ci, get_num_write_same_bios, NULL); in __send_write_same()
1646 static int __split_and_process_non_flush(struct clone_info *ci) in __split_and_process_non_flush() argument
1648 struct bio *bio = ci->bio; in __split_and_process_non_flush()
1653 return __send_discard(ci); in __split_and_process_non_flush()
1655 return __send_write_same(ci); in __split_and_process_non_flush()
1657 ti = dm_table_find_target(ci->map, ci->sector); in __split_and_process_non_flush()
1661 len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count); in __split_and_process_non_flush()
1663 __clone_and_map_data_bio(ci, ti, ci->sector, &len); in __split_and_process_non_flush()
1665 ci->sector += len; in __split_and_process_non_flush()
1666 ci->sector_count -= len; in __split_and_process_non_flush()
1677 struct clone_info ci; in __split_and_process_bio() local
1685 ci.map = map; in __split_and_process_bio()
1686 ci.md = md; in __split_and_process_bio()
1687 ci.io = alloc_io(md); in __split_and_process_bio()
1688 ci.io->error = 0; in __split_and_process_bio()
1689 atomic_set(&ci.io->io_count, 1); in __split_and_process_bio()
1690 ci.io->bio = bio; in __split_and_process_bio()
1691 ci.io->md = md; in __split_and_process_bio()
1692 spin_lock_init(&ci.io->endio_lock); in __split_and_process_bio()
1693 ci.sector = bio->bi_iter.bi_sector; in __split_and_process_bio()
1695 start_io_acct(ci.io); in __split_and_process_bio()
1698 ci.bio = &ci.md->flush_bio; in __split_and_process_bio()
1699 ci.sector_count = 0; in __split_and_process_bio()
1700 error = __send_empty_flush(&ci); in __split_and_process_bio()
1703 ci.bio = bio; in __split_and_process_bio()
1704 ci.sector_count = bio_sectors(bio); in __split_and_process_bio()
1705 while (ci.sector_count && !error) in __split_and_process_bio()
1706 error = __split_and_process_non_flush(&ci); in __split_and_process_bio()
1710 dec_pending(ci.io, error); in __split_and_process_bio()