• Home
  • Raw
  • Download

Lines Matching refs:ci

1109 static struct dm_target_io *alloc_tio(struct clone_info *ci,  in alloc_tio()  argument
1116 clone = bio_alloc_bioset(GFP_NOIO, 0, ci->md->bs); in alloc_tio()
1119 tio->io = ci->io; in alloc_tio()
1126 static void __clone_and_map_simple_bio(struct clone_info *ci, in __clone_and_map_simple_bio() argument
1130 struct dm_target_io *tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_simple_bio()
1135 __bio_clone_fast(clone, ci->bio); in __clone_and_map_simple_bio()
1137 bio_setup_sector(clone, ci->sector, *len); in __clone_and_map_simple_bio()
1142 static void __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti, in __send_duplicate_bios() argument
1148 __clone_and_map_simple_bio(ci, ti, target_bio_nr, len); in __send_duplicate_bios()
1151 static int __send_empty_flush(struct clone_info *ci) in __send_empty_flush() argument
1156 BUG_ON(bio_has_data(ci->bio)); in __send_empty_flush()
1157 while ((ti = dm_table_get_target(ci->map, target_nr++))) in __send_empty_flush()
1158 __send_duplicate_bios(ci, ti, ti->num_flush_bios, NULL); in __send_empty_flush()
1163 static int __clone_and_map_data_bio(struct clone_info *ci, struct dm_target *ti, in __clone_and_map_data_bio() argument
1166 struct bio *bio = ci->bio; in __clone_and_map_data_bio()
1179 tio = alloc_tio(ci, ti, target_bio_nr); in __clone_and_map_data_bio()
1211 static int __send_changing_extent_only(struct clone_info *ci, in __send_changing_extent_only() argument
1220 ti = dm_table_find_target(ci->map, ci->sector); in __send_changing_extent_only()
1235 len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti)); in __send_changing_extent_only()
1237 len = min((sector_t)ci->sector_count, max_io_len(ci->sector, ti)); in __send_changing_extent_only()
1239 __send_duplicate_bios(ci, ti, num_bios, &len); in __send_changing_extent_only()
1241 ci->sector += len; in __send_changing_extent_only()
1242 } while (ci->sector_count -= len); in __send_changing_extent_only()
1247 static int __send_discard(struct clone_info *ci) in __send_discard() argument
1249 return __send_changing_extent_only(ci, get_num_discard_bios, in __send_discard()
1253 static int __send_write_same(struct clone_info *ci) in __send_write_same() argument
1255 return __send_changing_extent_only(ci, get_num_write_same_bios, NULL); in __send_write_same()
1261 static int __split_and_process_non_flush(struct clone_info *ci) in __split_and_process_non_flush() argument
1263 struct bio *bio = ci->bio; in __split_and_process_non_flush()
1269 return __send_discard(ci); in __split_and_process_non_flush()
1271 return __send_write_same(ci); in __split_and_process_non_flush()
1273 ti = dm_table_find_target(ci->map, ci->sector); in __split_and_process_non_flush()
1277 len = min_t(sector_t, max_io_len(ci->sector, ti), ci->sector_count); in __split_and_process_non_flush()
1279 r = __clone_and_map_data_bio(ci, ti, ci->sector, &len); in __split_and_process_non_flush()
1283 ci->sector += len; in __split_and_process_non_flush()
1284 ci->sector_count -= len; in __split_and_process_non_flush()
1295 struct clone_info ci; in __split_and_process_bio() local
1303 ci.map = map; in __split_and_process_bio()
1304 ci.md = md; in __split_and_process_bio()
1305 ci.io = alloc_io(md); in __split_and_process_bio()
1306 ci.io->error = 0; in __split_and_process_bio()
1307 atomic_set(&ci.io->io_count, 1); in __split_and_process_bio()
1308 ci.io->bio = bio; in __split_and_process_bio()
1309 ci.io->md = md; in __split_and_process_bio()
1310 spin_lock_init(&ci.io->endio_lock); in __split_and_process_bio()
1311 ci.sector = bio->bi_iter.bi_sector; in __split_and_process_bio()
1313 start_io_acct(ci.io); in __split_and_process_bio()
1316 ci.bio = &ci.md->flush_bio; in __split_and_process_bio()
1317 ci.sector_count = 0; in __split_and_process_bio()
1318 error = __send_empty_flush(&ci); in __split_and_process_bio()
1321 ci.bio = bio; in __split_and_process_bio()
1322 ci.sector_count = bio_sectors(bio); in __split_and_process_bio()
1323 while (ci.sector_count && !error) in __split_and_process_bio()
1324 error = __split_and_process_non_flush(&ci); in __split_and_process_bio()
1328 dec_pending(ci.io, error); in __split_and_process_bio()