Lines Matching refs:bio

259 static inline void remap_to_source(struct clone *clone, struct bio *bio)  in remap_to_source()  argument
261 bio_set_dev(bio, clone->source_dev->bdev); in remap_to_source()
264 static inline void remap_to_dest(struct clone *clone, struct bio *bio) in remap_to_dest() argument
266 bio_set_dev(bio, clone->dest_dev->bdev); in remap_to_dest()
269 static bool bio_triggers_commit(struct clone *clone, struct bio *bio) in bio_triggers_commit() argument
271 return op_is_flush(bio->bi_opf) && in bio_triggers_commit()
282 static inline unsigned long bio_to_region(struct clone *clone, struct bio *bio) in bio_to_region() argument
284 return (bio->bi_iter.bi_sector >> clone->region_shift); in bio_to_region()
288 static void bio_region_range(struct clone *clone, struct bio *bio, in bio_region_range() argument
293 *rs = dm_sector_div_up(bio->bi_iter.bi_sector, clone->region_size); in bio_region_range()
294 end = bio_end_sector(bio) >> clone->region_shift; in bio_region_range()
303 static inline bool is_overwrite_bio(struct clone *clone, struct bio *bio) in is_overwrite_bio() argument
305 return (bio_data_dir(bio) == WRITE && bio_sectors(bio) == clone->region_size); in is_overwrite_bio()
310 struct bio *bio; in fail_bios() local
312 while ((bio = bio_list_pop(bios))) { in fail_bios()
313 bio->bi_status = status; in fail_bios()
314 bio_endio(bio); in fail_bios()
320 struct bio *bio; in submit_bios() local
325 while ((bio = bio_list_pop(bios))) in submit_bios()
326 submit_bio_noacct(bio); in submit_bios()
339 static void issue_bio(struct clone *clone, struct bio *bio) in issue_bio() argument
341 if (!bio_triggers_commit(clone, bio)) { in issue_bio()
342 submit_bio_noacct(bio); in issue_bio()
351 bio_io_error(bio); in issue_bio()
360 bio_list_add(&clone->deferred_flush_bios, bio); in issue_bio()
372 static void remap_and_issue(struct clone *clone, struct bio *bio) in remap_and_issue() argument
374 remap_to_dest(clone, bio); in remap_and_issue()
375 issue_bio(clone, bio); in remap_and_issue()
387 struct bio *bio; in issue_deferred_bios() local
395 while ((bio = bio_list_pop(bios))) { in issue_deferred_bios()
396 if (bio_triggers_commit(clone, bio)) in issue_deferred_bios()
397 bio_list_add(&flush_bios, bio); in issue_deferred_bios()
399 bio_list_add(&normal_bios, bio); in issue_deferred_bios()
410 static void complete_overwrite_bio(struct clone *clone, struct bio *bio) in complete_overwrite_bio() argument
424 if (!(bio->bi_opf & REQ_FUA)) { in complete_overwrite_bio()
425 bio_endio(bio); in complete_overwrite_bio()
434 bio_io_error(bio); in complete_overwrite_bio()
443 bio_list_add(&clone->deferred_flush_completions, bio); in complete_overwrite_bio()
449 static void trim_bio(struct bio *bio, sector_t sector, unsigned int len) in trim_bio() argument
451 bio->bi_iter.bi_sector = sector; in trim_bio()
452 bio->bi_iter.bi_size = to_bytes(len); in trim_bio()
455 static void complete_discard_bio(struct clone *clone, struct bio *bio, bool success) in complete_discard_bio() argument
465 remap_to_dest(clone, bio); in complete_discard_bio()
466 bio_region_range(clone, bio, &rs, &nr_regions); in complete_discard_bio()
467 trim_bio(bio, region_to_sector(clone, rs), in complete_discard_bio()
469 submit_bio_noacct(bio); in complete_discard_bio()
471 bio_endio(bio); in complete_discard_bio()
474 static void process_discard_bio(struct clone *clone, struct bio *bio) in process_discard_bio() argument
478 bio_region_range(clone, bio, &rs, &nr_regions); in process_discard_bio()
480 bio_endio(bio); in process_discard_bio()
489 (unsigned long long)bio->bi_iter.bi_sector, in process_discard_bio()
490 bio_sectors(bio)); in process_discard_bio()
491 bio_endio(bio); in process_discard_bio()
500 complete_discard_bio(clone, bio, true); in process_discard_bio()
510 bio_endio(bio); in process_discard_bio()
518 bio_list_add(&clone->deferred_discard_bios, bio); in process_discard_bio()
533 struct bio *overwrite_bio;
837 static void overwrite_endio(struct bio *bio) in overwrite_endio() argument
839 struct dm_clone_region_hydration *hd = bio->bi_private; in overwrite_endio()
841 bio->bi_end_io = hd->overwrite_bio_end_io; in overwrite_endio()
842 hd->status = bio->bi_status; in overwrite_endio()
847 static void hydration_overwrite(struct dm_clone_region_hydration *hd, struct bio *bio) in hydration_overwrite() argument
854 hd->overwrite_bio = bio; in hydration_overwrite()
855 hd->overwrite_bio_end_io = bio->bi_end_io; in hydration_overwrite()
857 bio->bi_end_io = overwrite_endio; in hydration_overwrite()
858 bio->bi_private = hd; in hydration_overwrite()
861 submit_bio_noacct(bio); in hydration_overwrite()
874 static void hydrate_bio_region(struct clone *clone, struct bio *bio) in hydrate_bio_region() argument
880 region_nr = bio_to_region(clone, bio); in hydrate_bio_region()
888 bio_list_add(&hd->deferred_bios, bio); in hydrate_bio_region()
896 issue_bio(clone, bio); in hydrate_bio_region()
915 issue_bio(clone, bio); in hydrate_bio_region()
922 bio_list_add(&hd2->deferred_bios, bio); in hydrate_bio_region()
937 bio_io_error(bio); in hydrate_bio_region()
948 if (is_overwrite_bio(clone, bio)) { in hydrate_bio_region()
950 hydration_overwrite(hd, bio); in hydrate_bio_region()
952 bio_list_add(&hd->deferred_bios, bio); in hydrate_bio_region()
1178 struct bio *bio; in process_deferred_discards() local
1194 bio_list_for_each(bio, &discards) { in process_deferred_discards()
1195 bio_region_range(clone, bio, &rs, &nr_regions); in process_deferred_discards()
1207 while ((bio = bio_list_pop(&discards))) in process_deferred_discards()
1208 complete_discard_bio(clone, bio, r == 0); in process_deferred_discards()
1228 struct bio *bio; in process_deferred_flush_bios() local
1250 while ((bio = bio_list_pop(&bios))) in process_deferred_flush_bios()
1251 bio_io_error(bio); in process_deferred_flush_bios()
1258 while ((bio = bio_list_pop(&bio_completions))) in process_deferred_flush_bios()
1259 bio_endio(bio); in process_deferred_flush_bios()
1261 while ((bio = bio_list_pop(&bios))) { in process_deferred_flush_bios()
1262 if ((bio->bi_opf & REQ_PREFLUSH) && dest_dev_flushed) { in process_deferred_flush_bios()
1267 bio_endio(bio); in process_deferred_flush_bios()
1269 submit_bio_noacct(bio); in process_deferred_flush_bios()
1314 static int clone_map(struct dm_target *ti, struct bio *bio) in clone_map() argument
1331 if (bio->bi_opf & REQ_PREFLUSH) { in clone_map()
1332 remap_and_issue(clone, bio); in clone_map()
1336 bio->bi_iter.bi_sector = dm_target_offset(ti, bio->bi_iter.bi_sector); in clone_map()
1343 if (bio_op(bio) == REQ_OP_DISCARD) { in clone_map()
1344 process_discard_bio(clone, bio); in clone_map()
1358 region_nr = bio_to_region(clone, bio); in clone_map()
1360 remap_and_issue(clone, bio); in clone_map()
1362 } else if (bio_data_dir(bio) == READ) { in clone_map()
1363 remap_to_source(clone, bio); in clone_map()
1367 remap_to_dest(clone, bio); in clone_map()
1368 hydrate_bio_region(clone, bio); in clone_map()
1373 static int clone_endio(struct dm_target *ti, struct bio *bio, blk_status_t *error) in clone_endio() argument