Lines Matching refs:pe
751 struct dm_snap_pending_exception *pe = mempool_alloc(&s->pending_pool, in alloc_pending_exception() local
755 pe->snap = s; in alloc_pending_exception()
757 return pe; in alloc_pending_exception()
760 static void free_pending_exception(struct dm_snap_pending_exception *pe) in free_pending_exception() argument
762 struct dm_snapshot *s = pe->snap; in free_pending_exception()
764 mempool_free(pe, &s->pending_pool); in free_pending_exception()
1640 struct dm_snap_pending_exception *pe = context; in pending_complete() local
1642 struct dm_snapshot *s = pe->snap; in pending_complete()
1649 dm_exception_table_lock_init(s, pe->e.old_chunk, &lock); in pending_complete()
1668 *e = pe->e; in pending_complete()
1691 if (__chunk_is_tracked(s, pe->e.old_chunk)) { in pending_complete()
1693 __check_for_conflicting_io(s, pe->e.old_chunk); in pending_complete()
1699 dm_remove_exception(&pe->e); in pending_complete()
1703 snapshot_bios = bio_list_get(&pe->snapshot_bios); in pending_complete()
1704 origin_bios = bio_list_get(&pe->origin_bios); in pending_complete()
1705 full_bio = pe->full_bio; in pending_complete()
1707 full_bio->bi_end_io = pe->full_bio_end_io; in pending_complete()
1723 free_pending_exception(pe); in pending_complete()
1726 static void complete_exception(struct dm_snap_pending_exception *pe) in complete_exception() argument
1728 struct dm_snapshot *s = pe->snap; in complete_exception()
1731 s->store->type->commit_exception(s->store, &pe->e, !pe->copy_error, in complete_exception()
1732 pending_complete, pe); in complete_exception()
1741 struct dm_snap_pending_exception *pe = context; in copy_callback() local
1742 struct dm_snapshot *s = pe->snap; in copy_callback()
1744 pe->copy_error = read_err || write_err; in copy_callback()
1746 if (pe->exception_sequence == s->exception_complete_sequence) { in copy_callback()
1750 complete_exception(pe); in copy_callback()
1754 pe = rb_entry(next, struct dm_snap_pending_exception, in copy_callback()
1756 if (pe->exception_sequence != s->exception_complete_sequence) in copy_callback()
1760 rb_erase(&pe->out_of_order_node, &s->out_of_order_tree); in copy_callback()
1761 complete_exception(pe); in copy_callback()
1773 BUG_ON(pe->exception_sequence == pe2->exception_sequence); in copy_callback()
1774 if (pe->exception_sequence < pe2->exception_sequence) in copy_callback()
1780 rb_link_node(&pe->out_of_order_node, parent, p); in copy_callback()
1781 rb_insert_color(&pe->out_of_order_node, &s->out_of_order_tree); in copy_callback()
1789 static void start_copy(struct dm_snap_pending_exception *pe) in start_copy() argument
1791 struct dm_snapshot *s = pe->snap; in start_copy()
1799 src.sector = chunk_to_sector(s->store, pe->e.old_chunk); in start_copy()
1803 dest.sector = chunk_to_sector(s->store, pe->e.new_chunk); in start_copy()
1808 dm_kcopyd_copy(s->kcopyd_client, &src, 1, &dest, 0, copy_callback, pe); in start_copy()
1818 static void start_full_bio(struct dm_snap_pending_exception *pe, in start_full_bio() argument
1821 struct dm_snapshot *s = pe->snap; in start_full_bio()
1824 pe->full_bio = bio; in start_full_bio()
1825 pe->full_bio_end_io = bio->bi_end_io; in start_full_bio()
1829 copy_callback, pe); in start_full_bio()
1856 struct dm_snap_pending_exception *pe, chunk_t chunk) in __insert_pending_exception() argument
1858 pe->e.old_chunk = chunk; in __insert_pending_exception()
1859 bio_list_init(&pe->origin_bios); in __insert_pending_exception()
1860 bio_list_init(&pe->snapshot_bios); in __insert_pending_exception()
1861 pe->started = 0; in __insert_pending_exception()
1862 pe->full_bio = NULL; in __insert_pending_exception()
1865 if (s->store->type->prepare_exception(s->store, &pe->e)) { in __insert_pending_exception()
1867 free_pending_exception(pe); in __insert_pending_exception()
1871 pe->exception_sequence = s->exception_start_sequence++; in __insert_pending_exception()
1874 dm_insert_exception(&s->pending, &pe->e); in __insert_pending_exception()
1876 return pe; in __insert_pending_exception()
1889 struct dm_snap_pending_exception *pe, chunk_t chunk) in __find_pending_exception() argument
1895 free_pending_exception(pe); in __find_pending_exception()
1899 return __insert_pending_exception(s, pe, chunk); in __find_pending_exception()
1949 struct dm_snap_pending_exception *pe = NULL; in snapshot_map() local
2027 pe = __lookup_pending_exception(s, chunk); in snapshot_map()
2028 if (!pe) { in snapshot_map()
2030 pe = alloc_pending_exception(s); in snapshot_map()
2035 free_pending_exception(pe); in snapshot_map()
2040 pe = __find_pending_exception(s, pe, chunk); in snapshot_map()
2041 if (!pe) { in snapshot_map()
2061 remap_exception(s, &pe->e, bio, chunk); in snapshot_map()
2065 if (!pe->started && io_overlaps_chunk(s, bio)) { in snapshot_map()
2066 pe->started = 1; in snapshot_map()
2071 start_full_bio(pe, bio); in snapshot_map()
2075 bio_list_add(&pe->snapshot_bios, bio); in snapshot_map()
2077 if (!pe->started) { in snapshot_map()
2079 pe->started = 1; in snapshot_map()
2084 start_copy(pe); in snapshot_map()
2435 struct dm_snap_pending_exception *pe, *pe2; in __origin_write() local
2468 pe = __lookup_pending_exception(snap, chunk); in __origin_write()
2469 if (!pe) { in __origin_write()
2480 pe = alloc_pending_exception(snap); in __origin_write()
2488 free_pending_exception(pe); in __origin_write()
2492 pe = __insert_pending_exception(snap, pe, chunk); in __origin_write()
2493 if (!pe) { in __origin_write()
2501 free_pending_exception(pe); in __origin_write()
2502 pe = pe2; in __origin_write()
2514 bio_list_add(&pe->origin_bios, bio); in __origin_write()
2517 if (!pe->started) { in __origin_write()
2518 pe->started = 1; in __origin_write()
2519 pe_to_start_last = pe; in __origin_write()
2523 if (!pe->started) { in __origin_write()
2524 pe->started = 1; in __origin_write()
2525 pe_to_start_now = pe; in __origin_write()