Lines Matching refs:ci
1429 static struct dm_target_io *alloc_tio(struct clone_info *ci, in alloc_tio() argument
1436 clone = bio_alloc_bioset(GFP_NOIO, 0, ci->md->bs); in alloc_tio()
1439 tio->io = ci->io; in alloc_tio()
1446 static void __clone_and_map_simple_bio(struct clone_info *ci, in __clone_and_map_simple_bio() argument
1450 struct dm_target_io *tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_simple_bio()
1455 __bio_clone_fast(clone, ci->bio); in __clone_and_map_simple_bio()
1457 bio_setup_sector(clone, ci->sector, *len); in __clone_and_map_simple_bio()
1462 static void __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti, in __send_duplicate_bios() argument
1468 __clone_and_map_simple_bio(ci, ti, target_bio_nr, len); in __send_duplicate_bios()
1471 static int __send_empty_flush(struct clone_info *ci) in __send_empty_flush() argument
1476 BUG_ON(bio_has_data(ci->bio)); in __send_empty_flush()
1477 while ((ti = dm_table_get_target(ci->map, target_nr++))) in __send_empty_flush()
1478 __send_duplicate_bios(ci, ti, ti->num_flush_bios, NULL); in __send_empty_flush()
1483 static void __clone_and_map_data_bio(struct clone_info *ci, struct dm_target *ti, in __clone_and_map_data_bio() argument
1486 struct bio *bio = ci->bio; in __clone_and_map_data_bio()
1498 tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_data_bio()
1524 static int __send_changing_extent_only(struct clone_info *ci, in __send_changing_extent_only() argument
1533 ti = dm_table_find_target(ci->map, ci->sector); in __send_changing_extent_only()
1548 len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti)); in __send_changing_extent_only()
1550 len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti)); in __send_changing_extent_only()
1552 __send_duplicate_bios(ci, ti, num_bios, &len); in __send_changing_extent_only()
1554 ci->sector += len; in __send_changing_extent_only()
1555 } while (ci->sector_count -= len); in __send_changing_extent_only()
1560 static int __send_discard(struct clone_info *ci) in __send_discard() argument
1562 return __send_changing_extent_only(ci, get_num_discard_bios, in __send_discard()
1566 static int __send_write_same(struct clone_info *ci) in __send_write_same() argument
1568 return __send_changing_extent_only(ci, get_num_write_same_bios, NULL); in __send_write_same()
1574 static int __split_and_process_non_flush(struct clone_info *ci) in __split_and_process_non_flush() argument
1576 struct bio *bio = ci->bio; in __split_and_process_non_flush()
1581 return __send_discard(ci); in __split_and_process_non_flush()
1583 return __send_write_same(ci); in __split_and_process_non_flush()
1585 ti = dm_table_find_target(ci->map, ci->sector); in __split_and_process_non_flush()
1589 len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count); in __split_and_process_non_flush()
1591 __clone_and_map_data_bio(ci, ti, ci->sector, &len); in __split_and_process_non_flush()
1593 ci->sector += len; in __split_and_process_non_flush()
1594 ci->sector_count -= len; in __split_and_process_non_flush()
1605 struct clone_info ci; in __split_and_process_bio() local
1613 ci.map = map; in __split_and_process_bio()
1614 ci.md = md; in __split_and_process_bio()
1615 ci.io = alloc_io(md); in __split_and_process_bio()
1616 ci.io->error = 0; in __split_and_process_bio()
1617 atomic_set(&ci.io->io_count, 1); in __split_and_process_bio()
1618 ci.io->bio = bio; in __split_and_process_bio()
1619 ci.io->md = md; in __split_and_process_bio()
1620 spin_lock_init(&ci.io->endio_lock); in __split_and_process_bio()
1621 ci.sector = bio->bi_iter.bi_sector; in __split_and_process_bio()
1623 start_io_acct(ci.io); in __split_and_process_bio()
1626 ci.bio = &ci.md->flush_bio; in __split_and_process_bio()
1627 ci.sector_count = 0; in __split_and_process_bio()
1628 error = __send_empty_flush(&ci); in __split_and_process_bio()
1631 ci.bio = bio; in __split_and_process_bio()
1632 ci.sector_count = bio_sectors(bio); in __split_and_process_bio()
1633 while (ci.sector_count && !error) in __split_and_process_bio()
1634 error = __split_and_process_non_flush(&ci); in __split_and_process_bio()
1638 dec_pending(ci.io, error); in __split_and_process_bio()