Lines Matching refs:ci

1541 static struct dm_target_io *alloc_tio(struct clone_info *ci,  in alloc_tio()  argument
1548 clone = bio_alloc_bioset(GFP_NOIO, 0, ci->md->bs); in alloc_tio()
1551 tio->io = ci->io; in alloc_tio()
1558 static void __clone_and_map_simple_bio(struct clone_info *ci, in __clone_and_map_simple_bio() argument
1562 struct dm_target_io *tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_simple_bio()
1567 __bio_clone_fast(clone, ci->bio); in __clone_and_map_simple_bio()
1569 bio_setup_sector(clone, ci->sector, *len); in __clone_and_map_simple_bio()
1574 static void __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti, in __send_duplicate_bios() argument
1580 __clone_and_map_simple_bio(ci, ti, target_bio_nr, len); in __send_duplicate_bios()
1583 static int __send_empty_flush(struct clone_info *ci) in __send_empty_flush() argument
1588 BUG_ON(bio_has_data(ci->bio)); in __send_empty_flush()
1589 while ((ti = dm_table_get_target(ci->map, target_nr++))) in __send_empty_flush()
1590 __send_duplicate_bios(ci, ti, ti->num_flush_bios, NULL); in __send_empty_flush()
1595 static void __clone_and_map_data_bio(struct clone_info *ci, struct dm_target *ti, in __clone_and_map_data_bio() argument
1598 struct bio *bio = ci->bio; in __clone_and_map_data_bio()
1610 tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_data_bio()
1636 static int __send_changing_extent_only(struct clone_info *ci, in __send_changing_extent_only() argument
1645 ti = dm_table_find_target(ci->map, ci->sector); in __send_changing_extent_only()
1660 len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti)); in __send_changing_extent_only()
1662 len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti)); in __send_changing_extent_only()
1664 __send_duplicate_bios(ci, ti, num_bios, &len); in __send_changing_extent_only()
1666 ci->sector += len; in __send_changing_extent_only()
1667 } while (ci->sector_count -= len); in __send_changing_extent_only()
1672 static int __send_discard(struct clone_info *ci) in __send_discard() argument
1674 return __send_changing_extent_only(ci, get_num_discard_bios, in __send_discard()
1678 static int __send_write_same(struct clone_info *ci) in __send_write_same() argument
1680 return __send_changing_extent_only(ci, get_num_write_same_bios, NULL); in __send_write_same()
1686 static int __split_and_process_non_flush(struct clone_info *ci) in __split_and_process_non_flush() argument
1688 struct bio *bio = ci->bio; in __split_and_process_non_flush()
1693 return __send_discard(ci); in __split_and_process_non_flush()
1695 return __send_write_same(ci); in __split_and_process_non_flush()
1697 ti = dm_table_find_target(ci->map, ci->sector); in __split_and_process_non_flush()
1701 len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count); in __split_and_process_non_flush()
1703 __clone_and_map_data_bio(ci, ti, ci->sector, &len); in __split_and_process_non_flush()
1705 ci->sector += len; in __split_and_process_non_flush()
1706 ci->sector_count -= len; in __split_and_process_non_flush()
1717 struct clone_info ci; in __split_and_process_bio() local
1725 ci.map = map; in __split_and_process_bio()
1726 ci.md = md; in __split_and_process_bio()
1727 ci.io = alloc_io(md); in __split_and_process_bio()
1728 ci.io->error = 0; in __split_and_process_bio()
1729 atomic_set(&ci.io->io_count, 1); in __split_and_process_bio()
1730 ci.io->bio = bio; in __split_and_process_bio()
1731 ci.io->md = md; in __split_and_process_bio()
1732 spin_lock_init(&ci.io->endio_lock); in __split_and_process_bio()
1733 ci.sector = bio->bi_iter.bi_sector; in __split_and_process_bio()
1735 start_io_acct(ci.io); in __split_and_process_bio()
1738 ci.bio = &ci.md->flush_bio; in __split_and_process_bio()
1739 ci.sector_count = 0; in __split_and_process_bio()
1740 error = __send_empty_flush(&ci); in __split_and_process_bio()
1743 ci.bio = bio; in __split_and_process_bio()
1744 ci.sector_count = bio_sectors(bio); in __split_and_process_bio()
1745 while (ci.sector_count && !error) in __split_and_process_bio()
1746 error = __split_and_process_non_flush(&ci); in __split_and_process_bio()
1750 dec_pending(ci.io, error); in __split_and_process_bio()